Introducció a la programació 8051 en llenguatge assemblador

Proveu El Nostre Instrument Per Eliminar Problemes





El llenguatge ensamblador és un llenguatge de programació de baix nivell utilitzat per escriure codi de programa en termes de mnemotècnia. Tot i que hi ha molts idiomes d’alt nivell que actualment es demanen, el llenguatge de programació d’ensamblatges s’utilitza popularment en moltes aplicacions i es pot utilitzar per a manipulacions directes de maquinari. També s'utilitza per escriure el fitxer Codi de programació 8051 de manera eficient amb menys nombre de cicles de rellotge en consumir menys memòria en comparació amb els altres llenguatges d'alt nivell.

8051 Programació en llenguatge assemblador

Programació 8051



8051 Programació en llenguatge assemblador

El llenguatge ensamblador és un llenguatge de programació totalment relacionat amb el maquinari. Els dissenyadors incrustats han de tenir prou coneixement sobre el maquinari d’un determinat processador o controladors abans d’escriure el programa. El llenguatge ensamblador és desenvolupat per mnemonics, per tant, els usuaris no ho poden entendre fàcilment per modificar el programa.


8051 Programació en llenguatge assemblador

8051 Programació en llenguatge assemblador



El llenguatge de programació de muntatge és desenvolupat per diversos compiladors i el 'bolera' és el més adequat per a microcontroladorprogramació desenvolupament. Microcontroladorso els processadors només poden entendre el llenguatge binari en forma de ‘0s o 1s’. Un assemblador converteix el llenguatge d’ensamblatge en llenguatge binari i després el guarda a lamicrocontroladorde memòria per realitzar la tasca específica.

8051 Arquitectura de microcontroladors

El 8051microcontroladorés el Arquitectura de Harvard basada en el CISC , i té perifèrics com 32 E / S, temporitzadors / comptadors, comunicació en sèrie i memòries. Elmicrocontroladorrequereix un programa per realitzar les operacions que requereixen una memòria per desar i llegir les funcions. El 8051microcontroladorconsisteix en memòries RAM i ROM per emmagatzemar instruccions.

Arquitectura del microcontrolador 8051

8051 Arquitectura de microcontroladors

Un registre és la part principal de els processadors imicrocontroladors que es troba a la memòria que proporciona una manera més ràpida de recollir i emmagatzemar les dades. La programació del llenguatge assemblador 8051 es basa en els registres de memòria. Si volem manipular dades a un processador o controlador mitjançant la resta, la suma, etc., no ho podem fer directament a la memòria, però necessita registres per processar i emmagatzemar les dades.Microcontroladorscontenen diversos tipus de registres que es poden classificar segons les seves instruccions o contingut que hi operen.

Programes de microcontroladors 8051 en llenguatge de muntatge

El llenguatge ensamblador està format per elements en què s’utilitzen tots per escriure el programade manera seqüencial. Seguiu les regles indicades per escriure programació en llenguatge ensamblador.


Regles del llenguatge assemblador

  • El codi de muntatge s’ha d’escriure en majúscules
  • Les etiquetes han d'anar seguides de dos punts (etiqueta :)
  • Tots els símbols i etiquetes han de començar amb una lletra
  • Tots els comentaris s’escriuen amb minúscula
  • L'última línia del programa ha de ser la directiva END

Els mnemotècnics del llenguatge ensamblador tenen la forma de codi op, com ara MOV, ADD, JMP, etc., que s’utilitzen per realitzar les operacions.

Codi operatiu: El codi op és una instrucció única que pot executar la CPU. Aquí el codi op és una instrucció MOV.

Operands: Els operands són una sola peça de dades que es pot operar mitjançant el codi op. Per exemple, l'operació de multiplicació la realitzen els operands que es multipliquen per l'operand.

Sintaxi: MUL a,b

Els elements d'una programació de llenguatge assemblador:

  • Muntar directrius
  • Conjunt d’instruccions
  • Modes d’adreces

Instruccions de muntatge:

Les directrius de muntatge donen les indicacions a la CPU. El 8051microcontroladorconsta de diversos tipus de directives de muntatge per donar la direcció a la unitat de control. Les directrius més útils són la programació 8051, com ara:

  • ORG
  • DB
  • EQU
  • FINAL

ORG(origen): Aquesta directiva indica l’inici del programa. S’utilitza per establir l’adreça del registre durant el muntatge. Per exemple, ORG 0000h indica al compilador tot el codi posterior que comença a l'adreça 0000h.

Sintaxi: ORG 0000h

