10  Instrucciones  de Transferencia
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

10 Instrucciones de Transferencia

on

  • 4,312 views

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

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

Statistics

Views

Total Views
4,312
Views on SlideShare
4,306
Embed Views
6

Actions

Likes
1
Downloads
444
Comments
0

1 Embed 6

http://www.slideshare.net 6

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

10 Instrucciones de Transferencia Presentation Transcript

  • 1. jaime.velarde@epn.edu.ec
    1
    SISTEMAS
    MICROPROCESADOS
    INSTRUCCIONES DE TRANSFERENCIA DE LOS MICROCONTOLADORESATmega
    Elaborado por: Ing. Jaime E. Velarde
  • 2. jaime.velarde@epn.edu.ec
    2
    RESUMEN DE LAS INSTRUCCIONES DE TRANSFERENCIA
  • 3. jaime.velarde@epn.edu.ec
    3
    INFORMACIÓN DE LAS INSTRUCCIONES
    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
  • 4. jaime.velarde@epn.edu.ec
    4
    COPIAR REGISTROS
    COPIA DE REGISTROS (R0 … R31)
    MNEMÓNICO: MOVRd,Rr[1]
    OPERACIÓN: Rd←Rr
    CÓDIGO: 0010 11rd ddddrrrr
    COPIA DE PAREJAS DE REGISTROS (SE ESPECIFICAN SOLO REGISTROS PARES R0, R2 … R28, R30 )
    MNEMÓNICO: MOVWRd,Rr[1]
    OPERACIÓN: Rd←Rr Rd+1 ← Rr+1
    CÓDIGO: 0000 0001 ddddrrrr
  • 5. jaime.velarde@epn.edu.ec
    5
    EJEMPLOS PARA COPIAR REGISTROS
    MOVR5,R20; R5 ←R20
    0010 1110 01010100 = 0x2E54
    MOV R31,R0 ; R31 ← R0
    0010 1101 11110000 = 0x2DF0
    MOV R8,R8 ; R8 ← R8
    0010 1100 10001000 = 0x2C88
    MOVW R30,R0; R30 ←R0 R31 ←R1
    0000 0001 11110000 = 0x01F0
    MOVW R8,R18; R8 ← R18 R9 ← R19
    0000 0001 01001001 = 0x0149
    MOVW R11,R22; R11 ← R22 R12 ← R23
    0000 0001 dddd1011 = 0x01?B
    Error..!! No es un registro válido
  • 6. jaime.velarde@epn.edu.ec
    6
    CARGAR A UN REGISTRO CON UN VALOR
    EN UN REGISTRO (R16 … R31) SE CARGA UN VALOR DE 8 BITS (0 … 255)
    MNEMÓNICO: LDIRd,K[1]
    OPERACIÓN: Rd← K
    CÓDIGO: 1110 KKKKddddKKKK
  • 7. jaime.velarde@epn.edu.ec
    7
    EJEMPLOS PARA CARGAR UN REGISTROS
    LDIR18,0x30; R18 ←0x30
    1110 0011 00100000 = 0xE320
    LDI R19,30 ; R19 ← 30
    1110 0001 00111110 = 0xE13E
    LDI R10,0xA6 ; R10 ← 0xA6
    1110 1010dddd0110 = 0xEA?6
    LDI R20,300 ; R20 ← 300
    1110 KKKK 0100KKKK = 0xE?4?
    LDI R16,-100 ; R18 ← -100
    1110 1001 00001100 = 0xE90C
    Error..!! No es un registro válido
    Error..!! Operando fuera de rango
  • 8. jaime.velarde@epn.edu.ec
    8
    CARGAR DESDE LA SRAMCON DIRECCIONAMIENTO DIRECTO
    EN UN REGISTRO (R0 … R31) SE CARGA EL CONTENIDO DE UNA LOCALIDAD CON DIRECCIÓN k (0 … 65535), UTILIZANDO DIRECCIONAMIENTO DIRECTO
    MNEMÓNICO: LDSRd,k[2]
    OPERACIÓN: Rd← (k)
    CÓDIGO: 1001 000d dddd 0000
    kkkkkkkkkkkkkkkk
  • 9. jaime.velarde@epn.edu.ec
    9
    EJEMPLOS PARA CARGAR DESDE LA SRAM CON DIRECCIONAMIENTO DIRECTO
    LDSR18,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
  • 10. jaime.velarde@epn.edu.ec
    10
    CARGAR DESDE LA SRAM CON DIRECCIONAMIENTO INDIRECTO
    EN UN REGISTRO (R0 … R31) SE CARGA DESDE UNA LOCALIDAD (0 … 65535), UTILIZANDO DIRECCIONAMIENTO INDIRECTO
    MNEMÓNICO: LDRd,X[2]
    OPERACIÓN: Rd← (X)
    CÓDIGO: 1001 000d dddd1100
    MNEMÓNICO: LDRd,Y[2]
    OPERACIÓN: Rd← (Y)
    CÓDIGO: 1000 000d dddd 1000
    MNEMÓNICO: LDRd,Z[2]
    OPERACIÓN: Rd← (Z)
    CÓDIGO: 1000 000d dddd 0000
  • 11. jaime.velarde@epn.edu.ec
    11
    EJEMPLOS PARA CARGAR DESDE LA SRAM CON DIRECCIONAMIENTO INDIRECTO
    LDI R27,0x01 ; R27 ← 0x01
    1110 0000 10110001 = 0xE0B1
    LDI R26,0x3A ; R26 ← 0x3A
    1110 0011 10101010 = 0xE3AA
    LD R18,X ; R18 ← (X)  R18 ← (0x013A)
    1001 0001 0010 1100 = 0x912C
    Inicialización del Puntero X
    LDI R29,0x01 ; R27 ← 0x01
    1110 0000 11010001 = 0xE0D1
    LDI R28,0x3B ; R26 ← 0x3A
    1110 0011 11001011 = 0xE3CB
    LD R19,Y ; R19 ← (Y)  R19 ← (0x013B)
    1000 0001 0011 1000 = 0x8138
    Inicialización del Puntero Y
  • 12. jaime.velarde@epn.edu.ec
    12
    CARGAR DESDE LA SRAM CON DIRECCIONAMIENTO INDIRECTO Y CON POST INCREMENTO
    EN UN REGISTRO (R0 … R31) SE CARGA DESDE UNA LOCALIDAD (0 … 65535), UTILIZANDO DIRECCIONAMIENTO INDIRECTO Y EL PUNTERO SE INCREMENTA POSTERIORMENTE
    MNEMÓNICO: LDRd,X+[2]
    OPERACIÓN: Rd← (X) X ← X+1
    CÓDIGO: 1001 000d dddd 1101
    MNEMÓNICO: LDRd,Y+[2]
    OPERACIÓN: Rd← (Y) Y ← Y+1
    CÓDIGO: 1001 000d dddd 1001
    MNEMÓNICO: LDRd,Z+[2]
    OPERACIÓN: Rd← (Z) Z ← Z+1
    CÓDIGO: 1001 000d dddd 0001
  • 13. jaime.velarde@epn.edu.ec
    13
    EJEMPLOS PARA CARGAR DESDE LA SRAM CON POST INCREMENTO
    LDI R27,0x01 ; R27 ← 0x01
    1110 0000 10110001 = 0xE0B1
    LDI R26,0x3A ; R26 ← 0x3A
    1110 0011 10101010 = 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
  • 14. jaime.velarde@epn.edu.ec
    14
    CARGAR DESDE LA SRAM CON DIRECCIONAMIENTO INDIRECTO Y CON 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 DISMINUIDO
    MNEMÓNICO: LDRd,-X[2]
    OPERACIÓN: X ← X-1Rd← (X)
    CÓDIGO: 1001 000d dddd 1110
    MNEMÓNICO: LDRd,-Y[2]
    OPERACIÓN: Y ← Y-1Rd← (Y)
    CÓDIGO: 1001 000d dddd 1010
    MNEMÓNICO: LDRd,-Z[2]
    OPERACIÓN: Z ← Z-1 Rd← (Z)
    CÓDIGO: 1001 000d dddd 0010
  • 15. jaime.velarde@epn.edu.ec
    15
    EJEMPLOS PARA CARGAR DESDE LA SRAM CON PRE DISMINUCIÓN
    LDI R29,0x01 ; R27 ← 0x01
    1110 0000 11010001 = 0xE0D1
    LDI R28,0x3C ; R26 ← 0x3C
    1110 0011 11001100 = 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
  • 16. jaime.velarde@epn.edu.ec
    16
    CARGAR DESDE LA SRAM CON DIRECCIONAMIENTO INDIRECTO Y CON 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: LDDRd,Y+q[2]
    OPERACIÓN: Rd← (Y+q)
    CÓDIGO: 10q0 qq0d dddd 1qqq
    MNEMÓNICO: LDDRd,Z+q[2]
    OPERACIÓN: Rd← (Z+q)
    CÓDIGO: 10q0 qq0d dddd 0qqq
  • 17. jaime.velarde@epn.edu.ec
    17
    EJEMPLOS PARA CARGAR DESDE LA SRAM CON DESPLAZAMIENTO
    LDI R31,0x01 ; R31 ← 0x01
    1110 0000 11110001 = 0xE0F1
    LDI R30,0x3A ; R30 ← 0x3A
    1110 0011 11101010 = 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
    Inicializa-ción del Puntero Z
    Error..!! Desplazamiento fuera de rango
  • 18. jaime.velarde@epn.edu.ec
    18
    ALMACENAR EN LA SRAMCON DIRECCIONAMIENTO DIRECTO
    EN UNA LOCALIDAD CON DIRECCIÓN k (0 … 65535) UTILIZANDO DIRECCIONAMIENTO DIRECTO, SE ALMACENA EL CONTENIDO DE UN REGISTRO (R0 … R31)
    MNEMÓNICO: STSk,Rr[2]
    OPERACIÓN: (k) ←Rr
    CÓDIGO: 1001 001r rrrr 0000
    kkkkkkkkkkkkkkkk
  • 19. jaime.velarde@epn.edu.ec
    19
    EJEMPLOS PARA ALMACENAR EN LA SRAMCON DIRECCIONAMIENTO DIRECTO
    STS0x13A, 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
  • 20. jaime.velarde@epn.edu.ec
    20
    ALMACENAR EN LA SRAMCON DIRECCIONAMIENTO INDIRECTO
    EN UNA LOCALIDAD (0 … 65535) UTILIZANDO DIRECCIONAMIENTO INDIRECTO, SE ALMACENA UN REGISTRO (R0 … R31)
    MNEMÓNICO: STX,Rr[2]
    OPERACIÓN: (X) ←Rr
    CÓDIGO: 1001 001r rrrr 1100
    MNEMÓNICO: STY,Rr[2]
    OPERACIÓN: (Y) ←Rr
    CÓDIGO: 1000 001r rrrr 1000
    MNEMÓNICO: STZ,Rr[2]
    OPERACIÓN: (Z) ←Rr
    CÓDIGO: 1000 001r rrrr 0000
  • 21. jaime.velarde@epn.edu.ec
    21
    EJEMPLOS PARA ALMACENAR EN LA SRAMCON DIRECCIONAMIENTO INDIRECTO
    LDI R27,0x01 ; R27 ← 0x01
    1110 0000 10110001 = 0xE0B1
    LDI R26,0x3A ; R26 ← 0x3A
    1110 0011 10101010 = 0xE3AA
    ST X,R18 ; (X) ← R18  (0x013A) ← R18
    1001 0011 0010 1100 = 0x932C
    Inicialización del Puntero X
    LDI R29,0x01 ; R27 ← 0x01
    1110 0000 11010001 = 0xE0D1
    LDI R28,0x3B ; R26 ← 0x3A
    1110 0011 11001011 = 0xE3CB
    ST Y,R19 ; (Y) ← R19  (0x013B) ← R19
    1000 0011 0011 1000 = 0x8338
    Inicialización del Puntero Y
  • 22. jaime.velarde@epn.edu.ec
    22
    ALMACENAR EN LA SRAMCON DIRECCIONAMIENTO INDIRECTO Y CON POST INCREMENTO
    EN UNA LOCALIDAD (0 … 65535) UTILIZANDO DIRECCIONAMIENTO INDIRECTO, SE ALMACENA UN REGISTRO (R0 … R31) Y EL PUNTERO SE INCREMENTA POSTERIORMENTE
    MNEMÓNICO: STX+,Rr[2]
    OPERACIÓN: (X) ←Rr X ← X+1
    CÓDIGO: 1001 001r rrrr 1101
    MNEMÓNICO: STY+,Rr[2]
    OPERACIÓN: (Y) ←Rr Y ← Y+1
    CÓDIGO: 1001 001r rrrr1001
    MNEMÓNICO: STZ+,Rr[2]
    OPERACIÓN: (Z) ←Rr Z ← Z+1
    CÓDIGO: 1001 001r rrrr 0001
  • 23. jaime.velarde@epn.edu.ec
    23
    EJEMPLOS PARA ALMACENAR EN LA SRAMCON POST INCREMENTO
    LDI R27,0x01 ; R27 ← 0x01
    1110 0000 10110001 = 0xE0B1
    LDI R26,0x3A ; R26 ← 0x3A
    1110 0011 10101010 = 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
  • 24. jaime.velarde@epn.edu.ec
    24
    ALMACENAR EN LA SRAMCON DIRECCIONAMIENTO INDIRECTO Y CON 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) ←Rr
    CÓDIGO: 1001 001r rrrr 1110
    MNEMÓNICO: ST-Y,Rr[2]
    OPERACIÓN: Y ← Y-1 (Y) ←Rr
    CÓDIGO: 1001 001r rrrr 1010
    MNEMÓNICO: ST-Z,Rr[2]
    OPERACIÓN: Z ← Z-1 (Z) ←Rr
    CÓDIGO: 1001 001r rrrr 0010
  • 25. jaime.velarde@epn.edu.ec
    25
    EJEMPLOS PARA ALMACENAR EN LA SRAMCON PRE DISMINUCIÓN
    LDI R29,0x01 ; R27 ← 0x01
    1110 0000 11010001 = 0xE0D1
    LDI R28,0x3C ; R26 ← 0x3C
    1110 0011 11001100 = 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
  • 26. jaime.velarde@epn.edu.ec
    26
    ALMACENAR EN LA SRAMCON DIRECCIONAMIENTO INDIRECTO Y CON DESPLAZMIENTO
    EN UNA LOCALIDAD (0 … 65535) UTILIZANDO DIRECCIONAMIENTO INDIRECTO AL QUE SE SUMA EL DESPLAZAMIENTO (0 … 63), SE ALMACENA UN REGISTRO (R0 … R31)
    MNEMÓNICO: STDY+q,Rr[2]
    OPERACIÓN: (Y+q) ←Rr
    CÓDIGO: 10q0 qq1r rrrr 1qqq
    MNEMÓNICO: STDZ+q,Rr[2]
    OPERACIÓN: (Z+q) ←Rr
    CÓDIGO: 10q0 qq1r rrrr 0qqq
  • 27. jaime.velarde@epn.edu.ec
    27
    EJEMPLOS PARA ALMACENAR EN LA SRAMCON DESPLAZAMIENTO
    LDI R31,0x01 ; R31 ← 0x01
    1110 0000 11110001 = 0xE0F1
    LDI R30,0x3A ; R30 ← 0x3A
    1110 0011 11101010 = 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
    Inicializa-ción del Puntero Z
    Error..!! Desplazamiento fuera de rango
  • 28. jaime.velarde@epn.edu.ec
    28
    CARGAR UN REGISTRO DESDE LA FLASH
    EN UN REGISTRO SE CARGA DESDE UNA LOCALIDAD DE LA MEMORIA DEL PROGRAMA, UTILIZANDO DIRECCIONAMIENTO INDIRECTO
    MNEMÓNICO: LPM[3]
    OPERACIÓN: R0 ← (Z)
    CÓDIGO: 1001 0101 1100 1000
    MNEMÓNICO: LPMRd,Z[3]
    OPERACIÓN: Rd← (Z)
    CÓDIGO: 1001 000d dddd 0100
    MNEMÓNICO: LPMRd,Z+[3]
    OPERACIÓN: Rd← (Z) Z ← Z+1
    CÓDIGO: 1001 000d dddd 0101
  • 29. jaime.velarde@epn.edu.ec
    29
    EJEMPLOS PARA CARGAR DESDE LA FLASH
    LDI R31,0x03 ; R31 ← 0x01
    1110 0000 11110011 = 0xE0F3
    LDI R30,0x3A ; R30 ← 0x3A
    1110 0001 11100000 = 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
  • 30. jaime.velarde@epn.edu.ec
    30
    TRANSFERIR ENTRE REGISTRO Y 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 A
    CÓDIGO: 1011 0AAd ddddAAAA
    SALIDA HACIA UN PÓRTICO (0 … 63) DESDE UN REGISTROS (R0 … R31)
    MNEMÓNICO: OUTA,Rr[1]
    OPERACIÓN: I/O A ←Rr
    CÓDIGO: 1011 1AAr rrrrAAAA
  • 31. jaime.velarde@epn.edu.ec
    31
    EJEMPLOS DE TRANSFERENCIAS CON PÓRTICOS
    IN R16,0x00 ; R16 ← PÓRTICO 0x00
    1011 0001 00000000 = 0xB100
    IN R12,0x20 ; R12 ← PÓRTICO 0x20
    1011 0010 11000100 = 0xB2C4
    OUT 0x02,R18 ; PÓRTICO 0x02 ← R18
    1011 1001 00100010 = 0xB922
    OUT 0x1F,R9 ; PÓRTICO 0x1F ← R9
    1011 1010 10011111 = 0xBA9F
    OUT 0x50,R10 ; PÓRTICO 0x50 ← R10
    1011 1AA0 1010AAAA = 0xB?A?
    Error..!! Pórtico fuera de rango
  • 32. jaime.velarde@epn.edu.ec
    32
    EJERCICIO QUE UTILIZA INSTRUCCIONES DE TRANSFERENCIA
    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.
  • 33. GRÁFICO DEL EJERCICIO
    jaime.velarde@epn.edu.ec
    33
    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.