View
52
Download
2
Category
Preview:
Citation preview
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.
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)
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....
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
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
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.
Tema 1 7
13
Ensamblador C51
14
Ensamblador C51
Tema 1 8
15
16
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
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
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
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
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
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.
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
Recommended