DB(defineix byte): El byte de definició s’utilitza per permetre una cadena de bytes. Per exemple, imprimiu l ''EDGEFX' en què l'adreça pren cada caràcter i finalment imprimeix la 'cadena' pel DB directament amb cometes dobles.

Sintaxi:

ORG 0000h

MOV a, # 00h
-----
-----
DB 'EDGEFX'

EQU (equivalent): La directiva equivalent s’utilitza per equiparar l’adreça de la variable.

Sintaxi:

reg equ,09h
------
------
MOVreg,# 2h

FINAL: La directiva END s’utilitza per indicar el final del programa.

Sintaxi:

reg equ,09h

------
------
MOVreg,# 2h
FINAL

Modes d'adreça:

La forma d’accedir a les dades s’anomena mode d’adreçament. La CPU pot accedir a les dades de diferents maneres mitjançant modes d’adreces. El 8051microcontroladorconsta de cinc modes d'adreçament com:

  • Mode d’adreçament immediat
  • Registra el mode d’adreces
  • Mode d’adreces directes
  • Mode d'adreçament indirecte
  • Mode d’adreces índex base

Mode d'adreçament immediat:

En aquest mode d’adreçament, la font ha de ser un valor que pot seguir el # i la destinació ha de ser Registres SFR, registres d’ús general i adreça. S'utilitza per emmagatzemar immediatament el valor als registres de memòria.

Sintaxi:

MOV A, # 20h // A ésunregistre d’acumuladors, 20 s’emmagatzemen a l’A //
MOV R0,# 15 // R0 és un registre d’ús general 15 que s’emmagatzema al registre R0 //
MOV P0, # 07h // P0 és un registre SFR07 que s’emmagatzema al P0 //
MOV 20h,# 05h // 20h és l'adreça del registre 05 emmagatzemat a les 20h //

ex:

MOV R0, núm. 1
MOV R0, # 20 // R0<—R0[15] +20, el valor final s'emmagatzema a R0 //

Registra el mode d’adreces:

En aquest mode d'adreçament, la font i la destinació han de ser un registre, però no registres de propòsit general. Per tant, les dades no es mouen dins del fitxer registres bancaris d’ús general .

Sintaxi:

MOV A, B // A és un registre SFR, B és un registre d’ús general //
MOV R0, R1 // Instruccions no vàlides, GPR a GPR no és possible //

EX:

MOV R0, # 02h
MOV A, # 30h
AFEGEIX R0, A // R0<—R0+A, the final value is stored in the R0 register//

Mode d’adreces directes

En aquest mode d'adreçament, la font o la destinació (o la font i la destinació) han de ser una adreça, però no un valor.

Sintaxi:

MOV A,20h // 20h és una adreça A és un registre //
MOV 00h, 07h // tots dos es dirigeixen als registres GPS //

ex:

MOV 07h,# 01h
MOV A, # 08h
AFEGEIX A,07h // A<—A+07h the final value is stored in A//

Mode d'adreçament indirecte:

En aquest mode d'adreçament, ha de ser la font o la destinació (o la destinació o la font)aadreça indirecta, però no un valor. Aquest mode d'adreçament admet el concepte de punter. El punter és una variable que s’utilitza per emmagatzemar l’adreça de l’altra variable. Aquest concepte de punter només s’utilitza per als registres R0 i R1.

Sintaxi:

El valor MOVR0, # 01h // 01 s’emmagatzema al registre R0, l’adreça R0 és 08h //
MOV R1, # 08h // R1 és la variable punter quebotiguesadreça (08h) de R0 //
MOV 20h,El valor @ R1 // 01 s’emmagatzema a l’adreça de 20 hores del registre GP //

Mode d

Mode d'adreçament indirecte

Mode d'adreces índex base:

Aquest mode d'adreçament s'utilitza per llegir les dades del fitxer memòria externa o memòria ROM . Tots els modes d'adreçament no poden llegir les dades de la memòria del codi. El codi ha de llegir-se a través del registre DPTR. El DPTR s’utilitza per apuntar les dades al codi o a la memòria externa.

Sintaxi:

MOVC A, @ A + DPTR // C indica memòria de codi //
MOCX A, @ A + DPTR // X indiquen memòria externa //
EX: MOV A, # 00H // 00H s’emmagatzema al registre A //
MOV DPTR, # 0500H // DPTR apunta l'adreça 0500h a la memòria //
MOVC A, @ A + DPTR // envieu el valorael registre A //
MOV P0, A // data de la A enviada al registrador PO //

Conjunt d'instruccions:

