15
Tema 1 1 1 Ensamblador C51 Es el lenguaje más cercano a los microprocesadores y usado como lenguaje en la programación. Hay también lenguajes de alto nivel (C, C++, etc.) y que se están usando para trabajar con micros. El C51 tiene 111 instrucciones elementales 49 de ellas ocupan 1 byte de memoria 45 de ellas ocupan 2 bytes de memoria 13 de ellas ocupan 3 bytes de memoria. Hay 54 principales. Las demás son extensiones a estas. Cada acceso a memoria es de 1 byte !. Algunas instrucciones ocupan más de 1 ciclo de máquina y otras modifican el C y el OV (acarreo y desbordamiento) 2 Ensamblador C51 Modos de direccionamiento. Espacio asociado a cada uno de estos modos.

ensamblador c51

Embed Size (px)

Citation preview

Page 1: ensamblador c51

Tema 1 1

1

Ensamblador C51• Es el lenguaje más cercano a los microprocesadores y

usado como lenguaje en la programación.• Hay también lenguajes de alto nivel (C, C++, etc.) y que

se están usando para trabajar con micros.• El C51 tiene 111 instrucciones elementales

– 49 de ellas ocupan 1 byte de memoria– 45 de ellas ocupan 2 bytes de memoria– 13 de ellas ocupan 3 bytes de memoria.– Hay 54 principales. Las demás son extensiones a estas.

– Cada acceso a memoria es de 1 byte !.– Algunas instrucciones ocupan más de 1 ciclo de máquina y otras

modifican el C y el OV (acarreo y desbordamiento)

2

Ensamblador C51• Modos de direccionamiento. Espacio asociado a cada uno

de estos modos.

Page 2: ensamblador c51

Tema 1 2

3

Ensamblador C51• Modos de direccionamiento. Notas:.

4

Ensamblador C51• Modos de direccionamiento

– Directo• A registro................A,B, R0...R7 y PSW, DPTR• A memoria..............128 bytes bajos, PSW, SFR

– Indirecto• RAM externa...........@R1, @R0, SP• RAM interna........... @R1, @R0, @DPTR

– Inmediato ......................constantes en memoria de programa

– Indexado...................... @A+DTPR

• EjemplosADD A,3Bh Directo a memoria. dir. en A y constante en HexADD A,@R0 Indirecto. Dir. en A y contenido en R0MOV Rn,A RegistroMOV A,#255 InmediatoMOVC A, @A+DPTR Indexado (ROM)MOVC A, @A+PC Indexado (ROM)

Page 3: ensamblador c51

Tema 1 3

5

Ensamblador C51• Ejemplo en ensamblador:

MOV A,77hJNZ RESTA ;Salto con condición

SUMA:MOV A,78h ;78h dato1ADD A,79h ;79h dato2MOVC 7Ah,A ;7Ah resultadoJMP fin

RESTA:MOV A,78h ;Salto son condiciónCLR C ;Acarreo a ceroSUBB A,79h ;restaMOV 7Ah,A

fin;NOP

Equivalente en C:if(dato !=0)

resultado=dato1 + dato2else

resultado=dato1 -dato2

6

Ensamblador C51• Instrucciones en ensamblador:

etiqueta instrucción operandos ;comentario

– Las etiquetas sirven para• Hacer saltos• Dar nombre a las variables

– Las instrucciones se necesitan para hacer operaciones tipo :• ALU (aritméticas y lógicas), SUMA, RESTA, AND, OR, etc.• TRANSFERENCIA (entre registros y memoria)• SALTOS (instrucciones de control), CONDICIONALES,

INCONDICIONALES, SUBRUTINA,etc.– Operandos:

• Datos de registros, inmediatos, etc.

– Comentarios• Pues eso....

Page 4: ensamblador c51

Tema 1 4

7

Ensamblador C51• Instrucciones en ensamblador (más directivas)

– Directiva equdato equ 77h

equ, nos dice que dato y 77h son lo mismo, es equivalente a a lo que esun define en C.

