Upload
jaime-velarde
View
305
Download
2
Embed Size (px)
DESCRIPTION
Importancia de los microprocesadores
Citation preview
1
INSTRUCCIONES DE INSTRUCCIONES DE INSTRUCCIONES DE INSTRUCCIONES DE INSTRUCCIONES DE INSTRUCCIONES DE INSTRUCCIONES DE INSTRUCCIONES DE TRANSFERENCIA DE LOS TRANSFERENCIA DE LOS TRANSFERENCIA DE LOS TRANSFERENCIA DE LOS TRANSFERENCIA DE LOS TRANSFERENCIA DE LOS TRANSFERENCIA DE LOS TRANSFERENCIA DE LOS MICROCONTOLADORESMICROCONTOLADORESMICROCONTOLADORESMICROCONTOLADORESMICROCONTOLADORESMICROCONTOLADORESMICROCONTOLADORESMICROCONTOLADORES
ATmegaATmegaATmegaATmegaATmegaATmegaATmegaATmega
Elaborado por: Ing. Jaime E. Velarde
RESUMEN DE LAS RESUMEN DE LAS INSTRUCCIONES DE INSTRUCCIONES DE TRANSFERENCIATRANSFERENCIA
2
INFORMACIÓN DE LAS INFORMACIÓN DE LAS INSTRUCCIONESINSTRUCCIONES
EL FABRICANTE PROPORCIONA LA SIGUIENTE INFORMACIÓN SOBRE LAS INSTRUCCIONES:
– EL MNEMÓNICO Y LOS OPERANDOS para la elaboración de los programas
– LA DESCRIPCIÓN en palabras– LA OPERACIÓN simbólica que explica la acción
o acciones que realiza– EL CÓDIGO DE MÁQUINA en formato binario– LAS BANDERAS que se afectan– EL NUMERO DE CICLOS de reloj que se demora
en la ejecución
INFORMACIÓN INFORMACIÓN RESUMIDARESUMIDA
3
INFORMACIÓN DETALLADAINFORMACIÓN DETALLADA
Mnemónico y Operandos
Descripción
Operación Simbólica
Código de Máquina
Banderas que se afectan
Ciclos del reloj que se demora
Ejemplos
COPIAR REGISTROSCOPIAR REGISTROS
• COPIA DE REGISTROS (R0 … R31)MNEMÓNICO: MOV Rd,Rr [1]OPERACIÓN: Rd ← RrCÓDIGO: 0010 11rd dddd rrrr
• COPIA DE PAREJAS DE REGISTROS (SE ESPECIFICAN SOLO REGISTROS PARES R0, R2 … R28, R30 )MNEMÓNICO: MOVW Rd,Rr [1]OPERACIÓN: Rd ← Rr Rd+1 ← Rr+1CÓDIGO: 0000 0001 dddd rrrr
4
EJEMPLOS PARA COPIAR EJEMPLOS PARA COPIAR REGISTROSREGISTROS
MOV R5,R20 ; R5 ← R200010 1110 0101 0100 = 0x2E54
MOV R31,R0 ; R31 ← R00010 1101 1111 0000 = 0x2DF0
MOV R8,R8 ; R8 ← R80010 1100 1000 1000 = 0x2C88
MOVW R30,R0 ; R30 ← R0 R31 ← R10000 0001 1111 0000 = 0x01F0
MOVW R8,R18 ; R8 ← R18 R9 ← R190000 0001 0100 1001 = 0x0149
MOVW R11,R22 ; R11 ← R22 R12 ← R230000 0001 dddd 1011 = 0x01?B Error..!! No es un
registro válido
CARGAR A UN REGISTRO CON CARGAR A UN REGISTRO CON UN VALORUN VALOR
• EN UN REGISTRO (R16 … R31) SE CARGA UN VALOR DE 8 BITS (0 … 255)MNEMÓNICO: LDI Rd,K [1]OPERACIÓN: Rd ← KCÓDIGO: 1110 KKKK dddd KKKK
5
EJEMPLOS PARA CARGAR UN EJEMPLOS PARA CARGAR UN REGISTROSREGISTROS
LDI R18,0x30 ; R18 ← 0x301110 0011 0010 0000 = 0xE320
LDI R19,30 ; R19 ← 301110 0001 0011 1110 = 0xE13E
LDI R10,0xA6 ; R10 ← 0xA61110 1010 dddd 0110 = 0xEA?6
LDI R20,300 ; R20 ← 3001110 KKKK 0100 KKKK = 0xE?4?
LDI R16,-100 ; R16 ← -1001110 1001 0000 1100 = 0xE90C
Error..!! No es un registro válido
Error..!! Operando fuera
de rango
CARGAR CARGAR DESDE DESDE LA LA SRAMSRAM CON CON DIRECCIONAMIENTO DIRECTODIRECCIONAMIENTO DIRECTO
• EN UN REGISTRO (R0 … R31) SE CARGA EL CONTENIDO DE UNA LOCALIDAD CON DIRECCIÓN k (0 … 65535), UTILIZANDO DIRECCIONAMIENTO DIRECTOMNEMÓNICO: LDS Rd,k [2]OPERACIÓN: Rd ← (k)CÓDIGO: 1001 000d dddd 0000
kkkk kkkk kkkk kkkk
6
EJEMPLOS PARA CARGAR DESDE LA EJEMPLOS PARA CARGAR DESDE LA SRAMSRAM CON DIRECCIONAMIENTO CON DIRECCIONAMIENTO
DIRECTODIRECTOLDS R18,0x13A ; R18 ← (0x13A)0x9120 0x013A
LDS R19,0x13B ; R19 ← (0x13B)0x9130 0x013B
LDS R6,0x2CF ; R6 ← (0x2CF)0x9060 0x02CF
LDS R3,0x300 ; R3 ← (0x300)0x9030 0x0300
LDS R25,0x800 ; R25 ← (0x800)0x9190 0x0800 Atención..!!
Dirección fuera de rango
CARGAR CARGAR DESDE LA DESDE LA SRAMSRAM CON CON DIRECCIONAMIENTO INDIRECTODIRECCIONAMIENTO INDIRECTO
• EN UN REGISTRO (R0 … R31) SE CARGA DESDE UNA LOCALIDAD (0 … 65535), UTILIZANDO DIRECCIONAMIENTO INDIRECTOMNEMÓNICO: LD Rd,X [2]OPERACIÓN: Rd ← (X)CÓDIGO: 1001 000d dddd 1100
MNEMÓNICO: LD Rd,Y [2]OPERACIÓN: Rd ← (Y)CÓDIGO: 1000 000d dddd 1000
MNEMÓNICO: LD Rd,Z [2]OPERACIÓN: Rd ← (Z)CÓDIGO: 1000 000d dddd 0000
7
EJEMPLOS PARA CARGAR DESDE LA EJEMPLOS PARA CARGAR DESDE LA SRAMSRAM CON DIRECCIONAMIENTO CON DIRECCIONAMIENTO
INDIRECTOINDIRECTOLDI R27,0x01 ; R27 ← 0x011110 0000 1011 0001 = 0xE0B1
LDI R26,0x3A ; R26 ← 0x3A1110 0011 1010 1010 = 0xE3AA
LD R18,X ; R18 ← (X) ���� R18 ← (0x013A)1001 0001 0010 1100 = 0x912C
LDI R29,0x01 ; R27 ← 0x011110 0000 1101 0001 = 0xE0D1
LDI R28,0x3B ; R26 ← 0x3A1110 0011 1100 1011 = 0xE3CB
LD R19,Y ; R19 ← (Y) ���� R19 ← (0x013B)1000 0001 0011 1000 = 0x8138
Inicialización del Puntero X
Inicialización del Puntero Y
CARGAR DESDE LA CARGAR DESDE LA SRAMSRAM CON CON DIRECCIONAMIENTO INDIRECTO Y DIRECCIONAMIENTO INDIRECTO Y
CON POST INCREMENTOCON POST INCREMENTO• EN UN REGISTRO (R0 … R31) SE CARGA DESDE UNA LOCALIDAD (0 … 65535), UTILIZANDO DIRECCIONAMIENTO INDIRECTO Y EL PUNTERO SE INCREMENTA POSTERIORMENTEMNEMÓNICO: LD Rd,X+ [2]OPERACIÓN: Rd ← (X) X ← X+1CÓDIGO: 1001 000d dddd 1101
MNEMÓNICO: LD Rd,Y+ [2]OPERACIÓN: Rd ← (Y) Y ← Y+1CÓDIGO: 1001 000d dddd 1001
MNEMÓNICO: LD Rd,Z+ [2]OPERACIÓN: Rd ← (Z) Z ← Z+1CÓDIGO: 1001 000d dddd 0001
8
EJEMPLOS PARA CARGAR DESDE EJEMPLOS PARA CARGAR DESDE LA LA SRAMSRAM CON POST INCREMENTOCON POST INCREMENTOLDI R27,0x01 ; R27 ← 0x011110 0000 1011 0001 = 0xE0B1
LDI R26,0x3A ; R26 ← 0x3A1110 0011 1010 1010 = 0xE3AA
LD R18,X+ ; R18 ← (X) ���� R18 ← (0x013A) X ← X+1
1001 0001 0010 1101 = 0x912D
LD R19,X+ ; R19 ← (X) ���� R19 ← (0x013B) X ← X+1
1001 0001 0011 1101 = 0x913D
Inicializa-ción del Puntero X
CARGAR DESDE LA CARGAR DESDE LA SRAMSRAM CON CON DIRECCIONAMIENTO INDIRECTO Y DIRECCIONAMIENTO INDIRECTO Y
CON PRE DISMINUCIÓNCON PRE DISMINUCIÓN• EN UN REGISTRO (R0 … R31) SE CARGA DESDE UNA LOCALIDAD (0 … 65535), UTILIZANDO DIRECCIONAMIENTO INDIRECTO EN EL QUE EL PUNTERO PREVIAMENTE SE HA DISMINUIDOMNEMÓNICO: LD Rd,-X [2]OPERACIÓN: X ← X-1 Rd ← (X)CÓDIGO: 1001 000d dddd 1110
MNEMÓNICO: LD Rd,-Y [2]OPERACIÓN: Y ← Y-1 Rd ← (Y)CÓDIGO: 1001 000d dddd 1010
MNEMÓNICO: LD Rd,-Z [2]OPERACIÓN: Z ← Z-1 Rd ← (Z)CÓDIGO: 1001 000d dddd 0010
9
EJEMPLOS PARA CARGAR DESDE EJEMPLOS PARA CARGAR DESDE LA LA SRAMSRAM CON PRE DISMINUCIÓNCON PRE DISMINUCIÓNLDI R29,0x01 ; R27 ← 0x011110 0000 1101 0001 = 0xE0D1
LDI R28,0x3C ; R26 ← 0x3C1110 0011 1100 1100 = 0xE3CC
LD R19,-Y ; Y ← Y-1 R19 ← (Y) ���� R19 ← (0x013B)
1001 0001 0011 1010 = 0x913A
LD R18,-Y ; Y ← Y-1 R18 ← (Y) ���� R18 ← (0x013A)
1001 0001 0010 1010 = 0x912A
Inicializa-ción del Puntero Y
CARGAR DESDE LA CARGAR DESDE LA SRAMSRAM CON CON DIRECCIONAMIENTO INDIRECTO Y DIRECCIONAMIENTO INDIRECTO Y
CON DESPLAZAMIENTOCON DESPLAZAMIENTO• EN UN REGISTRO (R0 … R31) SE CARGA DESDE UNA LOCALIDAD (0 … 65535), UTILIZANDO DIRECCIONAMIENTO INDIRECTO AL QUE SE SUMA EL DESPLAZAMIENTO (0 … 63)MNEMÓNICO: LDD Rd,Y+q [2]OPERACIÓN: Rd ← (Y+q)CÓDIGO: 10q0 qq0d dddd 1qqq
MNEMÓNICO: LDD Rd,Z+q [2]OPERACIÓN: Rd ← (Z+q)CÓDIGO: 10q0 qq0d dddd 0qqq
10
EJEMPLOS PARA CARGAR DESDE EJEMPLOS PARA CARGAR DESDE LA LA SRAMSRAM CON DESPLAZAMIENTOCON DESPLAZAMIENTOLDI R31,0x01 ; R31 ← 0x011110 0000 1111 0001 = 0xE0F1
LDI R30,0x3A ; R30 ← 0x3A1110 0011 1110 1010 = 0xE3EA
LDD R19,Z+10 ; R19 ← (Z+10) ���� R19 ← (0x0144)
1000 0101 0011 0010 = 0x8532
LDD R18,Z+20 ; R18 ← (Z+20) ���� R18 ← (0x014E)
1000 1001 0010 0100 = 0x8924
LDD R1,Z+64 ; R1 ← (Z+64) ���� R1 ← (0x017A)
10q0 qq00 0001 0qqq Error..!! Desplazamiento fuera de rango
Inicializa-ción del Puntero Z
ALMACENAR EN LA ALMACENAR EN LA SRAMSRAM CON CON DIRECCIONAMIENTO DIRECTODIRECCIONAMIENTO DIRECTO
• EN UNA LOCALIDAD CON DIRECCIÓN k (0 … 65535) UTILIZANDO DIRECCIONAMIENTO DIRECTO, SE ALMACENA EL CONTENIDO DE UN REGISTRO (R0 … R31)MNEMÓNICO: STS k,Rr [2]OPERACIÓN: (k) ← RrCÓDIGO: 1001 001r rrrr 0000
kkkk kkkk kkkk kkkk
11
EJEMPLOS PARA ALMACENAR EN LA EJEMPLOS PARA ALMACENAR EN LA SRAMSRAM CON DIRECCIONAMIENTO CON DIRECCIONAMIENTO
DIRECTODIRECTOSTS 0x13A, R18 ; (0x13A) ← R18 0x9320 0x013A
STS 0x13B,R19 ; (0x13B) ← R19 0x9330 0x013B
STS 0x2CF,R6 ; (0x2CF) ← R6 0x9260 0x02CF
STS 0x300,R3 ; (0x300) ← R3 0x9230 0x0300
STS 0x800,R25 ; (0x800) ← R25 0x9390 0x0800 Atención..!!
Dirección fuera de rango
ALMACENAR EN LA ALMACENAR EN LA SRAMSRAM CON CON DIRECCIONAMIENTO INDIRECTODIRECCIONAMIENTO INDIRECTO
• EN UNA LOCALIDAD (0 … 65535) UTILIZANDO DIRECCIONAMIENTO INDIRECTO, SE ALMACENA UN REGISTRO (R0 … R31)MNEMÓNICO: ST X,Rr [2]OPERACIÓN: (X) ← RrCÓDIGO: 1001 001r rrrr 1100
MNEMÓNICO: ST Y,Rr [2]OPERACIÓN: (Y) ← RrCÓDIGO: 1000 001r rrrr 1000
MNEMÓNICO: ST Z,Rr [2]OPERACIÓN: (Z) ← RrCÓDIGO: 1000 001r rrrr 0000
12
EJEMPLOS PARA ALMACENAR EN LA EJEMPLOS PARA ALMACENAR EN LA SRAMSRAM CON DIRECCIONAMIENTO CON DIRECCIONAMIENTO
INDIRECTOINDIRECTOLDI R27,0x01 ; R27 ← 0x011110 0000 1011 0001 = 0xE0B1
LDI R26,0x3A ; R26 ← 0x3A1110 0011 1010 1010 = 0xE3AA
ST X,R18 ; (X) ← R18 ���� (0x013A) ← R181001 0011 0010 1100 = 0x932C
LDI R29,0x01 ; R27 ← 0x011110 0000 1101 0001 = 0xE0D1
LDI R28,0x3B ; R26 ← 0x3A1110 0011 1100 1011 = 0xE3CB
ST Y,R19 ; (Y) ← R19 ���� (0x013B) ← R191000 0011 0011 1000 = 0x8338
Inicialización del Puntero X
Inicialización del Puntero Y
ALMACENAR EN LA ALMACENAR EN LA SRAMSRAM CON CON DIRECCIONAMIENTO INDIRECTO Y DIRECCIONAMIENTO INDIRECTO Y
CON POST INCREMENTOCON POST INCREMENTO• EN UNA LOCALIDAD (0 … 65535) UTILIZANDO DIRECCIONAMIENTO INDIRECTO, SE ALMACENA UN REGISTRO (R0 … R31) Y EL PUNTERO SE INCREMENTA POSTERIORMENTEMNEMÓNICO: ST X+,Rr [2]OPERACIÓN: (X) ← Rr X ← X+1CÓDIGO: 1001 001r rrrr 1101
MNEMÓNICO: ST Y+,Rr [2]OPERACIÓN: (Y) ← Rr Y ← Y+1CÓDIGO: 1001 001r rrrr 1001
MNEMÓNICO: ST Z+,Rr [2]OPERACIÓN: (Z) ← Rr Z ← Z+1CÓDIGO: 1001 001r rrrr 0001
13
EJEMPLOS PARA ALMACENAR EN EJEMPLOS PARA ALMACENAR EN LA LA SRAMSRAM CON POST INCREMENTOCON POST INCREMENTOLDI R27,0x01 ; R27 ← 0x011110 0000 1011 0001 = 0xE0B1
LDI R26,0x3A ; R26 ← 0x3A1110 0011 1010 1010 = 0xE3AA
ST X+,R18 ; (X) ← R18 ���� (0x013A) ← R18 X ← X+1
1001 0011 0010 1101 = 0x932D
ST X+,R19 ; (X) ← R19 ���� (0x013B) ← R19 X ← X+1
1001 0011 0011 1101 = 0x933D
Inicializa-ción del Puntero X
ALMACENAR EN LA ALMACENAR EN LA SRAMSRAM CON CON DIRECCIONAMIENTO INDIRECTO Y DIRECCIONAMIENTO INDIRECTO Y
CON PRE DISMINUCIÓNCON PRE DISMINUCIÓN• EN UNA LOCALIDAD (0 … 65535) UTILIZANDO DIRECCIONAMIENTO INDIRECTO EN EL QUE PREVIAMENTE SE HA DISMINUIDO EL PUNTERO, SE ALMACENA UN REGISTRO (R0 … R31)MNEMÓNICO: ST -X,Rr [2]OPERACIÓN: X ← X-1 (X) ← RrCÓDIGO: 1001 001r rrrr 1110
MNEMÓNICO: ST -Y,Rr [2]OPERACIÓN: Y ← Y-1 (Y) ← RrCÓDIGO: 1001 001r rrrr 1010
MNEMÓNICO: ST -Z,Rr [2]OPERACIÓN: Z ← Z-1 (Z) ← RrCÓDIGO: 1001 001r rrrr 0010
14
EJEMPLOS PARA ALMACENAR EN EJEMPLOS PARA ALMACENAR EN LA LA SRAMSRAM CON PRE DISMINUCIÓNCON PRE DISMINUCIÓNLDI R29,0x01 ; R27 ← 0x011110 0000 1101 0001 = 0xE0D1
LDI R28,0x3C ; R26 ← 0x3C1110 0011 1100 1100 = 0xE3CC
ST -Y,R19 ; Y ← Y-1 (Y) ← R19 ���� (0x013B) ← R19
1001 0011 0011 1010 = 0x933A
ST -Y,R18 ; Y ← Y-1 (Y) ← R18 ���� (0x013A) ← R18
1001 0011 0010 1010 = 0x932A
Inicializa-ción del Puntero Y
ALMACENAR EN LA ALMACENAR EN LA SRAMSRAM CON CON DIRECCIONAMIENTO INDIRECTO Y DIRECCIONAMIENTO INDIRECTO Y
CON CON DESPLAZMIENTODESPLAZMIENTO• EN UNA LOCALIDAD (0 … 65535) UTILIZANDO DIRECCIONAMIENTO INDIRECTO AL QUE SE SUMA EL DESPLAZAMIENTO (0 … 63), SE ALMACENA UN REGISTRO (R0 … R31)MNEMÓNICO: STD Y+q,Rr [2]OPERACIÓN: (Y+q) ← RrCÓDIGO: 10q0 qq1r rrrr 1qqq
MNEMÓNICO: STD Z+q,Rr [2]OPERACIÓN: (Z+q) ← RrCÓDIGO: 10q0 qq1r rrrr 0qqq
15
EJEMPLOS PARA ALMACENAR EN EJEMPLOS PARA ALMACENAR EN LA LA SRAMSRAM CON DESPLAZAMIENTOCON DESPLAZAMIENTOLDI R31,0x01 ; R31 ← 0x011110 0000 1111 0001 = 0xE0F1
LDI R30,0x3A ; R30 ← 0x3A1110 0011 1110 1010 = 0xE3EA
STD Z+10,R19 ; (Z+10) ← R19 ���� (0x0144) ← R19
1000 0111 0011 0010 = 0x8732
STD Z+20,R18 ; (Z+20) ← R18 ���� (0x014E) ← R18
1000 1011 0010 0100 = 0x8B24
STD Z+64,R1 ; (Z+64) ← R1 ���� (0x017A) ← R1
10q0 qq10 0001 0qqq Error..!! Desplazamiento fuera de rango
Inicializa-ción del Puntero Z
CARGAR UN REGISTRO DESDE CARGAR UN REGISTRO DESDE LA FLASHLA FLASH
• EN UN REGISTRO SE CARGA DESDE UNA LOCALIDAD DE LA MEMORIA DEL PROGRAMA, UTILIZANDO DIRECCIONAMIENTO INDIRECTOMNEMÓNICO: LPM [3]OPERACIÓN: R0 ← (Z)CÓDIGO: 1001 0101 1100 1000
MNEMÓNICO: LPM Rd,Z [3]OPERACIÓN: Rd ← (Z)CÓDIGO: 1001 000d dddd 0100
MNEMÓNICO: LPM Rd,Z+ [3]OPERACIÓN: Rd ← (Z) Z ← Z+1CÓDIGO: 1001 000d dddd 0101
16
EJEMPLOS PARA CARGAR EJEMPLOS PARA CARGAR DESDE LA FLASHDESDE LA FLASH
LDI R31,0x03 ; R31 ← 0x031110 0000 1111 0011 = 0xE0F3
LDI R30,0x3A ; R30 ← 0x3A1110 0001 1110 0000 = 0xE1E0
LPM ; R0 ← (Z)FLASH ���� R0 ← (0x0310)FLASH
1001 0101 1100 1000 = 0x95C8
LPM R7,Z ; R7 ← (Z)FLASH ���� R7 ← (0x0310)FLASH
1001 0000 0111 0100 = 0x9074
LPM R17,Z+ ; R17 ← (Z)FLASH ���� R17 ← (0x0310)FLASH
; Z ← Z+1
1001 0001 0001 0101 = 0x9115
Inicializa-ción del Puntero Z
TRANSFERIR ENTRE REGISTRO TRANSFERIR ENTRE REGISTRO Y PÓRTICOY PÓRTICO
• ENTRADA A UN REGISTRO (R0 … R31) DESDE UN PÓRTICO DE DIRECCIÓN A (0 … 63)MNEMÓNICO: IN Rd,A [1]OPERACIÓN: Rd ← I/O ACÓDIGO: 1011 0AAd dddd AAAA
• SALIDA HACIA UN PÓRTICO (0 … 63) DESDE UN REGISTROS (R0 … R31)MNEMÓNICO: OUT A,Rr [1]OPERACIÓN: I/O A ← RrCÓDIGO: 1011 1AAr rrrr AAAA
17
EJEMPLOS DE TRANSFERENCIAS EJEMPLOS DE TRANSFERENCIAS CON PÓRTICOSCON PÓRTICOS
IN R16,0x00 ; R16 ← PÓRTICO 0x001011 0001 0000 0000 = 0xB100
IN R12,0x20 ; R12 ← PÓRTICO 0x201011 0010 1100 0100 = 0xB2C4
OUT 0x02,R18 ; PÓRTICO 0x02 ← R181011 1001 0010 0010 = 0xB922
OUT 0x1F,R9 ; PÓRTICO 0x1F ← R91011 1010 1001 1111 = 0xBA9F
OUT 0x50,R10 ; PÓRTICO 0x50 ← R10 1011 1AA0 1010 AAAA = 0xB?A? Error..!!
Pórtico fuera de rango
EJERCICIO QUE UTILIZA EJERCICIO QUE UTILIZA INSTRUCCIONES DE INSTRUCCIONES DE TRANSFERENCIA TRANSFERENCIA
Desarrollar un programa para el microcontrolador ATmega164P, que permita llenar las dieciséis primeras localidades de la memoria de datos, con los códigos ASCII de: $1F4 por cuatro ocasiones, tal como se muestra en la siguiente lámina.
18
GRÁFICO DEL EJERCICIO GRÁFICO DEL EJERCICIO
Donde:0x24 es el ASCII del signo $, 0x31 es el ASCII del dígito 1, 0x46 es el ASCII de la letra F y 0x34 es el ASCII del dígito 4
16 p
rim
eras
loca
lidad
es d
e d
ato
s