El conjunt d’instruccions és l’estructura del controlador o processador que proporciona ordres al controlador per guiar el controlador per al processament de dades. El conjunt d’instruccions consta d’instruccions, tipus de dades natives, modes d’adreces, registres d’interrupcions, manipulació excepcional i arquitectura de memòria. El 8051microcontrolador pot seguir les instruccions del CISC amb l'arquitectura de Harvard. En el cas de la programació 8051, hi ha diferents tipus d’instruccions CISC:

  • Conjunt d’instruccions de transferència de dades
  • Conjunt d’instruccions seqüencials
  • Conjunt d'instruccions aritmètiques
  • Ramificació Instruccióconjunt
  • Conjunt Loop Instrcution
  • Conjunt d’instruccions condicionals
  • Conjunt d'instruccions incondicionals
  • Conjunt d’instruccions lògiques
  • Conjunt d’instruccions booleanes

Conjunt d'instruccions aritmètiques:

Les instruccions aritmètiques realitzen les operacions bàsiques com ara:

  • Addició
  • Multiplicació
  • Resta
  • Divisió

Addició:

ORG 0000h
MOV R0, # 03H // mou el valor 3 al registre R0 //
MOV A, # 05H // mou el valor 5 a l’acumulador A //
Afegeix A, 00H //addAvalor amb valor R0 i emmagatzema el resultatinA//
FINAL

Multiplicació:

ORG 0000h
MOV R0, # 03H // mou el valor 3 al registre R0 //
MOV A, # 05H // mou el valor 5 a l’acumulador A //
MUL A, 03H //Multiplicatel resultat s’emmagatzema a l’Acumulador A //
FINAL

Resta:

ORG 0000h
MOV R0, # 03H // mou el valor 3 per registrar R0 //
MOV A, # 05H // mou el valor 5 a l’acumulador A //
SUBB A, 03H // El valor del resultat s’emmagatzema a l’Acumulador A //
FINAL

Divisió:

ORG 0000h
MOV R0, # 03H // mou el valor 3 per registrar R0 //
MOV A, # 15H // mou el valor 5 a l’acumulador A //
DIV A, 03H // el valor final s’emmagatzema a l’Acumulador A //
FINAL

Instruccions condicionals

La CPU executa les instruccions en funció de la condició comprovant l'estat d'un sol bit o l'estat de byte. El 8051microcontroladorconsta de diverses instruccions condicionals com ara:

  • JB -> Saltar a sota
  • JNB -> Saltar si no és a sota
  • JC -> Saltar si porta
  • JNC -> Saltar sinoPorteu
  • JZ -> Saltar si zero
  • JNZ -> Saltar sinoZero
Instruccions condicionals

Instruccions condicionals

1. Sintaxi:

JB P1.0, etiqueta
- - - - - - - -
- - - - - - - -
Etiqueta: - - - - - - - - -
- - - - - - - -
FINAL

2. Sintaxi:

JNB P1.0, etiqueta
- - - - - - - -
- - - - - - - -
Etiqueta: - - - - - - - - -
- - - - - - - -
FINAL

3. Sintaxi:

JC, etiqueta
- - - - - - - -
- - - - - - - -
Etiqueta: - - - - - - - - -
- - - - - - - -
FINAL

4. Sintaxi:

JNC, etiqueta
- - - - - - - -
- - - - - - - -
Etiqueta: - - - - - - - - -
- - - - - - - -
FINAL
5. Sintaxi:

JZ, etiqueta
- - - - - - - -
- - - - - - - -
Etiqueta: - - - - - - - - -
- - - - - - - -
FINAL

6. Sintaxi:

JNZ, etiqueta
- - - - - - - -
- - - - - - - -
Etiqueta: - - - - - - - - -
- - - - - - - -
FINAL

Instruccions per trucar i saltar:

Les instruccions de trucada i salt s’utilitzen per evitar la replicació del codi del programa. Quan algun codi específic s'utilitza més d'una vegada en diferents llocs del programa, si ho mencionemnom específicallavors el codipodríem utilitzar aquest nom a qualsevol lloc del programa sense introduir cap codi per a cada vegada. Això redueix la complexitat del programa. La programació 8051 consisteix en instruccions de trucada i salt, com LCALL, SJMP.

  • LCALL
  • UNA TRUCADA
  • SJMP
  • LJMP

1. Sintaxi:

ORG 0000h
- - - - - - - -
- - - - - - - -
ACALL, etiqueta
- - - - - - - -
- - - - - - - -
SJMP STOP
Etiqueta: - - - - - - - - -
- - - - - - - -
- - - - - - - -
dret
ATURA:NOP