– Directiva csegCSEG AT 0A000H

nos dice a partir de tal dirección se carga el programa.Por lo general se emplea la 0A000H, debido a que es RAM, la parte

baja de RAM de 8000H a 0A000H la usa el programa monitor.

8

Ensamblador C51• Tipos de Instrucciones:

1-ARITMÉTICAS 2-LOGICAS3-TRANSFERENCIA 4-CONTROL

• ARITMÉTICASADD A,<src_byte> ;formato

ADD A,R0 ;directo a registroADD A,7EH ;directo a memoriaADD A,@R0 ;indirectoADD A,#5 ;inmediato

Codificación: ADD A,Rn 0010 1rrr

Afecta a los flags CY (Acarreo) y OV (Overflow)

Otras:MUL AB ;Multiplicación A=H B=LDIV AB ;División A=Cociente, B=Resto

Page 5: ensamblador c51

Tema 1 5

9

Ensamblador C51• LOGICAS

ANL <dest_byte><src_byte> ;formato

ANL 7EH,A ;directo a memoriaANL @R0,A ;indirectoANL #05h,A ;inmediato

Otras:ORL <dest_byte> A ;Mismas variantesXRL <dest_byte> A ;Mismas variantes

Con solo 1 operando:

CLR A ;Clear, no afecta a los flagsCPL A ;complemento a 1,RL A ;rotación a la izquierdaRR A ;rotación la derechaRLC A ;rotación a la izquierda con acarreoRRC A ;rotación a la derecha con acarreoSWAP A ;Intercambia nibble (4 x 4)

10

Ensamblador C51• TRANSFERENCIA (no se afectan los flags C y OV)

MOV <dest_byte><src_byte> ;formato indirecto/directo

Variantes:MOV DPTR,#data16 ;cargo direccion de 16 bits en DPTR

MOVX A,@DPTR ;traigo a memoria RAM externaMOVX @DPTR,A ;llevo a memoria RAM externa

MOVC A,@A+PC ;traer datos de memoria ROM;usando el PC (INDEXADO)

MOVC A,@A+DPTR ;traer datos de memoria ROM;usando el DPTR (INDEXADO)

Otras:XCH A,<byte> ;IntercambioPUSH ;directo preincrementoPUP ;directo postincremento

Page 6: ensamblador c51

Tema 1 6

11

Ensamblador C51• CONTROL

– Saltos sin condiciónJMP etiquetaOtras versiones:AJMP ;en areas de 2KLJMP ;en areas de 64KSJMP ;en areas de 256K

– Saltos con condiciónJZ ;salta si el resultado es ceroJNZ ;salta si el resultado no es ceroJC ;salta si el acarreo es 1JNC ;salta si el acarreo no es 1JB ;salta si el bit es 1JNB ;salta si el bit no es 1.DJNZ ;decrementa y salta si no es ceroCJNE <dest_byte>,<scr_byte>,etiqueta ;compara y salta si no es

;igual

– SubrutinasCALLRET

12

Ensamblador C51• RESUMEN. Conjunto de instrucciones.

Page 7: ensamblador c51

Tema 1 7

13

Ensamblador C51

14

Ensamblador C51

Page 8: ensamblador c51

Tema 1 8

15

16

Ensamblador C51

Page 9: ensamblador c51

Tema 1 9

17

Ensamblador C51• EJEMPLO

– En lenguaje C:for ( i=lim, p=dir_b ; i>0 ; i--)

*p++ = 0xff– En ensamblador

CSEG AT 0A000H

lim equ 77hi equ 78hdir_b equ 60h

mov i,limmov r0,#dir_b

bucle: mov @r0,#ffhinc r0djnz i,bucle

nopend

18

Ensamblador C51• EJEMPLO

– En lenguaje C:if (dato == 0x63)

res = 0xFFh;else

res = 0x00H;

– En ensambladorCSEG AT 0A000H

dato equ 70hres equ 71h

mov A,datoclr Csubb A,#63hjnz distmov res,#ffhjmp fin

