Modos de direccionamiento en los microcontroladores AVR ATMEGA
Los modos de direccionamiento para acceder a la memoria de programa (memoria Flaxh) y a la memoria de datos, ya sea la SRAM, los archivos de registros, la memoria de entrada/salida y la memoria extendida de entrada/salida son los siguientes [1]:
1. Direccionamiento directo de un solo registro: Como se muestran en la Fig. 1 en este modo de direccionamiento el dato para realizar el cdigo de operacin de la instruccin (OP) se encuentra almacenado en el registro d (RD). Entre las operaciones que empelan este tipo de direccionamiento podemos mencionar la de incremento en 1 del valor de un registro (INC) y la de limpieza o borrado de registro (CLR)
Fig. 1. Direccionamiento directo de un solo registro.
2. Direccionamiento directo de dos registros: Como se puede observar en la Fig. 2 en este modo de direccionamiento los dos datos requeridos por la operacin se encuentran almacenados en los registros r y d (Rr y Rd respectivamente) y al ejecutar la operacin el resultado ser almacenado en el registro d. Entre las operaciones que empelan este tipo de direccionamiento podemos mencionar la suma de dos registros (ADD), la comparacin de registros (CP) y el movimiento de datos entre registros (MOV).
Fig. 2. Direccionamiento directo de dos registros. 3. Direccionamiento directo de entrada/salida: Como se puede observar en la Fig. 3 en este modo de direccionamiento se requiere especificar un puerto de destino para sacar los datos contenidos en el registro r o un puerto fuente desde el que se leern datos que sern guardados en el registro d. Entre las operaciones que empelan este tipo de direccionamiento podemos mencionar la entrada por puerto (IN) y la salida por puerto (OUT).
Fig. 3. Direccionamiento directo de entrada/salida.
4. Direccionamiento directo de datos: Como se puede observar en la Fig. 4 en este modo de direccionamiento se requiere especificar una direccin de memoria en la cual se quiere escribir o leer datos desde o hacia un registro respectivamente. Entre las operaciones que empelan este tipo de direccionamiento podemos mencionar el almacenamiento directo en RAM.
Fig. 4. Direccionamiento directo de datos.
5. Direccionamiento indirecto de datos con desplazamiento: Como se puede observar en la Fig. 5 en este modo de direccionamiento la direccin de memoria del operando al que se hace referencia se obtiene de sumar al registro y o z un valor cualquiera de direccin, el dato obtenido ser almacenado o guardado en un registro destino o fuente respectivamente. Entre las operaciones que empelan este tipo de direccionamiento podemos mencionar la carga indirecta con desplazamiento (LDD) y el almacenamiento indirecto con desplazamiento (STD).
Fig. 5. Direccionamiento indirecto de datos con desplazamiento.
6. Direccionamiento indirecto de datos: Como se puede observar en la Fig. 6 en este modo de direccionamiento la direccin del operando a leerse o la direccin en la que se desea escribir el valor de un registro se encuentra en el registro x, y o z. Entre las operaciones que empelan este tipo de direccionamiento podemos mencionar la carga indirecta (LD) y el almacenamiento indirecto (ST).
Fig. 6. Direccionamiento indirecto de datos.
7. Direccionamiento indirecto de datos con pre-decremento: Como se puede observar en la Fig. 7 este modo de direccionamiento es similar al direccionamiento indirecto de datos, con la diferencia de que la direccin contenida en el registro x, y o z es decrementada en 1 previo a la realizacin de la operacin. Entre las operaciones que empelan este tipo de direccionamiento podemos mencionar la carga indirecta (LD) y el almacenamiento indirecto (ST).
Fig. 7. Direccionamiento indirecto de datos con pre-decremento. 8. Direccionamiento indirecto de datos con post-incremento: Como se puede observar en la Fig. 8 este modo de direccionamiento es similar al direccionamiento indirecto de datos, con la diferencia de que la direccin contenida en el registro x, y o z es incrementada en 1 luego de que la operacin se ha ejecutado. Entre las operaciones que empelan este tipo de direccionamiento podemos mencionar la carga indirecta (LD) y el almacenamiento indirecto (ST).
Fig. 8. Direccionamiento indirecto de datos con post-incremento.
9. Direccionamiento a memoria de programa: Como se puede observar en la Fig. 9 en este modo de direccionamiento se carga el contenido de la direccin de memoria especificada en el registro z al registro R0 o Rd, el ltimo bit de la operacin indica si se carga el byte ms significativo o el menos significativo de la direccin especificada. Entre las operaciones que empelan este tipo de direccionamiento podemos mencionar la carga desde memoria del programa (LMP).
Fig. 9. Direccionamiento a memoria de programa.
10. Direccionamiento a memoria de programa con post-incremento: Como se puede observar en la Fig. 10 en este modo de direccionamiento se carga el contenido de la direccin de memoria especificada en el registro z al registro Rd, el ltimo bit de la operacin indica si se carga el byte ms significativo o el menos significativo de la direccin especificada. Entre las operaciones que empelan este tipo de direccionamiento podemos mencionar la carga extendida desde memoria del programa (ELMP) en donde el registro RAMPZ se usa para la extensin.
Fig. 10. Direccionamiento a memoria de programa con post-incremento.
11. Direccionamiento directo de programa: Como se puede observar en la Fig. 11 en este modo de direccionamiento la operacin provoca un salto en la ejecucin del programa hacia la direccin especificada. Entre las operaciones que empelan este tipo de direccionamiento podemos mencionar el salto directo (JMP) y la llamada directa a subrutina (CALL).
Fig. 11. Direccionamiento directo de programa.
12. Direccionamiento indirecto a memoria de programa: Como se puede observar en la Fig. 12 en este modo de direccionamiento la operacin provoca un salto en la ejecucin del programa, es decir que se contina desde la instruccin cuya direccin se especifica en el registro z. Entre las operaciones que empelan este tipo de direccionamiento podemos mencionar el salto indirecto hacia z (IJMP) y la llamada indirecta a z (ICALL).
Fig. 12. Direccionamiento indirecto a memoria de programa.
13. Direccionamiento relativo a memoria de programa: Como se puede observar en la Fig. 13 en este modo de direccionamiento la operacin provoca un salto en el programa, el cual contina desde la direccin actual contenida en el contador del programa incrementada en uno e incrementada adems en el valor indicado por el operando k. Entre las operaciones que empelan este tipo de direccionamiento podemos mencionar el salto relativo (RJMP) y la llamada relativa a subrutina (RCALL).
Fig. 13. Direccionamiento relativo a memoria de programa.
Set de instrucciones del ATMEGA 164P
Las instrucciones del ATMEGA 164 son las siguientes [2]:
Instrucciones lgicas y aritmticas:
Instrucciones de derivacin:
Instrucciones de bit y de prueba de bit:
Instrucciones de transferencia de datos:
Instrucciones de control del microcontrolador:
Conclusiones.-
Conocer los modos de direccionamiento ayuda a la compresin de la programacin en bajo nivel y de sus respectivas instrucciones. Conocer el set de instrucciones nos permite programar ms fcilmente ya que conocemos las operaciones que puede llevar a cabo un determinado microcontrolador.
Referencias.-
[1] Atmel, www.atmel.com, 09 Junio 2014. [En lnea]. Available: http://www.atmel.com/images/doc7674.pdf. [ltimo acceso: 29 Julio 2014]. [2] N. E. d. T. Universidad, uvirtual.unet.edu.ve, 27 Febrero 2012. [En lnea]. Available: https://uvirtual.unet.edu.ve/file.php?file=%2F1357%2FSesion1%2FTutorial%20ATMEGA%2F7842870-Capitulo3-Modos-de-Direccionamiento-e- Instrucciones-del-ATmega32-espanol.pdf. [ltimo acceso: 29 Julio 2014].