2. Sintaxi:

ORG 0000h
- - - - - - - -
- - - - - - - -
LCALL, etiqueta
- - - - - - - -
- - - - - - - -
SJMP STOP
Etiqueta: - - - - - - - - -
- - - - - - - -
- - - - - - - -
dret
ATURA:NOP

Instruccions per trucar i saltar

Instruccions per trucar i saltar

Instruccions de bucle:

Les instruccions de bucle s’utilitzen per repetir el bloc cada vegada mentre es realitzen les operacions d’increment i decrement. El 8051microcontroladorconsisteixen en dos tipus d'instruccions de bucle:

  • CJNE -> compara i salta si no és igual
  • DJNZ -> disminuir i saltar si no zero

1. Sintaxi:

deCJNE
MOV A, # 00H
MOV B, # 10H
Etiqueta: INC A
- - - - - -
- - - - - -
CJNE A, etiqueta

2. Sintaxi:

deDJNE

MOV R0, # 10H
Etiqueta: - - - - - -
- - - - - -
DJNE R0, segell
- - - - - -
- - - - - -
FINAL

Conjunt d'instruccions lògiques:

El conjunt d'instruccions del microcontrolador 8051 proporciona les instruccions lògiques AND, OR, XOR, TEST, NOT i booleanes del conjunt i neteja els bits en funció de la necessitat del programa.

Conjunt d’instruccions lògiques

Conjunt d’instruccions lògiques

1. Sintaxi:

MOV A, # 20H / 00100000 /
MOV R0, # 03H / 00000101 /
ORL A, R0 // 00100000/00000101 = 00000000 //

2. Sintaxi:

MOV A, # 20H / 00100000 /
MOV R0, # 03H / 00000101 /
ANL A, R0

3. Sintaxi:

MOV A, # 20H / 00100000 /
MOV R0, # 03H / 00000101 /
XRL A, R0

Operadors de canvi

Els operadors de torn s’utilitzen per enviar i rebre les dades de manera eficient. El 8051microcontroladorconsten de quatre operadors de torn:

  • RR -> Gira a la dreta
  • RRC -> Gireu cap a la dreta a través del transport
  • RL -> Gira a l'esquerra
  • RLC -> Gireu cap a l'esquerra fins a la portada

Gira a la dreta (RR):

En aquesta operació de desplaçament, el MSB es converteix en LSB i tots els bits es desplacen cap al costat dret bit per bit, en sèrie.

Sintaxi:

MOV A, # 25h
RR A

Gira a l'esquerra (RL):

En aquesta operació de desplaçament, el MSB es converteix en LSB i tots els bits es desplacen cap al costat esquerre bit per bit, en sèrie.

Sintaxi:

MOV A, # 25h
RL A

RRC Gira cap a la dreta a través de Carry:

En aquesta operació de desplaçament, el LSB es mou per transportar i el transport es converteix en MSB, i tots els bits es desplacen cap a la dreta de la posició bit per bit.

Sintaxi:

MOV A, # 27h
RRC A

RLC Gira a l'esquerra mitjançant Carry:

En aquesta operació de desplaçament, el MSB es mou per transportar i el transport es converteix en LSB i tots els bits es desplacen cap al costat esquerre en una posició poc a poc.

Sintaxi:

MOV A, # 27h
RLC A

Programes bàsics incrustats de C:

Elmicrocontroladorla programació difereix per a cada tipus de sistema operatiu. N’hi ha molts sistemes operatius com Linux, Windows, RTOS, etc. No obstant això, RTOS té diversos avantatges per al desenvolupament de sistemes incrustats. A continuació es donen alguns exemples de programació de nivell Assemblea.

LED parpellejant amb 8051microcontrolador:

  • Visualització de números en pantalla de 7 segments mitjançant microcontrolador 8051
  • Càlculs de temporitzadors / comptadors i programa amb 8051microcontrolador
  • Càlculs i programes de comunicació en sèrie mitjançant 8051microcontrolador

Programes LED amb 8051 M.icrocontrller

1. WAP per alternar els LED PORT1

ORG 0000H
TOGLE: MOV P1, # 01 //moure00000001 al registre p1 //
CALL DELAY // executeu el delay //
MOV A, P1 // mourevalor p1a l'acumulador //
CPL A // complementar un valor //
MOV P1, A // moveu 11111110 al registre port1 //
CALL DELAY // executeu el delay //
SJMP TOGLE
RETARD: MOV R5, # 10H // registre de càrrega R5 amb 10 //
DOS: MOV R6, # 200 // registre de càrrega R6 amb 200 //
UN: MOV R7, # 200 // registre de càrrega R7 amb 200 //
DJNZ R7, $ // disminueix R7 fins que sigui zero //
DJNZ R6, ONE // disminueix R7 fins que sigui zero //
DJNZ R5, DOS // disminueix R7 fins que sigui zero //
RET // torna al programa principal //
FINAL