dist: mov res,#00hfin: nop

end

Page 10: ensamblador c51

Tema 1 10

19

Ensamblador C51• LLAMADAS A SUBRUTINAS

– CALL para llamar a la subrutina (pone dir_vuelta en stack)– RET para volver (recoge la dir_vuelta del stack)– En ensamblador

CSEG AT 0A000H

ciclos equ 77h

mov A,cicloscall retardonopnop

retardo: mov r0,Abucle djnz r0,bucle

retend

dir_vuelta

stack

Stack pointer

20

Ensamblador C51• LOS PUERTOS EN EL MICROCONTROLADOR

– Sirven para conectar dispositivos externos. (luces, interruptores,teclados, tanto en modo escritura como lectura). Ver notas delmicro y transparencias.

– P1 -> P7 cuasibidireccionales– P0 multiplexado en tiempo. Puerto de datos.– Se pueden leer, tanto el latch como el pin. Hay diferentes

instrucciones para ello.– Los puerto se pueden ver como SFR (registros).– Se pueden hacer operaciones

mov P4,#5setb P4.0clr P4.5mov P4.0,C

Page 11: ensamblador c51

Tema 1 11

21

Ensamblador C51• LOS PUERTOS EN EL MICROCONTROLADOR

22

Ensamblador C51• LOS PUERTOS EN EL MICROCONTROLADOR

– Estructura de un puerto digital. Todos los puertos cuentan con lasiguiente estructura (1 bit)

RD (lectura) de latch

RD (lectura) de pin

P1.0 (por ejemplo)

WR (escritura) al latchPIN

Page 12: ensamblador c51

Tema 1 12

23

Ensamblador C51• LOS PUERTOS EN EL MICROCONTROLADOR

– Escritura de puerto digital (1 bit)• En escritura, se escribe el latch

mov 90h,#1 ;puerto 1 en 90h– Todos los puertos están en las zona de SFR. Se acceden con

direccionamiento directo en posiciones 80H -> DDH

24

Ensamblador C51• LOS PUERTOS EN EL MICROCONTROLADOR

– Lectura de puerto digital (1 bit)• Lectura del pin

mov A,P1 ;puerto 1 en 90h• Lectura del latch

anl P1,#01H

Page 13: ensamblador c51

Tema 1 13

25

Ensamblador C51• LOS PUERTOS EN EL MICROCONTROLADOR

– Puertos 1 a 6.

RD (lectura) de latch

RD (lectura) de pin

P1.0 (por ejemplo)

WR (escritura) al latch

26

Ensamblador C51• LOS PUERTOS EN EL MICROCONTROLADOR

– Puerto 0. Puerto de datos => Z (tercer estado)

RD (lectura) de latch

RD (lectura) de pin

P0.0 (por ejemplo)

WR (escritura) al latch

Page 14: ensamblador c51

Tema 1 14

27

Ensamblador C51• LOS PUERTOS EN EL MICROCONTROLADOR

– Puertos: 1,3,4,5,6. Otras funciones de puertos.

RD (lectura) de latch

RD (lectura) de pin

P1.0 (por ejemplo)

WR (escritura) al latch

28

Ensamblador C51• LOS PUERTOS EN EL MICROCONTROLADOR

– Temporización.

Page 15: ensamblador c51

Tema 1 15

29

Ensamblador C51• LOS PUERTOS EN MODO BIT

– Instrucciones a nivel de bitanl c,<src_bit>orl c,<src_bit>mov <dest_bit>,<src_bit>

Otros:clrsetbjbjnb

Ejemplos:

mov c,a.7anl c,r1.0orl c,/r0.1mov c,p1.0

30

Ensamblador C51• Ejemplo: comprobando bits

– En C:if (dato & 0x08)

res = 0xff;else

res = 0x00;

– En ensamblador

dato: equ 70hres equ 71h

mov a,datoanl a,#08hjz ceromov res,#ffhjmp fin

cero: mov res,#00hfin: nop

end