jaime.velarde@epn.edu.ec<br />1<br />SISTEMAS<br />MICROPROCESADOS<br />INSTRUCCIONES DE TRANSFERENCIA DE LOS MICROCONTOLA...
jaime.velarde@epn.edu.ec<br />2<br />RESUMEN DE LAS INSTRUCCIONES DE TRANSFERENCIA<br />
jaime.velarde@epn.edu.ec<br />3<br />INFORMACIÓN DE LAS INSTRUCCIONES<br />EL FABRICANTE PROPORCIONA LA SIGUIENTE INFORMAC...
jaime.velarde@epn.edu.ec<br />4<br />COPIAR REGISTROS<br /> COPIA DE REGISTROS (R0 … R31)<br />MNEMÓNICO:	MOVRd,Rr[1]<br /...
jaime.velarde@epn.edu.ec<br />5<br />EJEMPLOS PARA COPIAR REGISTROS<br />MOVR5,R20; R5 ←R20<br />0010 1110 01010100 = 0x2E...
jaime.velarde@epn.edu.ec<br />6<br />CARGAR A UN REGISTRO CON UN VALOR<br /> EN UN REGISTRO (R16 … R31) SE CARGA UN VALOR ...
jaime.velarde@epn.edu.ec<br />7<br />EJEMPLOS PARA CARGAR UN REGISTROS<br />LDIR18,0x30; R18 ←0x30<br />1110 0011 00100000...
jaime.velarde@epn.edu.ec<br />8<br />CARGAR DESDE LA SRAMCON DIRECCIONAMIENTO DIRECTO<br /> EN UN REGISTRO (R0 … R31) SE C...
jaime.velarde@epn.edu.ec<br />9<br />EJEMPLOS PARA CARGAR DESDE LA SRAM CON DIRECCIONAMIENTO DIRECTO<br />LDSR18,0x13A	; R...
jaime.velarde@epn.edu.ec<br />10<br />CARGAR DESDE LA SRAM CON DIRECCIONAMIENTO INDIRECTO<br /> EN UN REGISTRO (R0 … R31) ...
jaime.velarde@epn.edu.ec<br />11<br />EJEMPLOS PARA CARGAR DESDE LA SRAM CON DIRECCIONAMIENTO INDIRECTO<br />LDI	R27,0x01	...
jaime.velarde@epn.edu.ec<br />12<br />CARGAR DESDE LA SRAM CON DIRECCIONAMIENTO INDIRECTO Y CON POST INCREMENTO<br /> EN U...
jaime.velarde@epn.edu.ec<br />13<br />EJEMPLOS PARA CARGAR DESDE LA SRAM CON POST INCREMENTO<br />LDI	R27,0x01	; R27 ← 0x0...
jaime.velarde@epn.edu.ec<br />14<br />CARGAR DESDE LA SRAM CON DIRECCIONAMIENTO INDIRECTO Y CON PRE DISMINUCIÓN<br /> EN U...
jaime.velarde@epn.edu.ec<br />15<br />EJEMPLOS PARA CARGAR DESDE LA SRAM CON PRE DISMINUCIÓN<br />LDI	R29,0x01	; R27 ← 0x0...
jaime.velarde@epn.edu.ec<br />16<br />CARGAR DESDE LA SRAM CON DIRECCIONAMIENTO INDIRECTO Y CON DESPLAZAMIENTO<br /> EN UN...
jaime.velarde@epn.edu.ec<br />17<br />EJEMPLOS PARA CARGAR DESDE LA SRAM CON DESPLAZAMIENTO<br />LDI	R31,0x01	; R31 ← 0x01...
jaime.velarde@epn.edu.ec<br />18<br />ALMACENAR EN LA SRAMCON DIRECCIONAMIENTO DIRECTO<br /> EN UNA LOCALIDAD CON DIRECCIÓ...
jaime.velarde@epn.edu.ec<br />19<br />EJEMPLOS PARA ALMACENAR EN LA SRAMCON DIRECCIONAMIENTO DIRECTO<br />STS0x13A, R18	; ...
jaime.velarde@epn.edu.ec<br />20<br />ALMACENAR EN LA SRAMCON DIRECCIONAMIENTO INDIRECTO<br /> EN UNA LOCALIDAD (0 … 65535...
jaime.velarde@epn.edu.ec<br />21<br />EJEMPLOS PARA ALMACENAR EN LA SRAMCON DIRECCIONAMIENTO INDIRECTO<br />LDI	R27,0x01	;...
jaime.velarde@epn.edu.ec<br />22<br />ALMACENAR EN LA SRAMCON DIRECCIONAMIENTO INDIRECTO Y CON POST INCREMENTO<br /> EN UN...
jaime.velarde@epn.edu.ec<br />23<br />EJEMPLOS PARA ALMACENAR EN LA SRAMCON POST INCREMENTO<br />LDI	R27,0x01	; R27 ← 0x01...
jaime.velarde@epn.edu.ec<br />24<br />ALMACENAR EN LA SRAMCON DIRECCIONAMIENTO INDIRECTO Y CON PRE DISMINUCIÓN<br /> EN UN...
jaime.velarde@epn.edu.ec<br />25<br />EJEMPLOS PARA ALMACENAR EN LA SRAMCON PRE DISMINUCIÓN<br />LDI	R29,0x01	; R27 ← 0x01...
jaime.velarde@epn.edu.ec<br />26<br />ALMACENAR EN LA SRAMCON DIRECCIONAMIENTO INDIRECTO Y CON DESPLAZMIENTO<br /> EN UNA ...
jaime.velarde@epn.edu.ec<br />27<br />EJEMPLOS PARA ALMACENAR EN LA SRAMCON DESPLAZAMIENTO<br />LDI	R31,0x01	; R31 ← 0x01<...
jaime.velarde@epn.edu.ec<br />28<br />CARGAR UN REGISTRO DESDE LA FLASH<br /> EN UN REGISTRO SE CARGA DESDE UNA LOCALIDAD ...
jaime.velarde@epn.edu.ec<br />29<br />EJEMPLOS PARA CARGAR DESDE LA FLASH<br />LDI	R31,0x03	; R31 ← 0x01<br />1110 0000 11...
jaime.velarde@epn.edu.ec<br />30<br />TRANSFERIR ENTRE REGISTRO Y PÓRTICO<br /> ENTRADA A UN REGISTRO (R0 … R31) DESDE UN ...
jaime.velarde@epn.edu.ec<br />31<br />EJEMPLOS DE TRANSFERENCIAS CON PÓRTICOS<br />IN	R16,0x00	; R16 ← PÓRTICO 0x00<br />1...
jaime.velarde@epn.edu.ec<br />32<br />EJERCICIO QUE UTILIZA INSTRUCCIONES DE TRANSFERENCIA <br />Desarrollar un programa p...
GRÁFICO DEL EJERCICIO <br />jaime.velarde@epn.edu.ec<br />33<br />0x24 es el ASCII del signo $, 0x31 es el ASCII del 1, 0x...
Upcoming SlideShare
Loading in...5
×

10 Instrucciones de Transferencia

3,553

Published on

Instrucciones que permiten transferir datos de 8 bits entre las direrentes partes de la memoria de los ATmega

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,553
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
456
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

10 Instrucciones de Transferencia

  1. 1. jaime.velarde@epn.edu.ec<br />1<br />SISTEMAS<br />MICROPROCESADOS<br />INSTRUCCIONES DE TRANSFERENCIA DE LOS MICROCONTOLADORESATmega<br />Elaborado por: Ing. Jaime E. Velarde<br />
  2. 2. jaime.velarde@epn.edu.ec<br />2<br />RESUMEN DE LAS INSTRUCCIONES DE TRANSFERENCIA<br />
  3. 3. jaime.velarde@epn.edu.ec<br />3<br />INFORMACIÓN DE LAS INSTRUCCIONES<br />EL FABRICANTE PROPORCIONA LA SIGUIENTE INFORMACIÓN SOBRE LAS INSTRUCCIONES:<br />EL MNEMÓNICO Y LOS OPERANDOS para la elaboración de los programas<br />LA DESCRIPCIÓN en palabras<br />LA OPERACIÓN simbólica que explica la acción o acciones que realiza<br />EL CÓDIGO DE MÁQUINA en formato binario<br />LAS BANDERAS que se afectan<br />EL NUMERO DE CICLOS de reloj que se demora en la ejecución<br />
  4. 4. jaime.velarde@epn.edu.ec<br />4<br />COPIAR REGISTROS<br /> COPIA DE REGISTROS (R0 … R31)<br />MNEMÓNICO: MOVRd,Rr[1]<br />OPERACIÓN: Rd←Rr<br />CÓDIGO: 0010 11rd ddddrrrr<br /> COPIA DE PAREJAS DE REGISTROS (SE ESPECIFICAN SOLO REGISTROS PARES R0, R2 … R28, R30 )<br />MNEMÓNICO: MOVWRd,Rr[1]<br />OPERACIÓN: Rd←Rr Rd+1 ← Rr+1<br />CÓDIGO: 0000 0001 ddddrrrr<br />
  5. 5. jaime.velarde@epn.edu.ec<br />5<br />EJEMPLOS PARA COPIAR REGISTROS<br />MOVR5,R20; R5 ←R20<br />0010 1110 01010100 = 0x2E54<br />MOV R31,R0 ; R31 ← R0<br />0010 1101 11110000 = 0x2DF0<br />MOV R8,R8 ; R8 ← R8<br />0010 1100 10001000 = 0x2C88<br />MOVW R30,R0; R30 ←R0 R31 ←R1<br />0000 0001 11110000 = 0x01F0<br />MOVW R8,R18; R8 ← R18 R9 ← R19<br />0000 0001 01001001 = 0x0149<br />MOVW R11,R22; R11 ← R22 R12 ← R23<br />0000 0001 dddd1011 = 0x01?B<br />Error..!! No es un registro válido<br />
  6. 6. jaime.velarde@epn.edu.ec<br />6<br />CARGAR A UN REGISTRO CON UN VALOR<br /> EN UN REGISTRO (R16 … R31) SE CARGA UN VALOR DE 8 BITS (0 … 255)<br />MNEMÓNICO: LDIRd,K[1]<br />OPERACIÓN: Rd← K<br />CÓDIGO: 1110 KKKKddddKKKK<br />
  7. 7. jaime.velarde@epn.edu.ec<br />7<br />EJEMPLOS PARA CARGAR UN REGISTROS<br />LDIR18,0x30; R18 ←0x30<br />1110 0011 00100000 = 0xE320<br />LDI R19,30 ; R19 ← 30<br />1110 0001 00111110 = 0xE13E<br />LDI R10,0xA6 ; R10 ← 0xA6<br />1110 1010dddd0110 = 0xEA?6<br />LDI R20,300 ; R20 ← 300<br />1110 KKKK 0100KKKK = 0xE?4?<br />LDI R16,-100 ; R18 ← -100<br />1110 1001 00001100 = 0xE90C<br />Error..!! No es un registro válido<br />Error..!! Operando fuera de rango<br />
  8. 8. jaime.velarde@epn.edu.ec<br />8<br />CARGAR DESDE LA SRAMCON DIRECCIONAMIENTO DIRECTO<br /> EN UN REGISTRO (R0 … R31) SE CARGA EL CONTENIDO DE UNA LOCALIDAD CON DIRECCIÓN k (0 … 65535), UTILIZANDO DIRECCIONAMIENTO DIRECTO<br />MNEMÓNICO: LDSRd,k[2]<br />OPERACIÓN: Rd← (k)<br />CÓDIGO: 1001 000d dddd 0000<br />kkkkkkkkkkkkkkkk<br />
  9. 9. jaime.velarde@epn.edu.ec<br />9<br />EJEMPLOS PARA CARGAR DESDE LA SRAM CON DIRECCIONAMIENTO DIRECTO<br />LDSR18,0x13A ; R18 ←(0x13A)<br />0x9120 0x013A<br />LDS R19,0x13B ; R19 ← (0x13B)<br />0x9130 0x013B<br />LDS R6,0x2CF ; R6 ← (0x2CF)<br />0x9060 0x02CF<br />LDS R3,0x300 ; R3 ← (0x300)<br />0x9030 0x0300<br />LDS R25,0x800 ; R25 ← (0x800)<br />0x9190 0x0800<br />Atención..!! Dirección fuera de rango<br />
  10. 10. jaime.velarde@epn.edu.ec<br />10<br />CARGAR DESDE LA SRAM CON DIRECCIONAMIENTO INDIRECTO<br /> EN UN REGISTRO (R0 … R31) SE CARGA DESDE UNA LOCALIDAD (0 … 65535), UTILIZANDO DIRECCIONAMIENTO INDIRECTO<br />MNEMÓNICO: LDRd,X[2]<br />OPERACIÓN: Rd← (X)<br />CÓDIGO: 1001 000d dddd1100<br />MNEMÓNICO: LDRd,Y[2]<br />OPERACIÓN: Rd← (Y)<br />CÓDIGO: 1000 000d dddd 1000<br />MNEMÓNICO: LDRd,Z[2]<br />OPERACIÓN: Rd← (Z)<br />CÓDIGO: 1000 000d dddd 0000<br />
  11. 11. jaime.velarde@epn.edu.ec<br />11<br />EJEMPLOS PARA CARGAR DESDE LA SRAM CON DIRECCIONAMIENTO INDIRECTO<br />LDI R27,0x01 ; R27 ← 0x01<br />1110 0000 10110001 = 0xE0B1<br />LDI R26,0x3A ; R26 ← 0x3A<br />1110 0011 10101010 = 0xE3AA<br />LD R18,X ; R18 ← (X)  R18 ← (0x013A)<br />1001 0001 0010 1100 = 0x912C<br />Inicialización del Puntero X<br />LDI R29,0x01 ; R27 ← 0x01<br />1110 0000 11010001 = 0xE0D1<br />LDI R28,0x3B ; R26 ← 0x3A<br />1110 0011 11001011 = 0xE3CB<br />LD R19,Y ; R19 ← (Y)  R19 ← (0x013B)<br />1000 0001 0011 1000 = 0x8138<br />Inicialización del Puntero Y<br />
  12. 12. jaime.velarde@epn.edu.ec<br />12<br />CARGAR DESDE LA SRAM CON DIRECCIONAMIENTO INDIRECTO Y CON POST INCREMENTO<br /> EN UN REGISTRO (R0 … R31) SE CARGA DESDE UNA LOCALIDAD (0 … 65535), UTILIZANDO DIRECCIONAMIENTO INDIRECTO Y EL PUNTERO SE INCREMENTA POSTERIORMENTE<br />MNEMÓNICO: LDRd,X+[2]<br />OPERACIÓN: Rd← (X) X ← X+1<br />CÓDIGO: 1001 000d dddd 1101<br />MNEMÓNICO: LDRd,Y+[2]<br />OPERACIÓN: Rd← (Y) Y ← Y+1<br />CÓDIGO: 1001 000d dddd 1001<br />MNEMÓNICO: LDRd,Z+[2]<br />OPERACIÓN: Rd← (Z) Z ← Z+1<br />CÓDIGO: 1001 000d dddd 0001<br />
  13. 13. jaime.velarde@epn.edu.ec<br />13<br />EJEMPLOS PARA CARGAR DESDE LA SRAM CON POST INCREMENTO<br />LDI R27,0x01 ; R27 ← 0x01<br />1110 0000 10110001 = 0xE0B1<br />LDI R26,0x3A ; R26 ← 0x3A<br />1110 0011 10101010 = 0xE3AA<br />LD R18,X+ ; R18 ← (X)  R18 ← (0x013A) X ← X+1<br />1001 0001 0010 1101 = 0x912D<br />LD R19,X+ ; R19 ← (X)  R19 ← (0x013B) X ← X+1<br />1001 0001 0011 1101 = 0x913D<br />Inicializa-ción del Puntero X<br />
  14. 14. jaime.velarde@epn.edu.ec<br />14<br />CARGAR DESDE LA SRAM CON DIRECCIONAMIENTO INDIRECTO Y CON PRE DISMINUCIÓN<br /> EN UN REGISTRO (R0 … R31) SE CARGA DESDE UNA LOCALIDAD (0 … 65535), UTILIZANDO DIRECCIONAMIENTO INDIRECTO EN EL QUE EL PUNTERO PREVIAMENTE SE HA DISMINUIDO<br />MNEMÓNICO: LDRd,-X[2]<br />OPERACIÓN: X ← X-1Rd← (X)<br />CÓDIGO: 1001 000d dddd 1110<br />MNEMÓNICO: LDRd,-Y[2]<br />OPERACIÓN: Y ← Y-1Rd← (Y)<br />CÓDIGO: 1001 000d dddd 1010<br />MNEMÓNICO: LDRd,-Z[2]<br />OPERACIÓN: Z ← Z-1 Rd← (Z)<br />CÓDIGO: 1001 000d dddd 0010<br />
  15. 15. jaime.velarde@epn.edu.ec<br />15<br />EJEMPLOS PARA CARGAR DESDE LA SRAM CON PRE DISMINUCIÓN<br />LDI R29,0x01 ; R27 ← 0x01<br />1110 0000 11010001 = 0xE0D1<br />LDI R28,0x3C ; R26 ← 0x3C<br />1110 0011 11001100 = 0xE3CC<br />LD R19,-Y ; Y ← Y-1 R19 ← (Y)  R19 ← (0x013B)<br />1001 0001 0011 1010 = 0x913A<br />LD R18,-Y ; Y ← Y-1 R18 ← (Y)  R18 ← (0x013A)<br />1001 0001 0010 1010 = 0x912A<br />Inicializa-ción del Puntero Y<br />
  16. 16. jaime.velarde@epn.edu.ec<br />16<br />CARGAR DESDE LA SRAM CON DIRECCIONAMIENTO INDIRECTO Y CON DESPLAZAMIENTO<br /> EN UN REGISTRO (R0 … R31) SE CARGA DESDE UNA LOCALIDAD (0 … 65535), UTILIZANDO DIRECCIONAMIENTO INDIRECTO AL QUE SE SUMA EL DESPLAZAMIENTO (0 … 63)<br />MNEMÓNICO: LDDRd,Y+q[2]<br />OPERACIÓN: Rd← (Y+q)<br />CÓDIGO: 10q0 qq0d dddd 1qqq<br />MNEMÓNICO: LDDRd,Z+q[2]<br />OPERACIÓN: Rd← (Z+q)<br />CÓDIGO: 10q0 qq0d dddd 0qqq<br />
  17. 17. jaime.velarde@epn.edu.ec<br />17<br />EJEMPLOS PARA CARGAR DESDE LA SRAM CON DESPLAZAMIENTO<br />LDI R31,0x01 ; R31 ← 0x01<br />1110 0000 11110001 = 0xE0F1<br />LDI R30,0x3A ; R30 ← 0x3A<br />1110 0011 11101010 = 0xE3EA<br />LDD R19,Z+10 ; R19 ← (Z+10)  R19 ← (0x0144)<br />1000 0101 0011 0010 = 0x8532<br />LDD R18,Z+20 ; R18 ← (Z+20)  R18 ← (0x014E)<br />1000 1001 0010 0100 = 0x8924<br />LDD R1,Z+64 ; R1 ← (Z+64)  R1 ← (0x017A)<br />10q0 qq00 0001 0qqq<br />Inicializa-ción del Puntero Z<br />Error..!! Desplazamiento fuera de rango<br />
  18. 18. jaime.velarde@epn.edu.ec<br />18<br />ALMACENAR EN LA SRAMCON DIRECCIONAMIENTO DIRECTO<br /> EN UNA LOCALIDAD CON DIRECCIÓN k (0 … 65535) UTILIZANDO DIRECCIONAMIENTO DIRECTO, SE ALMACENA EL CONTENIDO DE UN REGISTRO (R0 … R31)<br />MNEMÓNICO: STSk,Rr[2]<br />OPERACIÓN: (k) ←Rr<br />CÓDIGO: 1001 001r rrrr 0000<br />kkkkkkkkkkkkkkkk<br />
  19. 19. jaime.velarde@epn.edu.ec<br />19<br />EJEMPLOS PARA ALMACENAR EN LA SRAMCON DIRECCIONAMIENTO DIRECTO<br />STS0x13A, R18 ; (0x13A) ← R18 <br />0x9320 0x013A<br />STS 0x13B,R19 ; (0x13B) ← R19 <br />0x9330 0x013B<br />STS 0x2CF,R6 ; (0x2CF) ← R6 <br />0x9260 0x02CF<br />STS 0x300,R3 ; (0x300) ← R3 <br />0x9230 0x0300<br />STS 0x800,R25 ; (0x800) ← R25 <br />0x9390 0x0800<br />Atención..!! Dirección fuera de rango<br />
  20. 20. jaime.velarde@epn.edu.ec<br />20<br />ALMACENAR EN LA SRAMCON DIRECCIONAMIENTO INDIRECTO<br /> EN UNA LOCALIDAD (0 … 65535) UTILIZANDO DIRECCIONAMIENTO INDIRECTO, SE ALMACENA UN REGISTRO (R0 … R31)<br />MNEMÓNICO: STX,Rr[2]<br />OPERACIÓN: (X) ←Rr<br />CÓDIGO: 1001 001r rrrr 1100<br />MNEMÓNICO: STY,Rr[2]<br />OPERACIÓN: (Y) ←Rr<br />CÓDIGO: 1000 001r rrrr 1000<br />MNEMÓNICO: STZ,Rr[2]<br />OPERACIÓN: (Z) ←Rr<br />CÓDIGO: 1000 001r rrrr 0000<br />
  21. 21. jaime.velarde@epn.edu.ec<br />21<br />EJEMPLOS PARA ALMACENAR EN LA SRAMCON DIRECCIONAMIENTO INDIRECTO<br />LDI R27,0x01 ; R27 ← 0x01<br />1110 0000 10110001 = 0xE0B1<br />LDI R26,0x3A ; R26 ← 0x3A<br />1110 0011 10101010 = 0xE3AA<br />ST X,R18 ; (X) ← R18  (0x013A) ← R18<br />1001 0011 0010 1100 = 0x932C<br />Inicialización del Puntero X<br />LDI R29,0x01 ; R27 ← 0x01<br />1110 0000 11010001 = 0xE0D1<br />LDI R28,0x3B ; R26 ← 0x3A<br />1110 0011 11001011 = 0xE3CB<br />ST Y,R19 ; (Y) ← R19  (0x013B) ← R19<br />1000 0011 0011 1000 = 0x8338<br />Inicialización del Puntero Y<br />
  22. 22. jaime.velarde@epn.edu.ec<br />22<br />ALMACENAR EN LA SRAMCON DIRECCIONAMIENTO INDIRECTO Y CON POST INCREMENTO<br /> EN UNA LOCALIDAD (0 … 65535) UTILIZANDO DIRECCIONAMIENTO INDIRECTO, SE ALMACENA UN REGISTRO (R0 … R31) Y EL PUNTERO SE INCREMENTA POSTERIORMENTE<br />MNEMÓNICO: STX+,Rr[2]<br />OPERACIÓN: (X) ←Rr X ← X+1<br />CÓDIGO: 1001 001r rrrr 1101<br />MNEMÓNICO: STY+,Rr[2]<br />OPERACIÓN: (Y) ←Rr Y ← Y+1<br />CÓDIGO: 1001 001r rrrr1001<br />MNEMÓNICO: STZ+,Rr[2]<br />OPERACIÓN: (Z) ←Rr Z ← Z+1<br />CÓDIGO: 1001 001r rrrr 0001<br />
  23. 23. jaime.velarde@epn.edu.ec<br />23<br />EJEMPLOS PARA ALMACENAR EN LA SRAMCON POST INCREMENTO<br />LDI R27,0x01 ; R27 ← 0x01<br />1110 0000 10110001 = 0xE0B1<br />LDI R26,0x3A ; R26 ← 0x3A<br />1110 0011 10101010 = 0xE3AA<br />ST X+,R18 ; (X) ← R18  (0x013A) ← R18 X ← X+1<br />1001 0011 0010 1101 = 0x932D<br />ST X+,R19 ; (X) ← R19  (0x013B) ← R19 X ← X+1<br />1001 0011 0011 1101 = 0x933D<br />Inicializa-ción del Puntero X<br />
  24. 24. jaime.velarde@epn.edu.ec<br />24<br />ALMACENAR EN LA SRAMCON DIRECCIONAMIENTO INDIRECTO Y CON PRE DISMINUCIÓN<br /> EN UNA LOCALIDAD (0 … 65535) UTILIZANDO DIRECCIONAMIENTO INDIRECTO EN EL QUE PREVIAMENTE SE HA DISMINUIDO EL PUNTERO, SE ALMACENA UN REGISTRO (R0 … R31)<br />MNEMÓNICO: ST-X,Rr[2]<br />OPERACIÓN: X ← X-1 (X) ←Rr<br />CÓDIGO: 1001 001r rrrr 1110<br />MNEMÓNICO: ST-Y,Rr[2]<br />OPERACIÓN: Y ← Y-1 (Y) ←Rr<br />CÓDIGO: 1001 001r rrrr 1010<br />MNEMÓNICO: ST-Z,Rr[2]<br />OPERACIÓN: Z ← Z-1 (Z) ←Rr<br />CÓDIGO: 1001 001r rrrr 0010<br />
  25. 25. jaime.velarde@epn.edu.ec<br />25<br />EJEMPLOS PARA ALMACENAR EN LA SRAMCON PRE DISMINUCIÓN<br />LDI R29,0x01 ; R27 ← 0x01<br />1110 0000 11010001 = 0xE0D1<br />LDI R28,0x3C ; R26 ← 0x3C<br />1110 0011 11001100 = 0xE3CC<br />ST -Y,R19 ; Y ← Y-1 (Y) ← R19  (0x013B) ← R19<br />1001 0011 0011 1010 = 0x933A<br />ST -Y,R18 ; Y ← Y-1 (Y) ← R18  (0x013A) ← R18<br />1001 0011 0010 1010 = 0x932A<br />Inicializa-ción del Puntero Y<br />
  26. 26. jaime.velarde@epn.edu.ec<br />26<br />ALMACENAR EN LA SRAMCON DIRECCIONAMIENTO INDIRECTO Y CON DESPLAZMIENTO<br /> EN UNA LOCALIDAD (0 … 65535) UTILIZANDO DIRECCIONAMIENTO INDIRECTO AL QUE SE SUMA EL DESPLAZAMIENTO (0 … 63), SE ALMACENA UN REGISTRO (R0 … R31)<br />MNEMÓNICO: STDY+q,Rr[2]<br />OPERACIÓN: (Y+q) ←Rr<br />CÓDIGO: 10q0 qq1r rrrr 1qqq<br />MNEMÓNICO: STDZ+q,Rr[2]<br />OPERACIÓN: (Z+q) ←Rr<br />CÓDIGO: 10q0 qq1r rrrr 0qqq<br />
  27. 27. jaime.velarde@epn.edu.ec<br />27<br />EJEMPLOS PARA ALMACENAR EN LA SRAMCON DESPLAZAMIENTO<br />LDI R31,0x01 ; R31 ← 0x01<br />1110 0000 11110001 = 0xE0F1<br />LDI R30,0x3A ; R30 ← 0x3A<br />1110 0011 11101010 = 0xE3EA<br />STD Z+10,R19 ; (Z+10) ← R19  (0x0144) ← R19<br />1000 0111 0011 0010 = 0x8732<br />STD Z+20,R18 ; (Z+20) ← R18  (0x014E) ← R18<br />1000 1011 0010 0100 = 0x8B24<br />STD Z+64,R1 ; (Z+64) ← R1  (0x017A) ← R1<br />10q0 qq10 0001 0qqq<br />Inicializa-ción del Puntero Z<br />Error..!! Desplazamiento fuera de rango<br />
  28. 28. jaime.velarde@epn.edu.ec<br />28<br />CARGAR UN REGISTRO DESDE LA FLASH<br /> EN UN REGISTRO SE CARGA DESDE UNA LOCALIDAD DE LA MEMORIA DEL PROGRAMA, UTILIZANDO DIRECCIONAMIENTO INDIRECTO<br />MNEMÓNICO: LPM[3]<br />OPERACIÓN: R0 ← (Z)<br />CÓDIGO: 1001 0101 1100 1000<br />MNEMÓNICO: LPMRd,Z[3]<br />OPERACIÓN: Rd← (Z)<br />CÓDIGO: 1001 000d dddd 0100<br />MNEMÓNICO: LPMRd,Z+[3]<br />OPERACIÓN: Rd← (Z) Z ← Z+1<br />CÓDIGO: 1001 000d dddd 0101<br />
  29. 29. jaime.velarde@epn.edu.ec<br />29<br />EJEMPLOS PARA CARGAR DESDE LA FLASH<br />LDI R31,0x03 ; R31 ← 0x01<br />1110 0000 11110011 = 0xE0F3<br />LDI R30,0x3A ; R30 ← 0x3A<br />1110 0001 11100000 = 0xE1E0<br />LPM ; R0 ← (Z)FLASH R0 ← (0x0310)FLASH<br />1001 0101 1100 1000 = 0x95C8<br />LPM R7,Z ; R7 ← (Z)FLASH R7 ← (0x0310)FLASH<br />1001 0000 0111 0100 = 0x9074<br />LPM R17,Z+ ; R17 ← (Z)FLASH R17 ← (0x0310)FLASH<br />; Z ← Z+1<br />1001 0001 0001 0101 = 0x9115<br />Inicializa-ción del Puntero Z<br />
  30. 30. jaime.velarde@epn.edu.ec<br />30<br />TRANSFERIR ENTRE REGISTRO Y PÓRTICO<br /> ENTRADA A UN REGISTRO (R0 … R31) DESDE UN PÓRTICO DE DIRECCIÓN A (0 … 63)<br />MNEMÓNICO: IN Rd,A[1]<br />OPERACIÓN: Rd← I/O A<br />CÓDIGO: 1011 0AAd ddddAAAA<br /> SALIDA HACIA UN PÓRTICO (0 … 63) DESDE UN REGISTROS (R0 … R31)<br />MNEMÓNICO: OUTA,Rr[1]<br />OPERACIÓN: I/O A ←Rr<br />CÓDIGO: 1011 1AAr rrrrAAAA<br />
  31. 31. jaime.velarde@epn.edu.ec<br />31<br />EJEMPLOS DE TRANSFERENCIAS CON PÓRTICOS<br />IN R16,0x00 ; R16 ← PÓRTICO 0x00<br />1011 0001 00000000 = 0xB100<br />IN R12,0x20 ; R12 ← PÓRTICO 0x20<br />1011 0010 11000100 = 0xB2C4<br />OUT 0x02,R18 ; PÓRTICO 0x02 ← R18<br />1011 1001 00100010 = 0xB922<br />OUT 0x1F,R9 ; PÓRTICO 0x1F ← R9<br />1011 1010 10011111 = 0xBA9F<br />OUT 0x50,R10 ; PÓRTICO 0x50 ← R10 <br />1011 1AA0 1010AAAA = 0xB?A?<br />Error..!! Pórtico fuera de rango<br />
  32. 32. jaime.velarde@epn.edu.ec<br />32<br />EJERCICIO QUE UTILIZA INSTRUCCIONES DE TRANSFERENCIA <br />Desarrollar un programa para el microcontrolador ATmega164P, para llenar las dieciséis primeras localidades de la memoria de datos, con los códigos ASCII del signo $, del número 1, de la letra F mayúscula y del número 4 en forma alternada, tal como se muestra en la siguiente lámina.<br />
  33. 33. GRÁFICO DEL EJERCICIO <br />jaime.velarde@epn.edu.ec<br />33<br />0x24 es el ASCII del signo $, 0x31 es el ASCII del 1, 0x46 es el ASCII de la F y 0x34 es el ASCII del 4.<br />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×