Càlculs de temporitzadors / comptadors i programa amb 8051 M.icrocontrolador:

El retard és un dels factors importants en el desenvolupament de programari d'aplicacions. El temporitzadors i comptadors són components de maquinari demicrocontrolador, que s’utilitzen en moltes aplicacions per proporcionar un retard de temps precís amb impulsos de recompte. Baltres tasques s’implementen mitjançant la tècnica del programari.

1. WAP per calcular el retard de 500us.

MOV TMOD, # 10H // seleccioneu el mode de temporitzador pels registres //
MOV TH1, # 0FEH // emmagatzema el temps de retard en bits superiors //
MOV TL1, # 32H // emmagatzema el temps de retard en bits baixos //
JNB TF1, $ // disminueix el valor del temporitzador fins que sigui zero //
CLR TF1 // esborra el senyalador del temporitzadormica//
CLR TR1 // DESACTIVA el temporitzador //

2. WAP per alternar els LEDamb el5segtemps de retard

ORG 0000H
TORNADA: MOV PO, # 00H
RETARD DE CONVOCAT .RIA
MOV P0, # 0FFH
RETARD DE LA CRIDA
TORNAR SUMA
RETARD: MOV R5, # 50H // registre de càrrega R5 amb 50 //
DELAY1: MOV R6, # 200 // registre de càrrega R6 amb 200 //
DELAY2: MOV R7, # 229 // registre de càrrega R7 amb 200 //
DJNZ R7, $ // disminueix R7 fins que sigui zero //
DJNZ R6, DELAY2 // disminueix R6 fins que sigui zero //
DJNZ R5, DELAY1 // disminueix R5 fins que sigui zero //
RET // torna al programa principal //
FINAL

3. WAP per comptar els 250 impulsos mitjançant mode0 count0

Sintaxi:

ORG 0000H
MOV TMOD, # 50H // selecciona el comptador //
MOV TH0, # 15 // mou els polsos de recompte bit més alt //
MOV TH1, # 9FH //moureels polsos de comptatge, bit inferior //
SET TR0 // AL TEMPORITZADOR //
JNB $ // disminueix el valor del recompte fins a zero //
CLR TF0 // neteja el comptador, marcamica//
CLR TR0 // atura el temporitzador //
FINAL

Programació de comunicacions en sèrie mitjançant 8051 M.icrocontrolador:

Comunicació en sèrie s’utilitza habitualment per transmetre i rebre les dades. El 8051microcontroladorconsisteixen en comunicació serial UART / USART i els senyals són transmesos i rebuts perTxi pins Rx. La comunicació UART transfereix les dades bit per bit en sèrie. UART és un protocol semidúplex que transfereix i rep les dades, però no al mateix temps.

1. WAP per transmetre els caràcters a l'Hiper Terminal

MOV SCON, # 50H // estableix la comunicació en sèrie //
MOV TMOD, # 20H // seleccioneu el mode de temporitzador //
MOV TH1, # -3 // estableix la velocitat en bauds //
SET TR1 // AL TEMPORITZADOR //
MOV SBUF, # ’S’ // transmet S a la finestra de sèrie //
JNB TI, $ // disminueix el valor del temporitzador fins que sigui zero //
CLR RI // esborra la interrupció de recepció //
CLR TR1 // temporitzador d'esborrar //

2. WAP per transmetre el caràcter de recepció per l'hiper terminal

MOV SCON, # 50H // estableix la comunicació en sèrie //
MOV TMOD, # 20H // seleccioneu el mode de temporitzador //
MOV TH1, # -6 // estableix la velocitat en bauds //
SET TR1 // al temporitzador //
MOV SBUF, # ’S’ // transmet S a la finestra de sèrie //
JNB RI, $ // disminueix el valor del temporitzador fins que sigui zero //
CLR RI // esborra la interrupció de recepció //
MOV P0, SBUF // envieu el valor del registre SBUF al port0 //
CLR TR1 // temporitzador d'esborrar //

Tot això es tracta de la programació 8051 en llenguatge ensamblador en breu amb programes basats en exemples. Esperem que aquesta informació adequada sobre el llenguatge ensamblador sigui certament útil per als lectors i esperem els seus valuosos comentaris a la secció de comentaris que hi ha a continuació.