Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ATMEL ha llevado la filosofa de diseo RISC (adaptada) a los microprocesadores de 8 BIT. Esta nueva arquitectura proporciona todos los beneficios habituales del RISC: tasa de reloj ms rpida, mejor desempeo, y una optimizacin ms eficiente en el compilador. AVR compite con varias familias de microprocesadores bien establecidas en el mercado, tales como: 8051, 68HC05, 68HC11 y los PIC de Microchip que se han extendido rpidamente en los ltimos aos. AVR es el primer diseo de CPU de ATMEL, una compaa ms conocida por sus productos de memoria "flash" y EEPROM. La firma tambin produce y vende varios subproductos de la popular familia 8051, con la diferencia que estos estn basados en "flash". La tabla que se presenta a continuacin resume las caractersticas ms importantes de algunos modelos que pueden ser adquiridos en el mercado local:
Los dispositivos se fabrican usando la tecnologa de memoria no voltil de alta densidad de ATMEL. La Flash programable permite reprogramar la memoria de programa en el sistema a travs de un interfaz serie SPI o por un programador de memoria no voltil convencional. Combinando una reforzada CPU RISC de 8-bit y la Flash programable en un chip monoltico, los microcontroladores de ATMEL serie AT90SXX proporcionan una gran flexibilidad y soluciones eficaces a muchas aplicaciones de control integradas. Los AVR cuentan con un amplio conjunto de instrucciones y con 32 registros de trabajo de propsito general. Los 32 registros se conectan directamente a la Unidad AritmticoLgica (ALU), permitiendo acceder a dos registros independientes con una instruccin ejecutada en un ciclo de reloj. La arquitectura resultante trabaja con un cdigo ms eficaz, logrando capacidades de procesamiento diez veces ms rpidas que los microcontroladores CISC convencionales.
Diagrama a bloques del AT90S8535 Pueden usarse seis de los 32 registros como tres punteros de registro de direccin indirectos (de 16-bits) para el direccionamiento del espacio de datos (memoria de datos RAM), proporcionando clculos de direccin eficaces. Tambin se usa uno de los tres punteros de direccin para observar una tabla de constantes. Estos registros de funciones agregados son los registros: X, Y y Z. 2
El espacio de memoria I/O contiene 64 direcciones para la configuracin de funciones perifricas de la CPU como los registros de control, Temporizadores / Contadores, convertidores A/D y otras funciones. Los registros de I/O deben ser accedidos con su direccin del espacio I/O no considerando su direccin absoluta-. A estos registros de propsito especfico ATMEL tambin los llama Puertos (Ports). El AVR utiliza el concepto de arquitectura Harvard, con buses y memorias de programa y datos por separado. La memoria de programa se ejecuta con un sistema de dos fases. Mientras una instruccin est ejecutndose, la siguiente instruccin se pre-extrae de la memoria de programa. Con las instrucciones de salto relativo (relative jump) y llamada a subrutina (call), se accede directamente a cualquier direccin de la memoria de programa. La mayora de las instrucciones de los AVR tiene el formato de palabra (word) de 16-bit. Cada direccin de memoria de programa contiene una instruccin de 16 o 32 bit. Durante las interrupciones y las llamadas a subrutinas, la direccin de retorno del contador de programa (PC) se guarda en la pila. La pila est de forma acertada situada en la SRAM de datos de propsito general, y por consiguiente, el tamao de la pila est slo limitado por el tamao total de la SRAM. Todos los programas del usuario deben inicializar el puntero de pila (SP) antes de la ejecucin de subrutinas o interrupciones, considerando que cada vez que se carga un valor en la pila la direccin del SP decrece. El SP de 16 bit es accesible para lectura y escritura mediante el espacio de memoria I/O. Las localidades de la memoria de datos (SRAM) pueden ser accedidos fcilmente a travs de los diferentes modos de direccionamiento soportados en la arquitectura AVR. El modo ocioso (idle) detiene la CPU, permitiendo que continen funcionando la SRAM, el puerto SPI, los Temporizadores / Contadores y el sistema de interrupciones. El modo hibernacin (power-down) guarda los contenidos de los registros pero congela el oscilador, deshabilitando todas las otras funciones del chip hasta la prxima interrupcin externa o Reset del hardware.
CONJUNTO DE INSTRUCCIONES
En este apartado se comentan las instrucciones de ensamblador que poseen los C AVR de 8-BIT. Se explica la funcin de cada una de ellas, su sintaxis, operandos utilizados y una descripcin con ejemplos. El conjunto de instrucciones para estos microcontroladores se puede dividir en el siguiente orden de grupos: Instrucciones Aritmticas y Lgicas Instrucciones de Desvo (salto) Instrucciones de Transferencia de Datos Instrucciones de Bit y prueba de Bit Una lnea tpica en lenguaje ensamblador est dada de la siguiente forma: [Mnemnico] operando1, operando2 Los Mnemnicos son las instrucciones en lenguaje ensamblador que puede reconocer el microprocesador. Dependiendo de la instruccin, puede haber uno o dos operandos, incluso pueden no existir; su contenido consiste en un nmero, una variable o una direccin; normalmente el resultado de una operacin lgica, aritmtica o de carga es almacenado en operando1.
NOMENCLATURA DEL CONJUNTO DE INSTRUCCIONES Registros y operandos Rd Rr R K k b s Registro destino (y fuente) del bloque de registros de trabajo Registro fuente del bloque de registros de trabajo Resultado despus de que una instruccin es ejecutada Dato inmediato (constante) Direccin de memoria Bit de un registro I/O (7-0) Bit en el registro de estado (SREG)
X,Y,Z Registros de direccionamiento indirecto o registros de palabra (X=R27:R26 Y=R29:R28 Z=R31:R30) P Registros del bloque I/O q Desplazamiento (6-bit) por direccionamiento directo
Banderas del registros de estado (SREG) C: Bandera de acarreo Z: Bandera de resultado cero N: Bandera de resultado negativo V: Indicador de complemento a dos desbordado S: NV para pruebas de signo H: Bandera de medio acarreo T: Bit transferido por la instruccin BLD o BST I: Bandera de interrupciones globales
EICALL CALL RET RETI CPSE CP CPC CPI SBRC SBRS SBIC SBIS BRBC BRBS BREQ BRNE BRCS BRCC BRSH BRLO BRMI BRPL BRGE BRLT BRHS BRHC BRTS BRTC BRVS BRVC BRIE BRID
Ninguno k Ninguno Ninguno Rd,Rr Rd,Rr Rd,Rr Rd,K Rr,b Rr,b P,b P,b s,k s,k k k k k k k k k k k k k k k k k k k
Llamada indirecta a subrutina extendida Llamada a subrutina Regreso de subrutina Regreso de interrupcin Compare y salta si es igual Compara Compara con acarreo Compara con inmediato Salta si el bit del registro es cero Salta si el bit del registro es uno Salta si el bit del registro I/O es cero Salta si el bit del registro I/O es uno Salta si el bit de SREG es cero Salta si el bit de SREG es uno Salta si es igual Salta si es diferente Salta si C est a uno Salta si C est a cero Salta si es mayor o igual Salta si es menor Salta si es negativo Salta si es mayor Salta si es mayor o igual (con signo) Salta si es menor (con signo) Salta si H est a uno Salta si H est a cero Salta si T est a uno Salta si T est a cero Salta si V esta a uno Salta si V est a cero Salta si I est a uno Salta si I est a cero
X,Rr X+,Rr -X,Rr Y,Rr Y+,Rr -Y,Rr Y+q,Rr Z,Rr Z+,Rr -Z,Rr Z+q,Rr Ninguno Ninguno Rd,P P,Rr Rr Rd
Almacena indirectamente Almacena indirectamente con Post-Incremento Almacena indirectamente con Pre-Decremento Almacena indirectamente Almacena indirectamente con Post-Incremento Almacena indirectamente con Pre-Decremento Almacena indirectamente con desplazamiento Almacena indirectamente Almacena indirectamente con Post-Incremento Almacena indirectamente con Pre-Decremento Almacena indirectamente con desplazamiento Carga memoria de programa Almacena memoria de programa Cargar un registro con un I/O Cargar un I/O con un registro Cargar registro en la pila Sacar dato de la pila
dife:
salto:
desvo:
desvo:
10
BREAK Pausa
Sintaxis: BREAK Operacin: Pausa en la depuracin Operandos: Ninguno
Descripcin: Se utiliza para la depuracin y normalmente no se utiliza en el programa de la aplicacin. Cuando la instruccin es ejecutada el CPU del AVR se pone en modo de inactividad. Esto le da al depurador acceso a los recursos internos. La instruccin no est disponible para todos los modelos de AVRs. Banderas afectadas: Ninguna
Descripcin: Examina la bandera Z y ejecuta un salto relativo en PC (contador de programa) si Z est a uno. Si la instruccin se ejecuta inmediatamente despus de alguna de las instrucciones CP, CPI, SUB o SUBI, el salto ocurre si el nmero binario con o sin signo representado en Rd es igual al nmero binario con o sin signo representado en Rr. Esta instruccin desva relativamente a PC en cualquier direccin (PC - 63 destino PC + 64). El parmetro k es el offset de PC y es representado en forma de complemento a dos. (Equivalente a la instruccin BRBS 1, k). Banderas afectadas: Ninguna Ejemplo: CP r1, r0 BREQ igual ... NOP ; Comparar registros r1 y r0 ; Salta si Z=0 (los registros son iguales) ; Destino de desvo (No hacer nada)
igual:
desvio: Ejemplo: CP r11, r12 BRGE desvo ... NOP ; Comparar los registros r11 y r12 ; Desva si r11 r12 (con signo) ; Destino de desvo
desvo:
11
desvio:
desvio:
desvio:
igual:
12
desvo:
desvo:
desvo:
13
desvio: SUBI r19, 4 BRSH desvo ... NOP ; Restar 4 de r19 ; Desva si r19 4 (sin signo) ; Destino de desvo
desvo:
desvio:
desvio:
14
desvio:
check:
error:
15
Ejemplo: CBI $12, 7 ; Poner a cero el bit 7 de Port D V: Se pone a cero. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. Ejemplo: CBR r16, $F0 CBR r18, 1 ; Borra el nibble alto de r16 ; Borra el bit 0 de r18
16
V: Se pone a cero. N: Se pone a cero Z: Se pone a uno. Ejemplo: loop: CLR r18 ; Borrar r18 INC r18 ; Incrementar r18 ... CPI r18, $50 ; Comparar r18 con $50 BRNE loop
17
prueba:
18
CP Compara
Sintaxis: CP Rd, Rr Operacin: Rd -Rr Operandos: 0 d 31, 0 r 31 Descripcin: Efecta una comparacin entre dos registros Rd y Rr. Ninguno de los registros es cambiado. Todos los desvos condicionales pueden usarse despus de esta instruccin. Banderas afectadas:
H: Se activa si hay un acarreo negativo del bit 3, de lo contrario se borrar. V: Se activa si ocurre un desbordamiento del complemento a dos como resultado de la operacin, de lo contrario se borrar. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. C: Se activa si el valor absoluto del contenido de Rr es mayor que el contenido de Rd, de lo contrario se borrar. Ejemplo: CP r4, r19 BRNE noteq ... NOP ; Comparar r4 con r19 ; Desva si la bandera Z est activa. ; Destino de desvo (No hacer nada)
H: Se activa si hay un acarreo negativo del bit 3, de lo contrario se borrar. V: Se activa si ocurre un desbordamiento del complemento a dos como resultado de la operacin, de lo contrario se borrar. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: El valor previo permanece sin cambio cuando el resultado es cero, de lo contrario se borrar. C Estar a uno si el valor absoluto del contenido de Rr + C, es mayor que el contenido de Rd, de lo contrario se borrar. Ejemplo: CP r2, r0 CPC r3, r1 BRNE noteq ... NOP ; Comparar r3:r2 con r1:r0 ; Compara el byte bajo ; Compara el byte alto ; Desva si la bandera Z est activa ; Destino de desvo( no hacer nada)
noteq:
noteq:
Descripcin: Efecta una comparacin entre el registro Rd y un dato inmediato. El registro no es cambiado. Todos los desvos condicionales pueden usarse despus de esta instruccin. Banderas afectadas:
Descripcin: Ejecuta una comparacin entre dos registros Rd y Rr, y si Rd Rr entonces la siguiente instruccin se ejecuta de lo contrario la siguiente instruccin es brincada. Banderas afectadas: Ninguna
H: Se activa si hay un acarreo negativo del bit 3, de lo contrario se borrar. V: Se activa si ocurre un desbordamiento del complemento a dos como resultado de la operacin, de lo contrario se borrar. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. C: Se activa si el valor absoluto del contenido de K es mayor que el contenido de Rd, de lo contrario se borrar. Ejemplo: CPI r19,3 BRNE error ... NOP ; Comparar r19 con 3 ; Desva si la bandera Z est activa ; Destino de desvo (No hacer nada)
Ejemplo: INC r4 CPSE r4, r0 NEG r4 NOP ; Incrementar r4 ; Comparar r4 con r0 ; Slo ejecutar si r4 r0 ; Continuar (No hacer nada)
error:
19
Descripcin: Realiza una llamada indirecta a una subrutina apuntada por el registro puntero Z. El registro puntero Z es de 16 bit y permite la llamada a subrutina dentro de los 64K words (128K bytes) ms bajos de la seccin de espacio de memoria de programa. El SP (puntero de pila) utiliza durante el ICALL un esquema de post-decremento. Banderas afectadas: Ninguna Ejemplo: MOV r30, r0 ICALL ; Poner offset a la tabla de llamada ; Rutina de llamada que apunta a r31:r30
20
exit:
JMP Salto
Sintaxis: JMP k Operacin: PC k Operandos: 0 k 4M Descripcin: Ejecuta un salto a cualquier posicin de la memoria de programa. La instruccin no es disponible para todos los modelos de AVRs. Banderas afectadas: Ninguna
Ejemplo: MOV r1, r0 JMP lejos nop ; Copia r0 en r1 ; Salto incondicional ; Destino de salto CLR r31 LDI r30, $F0 LPM ; Borra el byte alto de Z ; Pone el byte bajo de Z a $F0 ; Carga una constante de la memoria ; de programa apuntada por Z
lejos:
21
22
23
Descripcin: Efecta una copia de un par de registros en otro par de registros. Los registros fuente Rr permanecen sin cambiar, mientras los registros destino Rd son cargados con una copia de Rr. Banderas afectadas: Ninguna
Ejemplo: MOV r16,r0 CALL check ... CPI r16,$11 ... RET ; Copiar r0 en r16 ; Llamada a subrutina ; Comparar r16 con $11 ; Retorno de subrutina check: MOVW r17:r16,r1:r0 ; Copiar r1:r0 en r17:r16 CALL check ; Llamada a subrutina ... CPI r16, $11 ; Comparar r16 con $11 ... RET ; Retorno de subrutina Esta instruccin no es disponible para todos los modelos de AVRs. Ejemplo:
check:
24
Banderas afectadas: Banderas afectadas: C: Se pone a uno si el bit 15 del resultado est a uno. Z: Se pone a uno si el resultado es cero. Esta instruccin no es disponible para todos los modelos de AVRs. Ejemplo: MUL r5, r4 MOVW r4, r0 ; Multiplica R5 con R4 ; Copia el resultado en R5: R4 MUL r21 r20 MOVW r20, r0 ; Multiplica R21 con R20 ; Copia el resultado en R21: R20 C: Se pone a uno si el bit 15 del resultado est a uno. Z: Se pone a uno si el resultado es cero. Esta instruccin no es disponible para todos los modelos de AVRs. Ejemplo:
NOP No operacin
Sintaxis: NOP Operacin: Ninguna Operandos: Ninguno Descripcin: Consume un ciclo sin realizar operaciones. Banderas afectadas: Ninguna Ejemplo:
H: Se activa si haba un acarreo negativo (Borrow) del bit 3, de lo contrario se borrar (cero). V: Se activa si ocurre un desbordamiento del complemento a dos de la resta implcita de cero, de lo contrario se borrar. Un desbordamiento del complemento a dos ocurrir si y slo si el contenido del registro despus de la operacin es $80. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. C: Se activa si hay un acarreo negativo (borrow) en la resta implcita de cero, de lo contrario se borrar. La bandera C se activa en todos los casos excepto cuando el contenido del registro despus de la operacin es $00. Ejemplo: SUB r11, r0 ; Restar r0 de r11 BRPL prueba ; Desvo si la bandera N est a cero. NEG r11 ; Realizar el complemento a dos de r11 NOP ; Destino de desvo (No hacer nada)
CLR r16 SER r17 OUT $18, r16 NOP OUT $18, r17
; Borrar r16 ; Poner a uno r17 ; Escribir ceros en el Puerto B ; Esperar (No hacer nada) ; Escribir unos en el Puerto B
prueba:
25
routine:
26
Descripcin: Realiza una llamada relativa a una direccin que se encuentra dentro de PC - 2K + 1 y PC +2K (words, palabra). En ensamblador, se usan etiquetas en lugar de operadores relativos. Para los microcontroladores AVR con memoria de programa que no excede 4K words (8K bytes) esta instruccin puede direccionar a toda la memoria desde cualquier posicin. El SP (puntero de pila) utiliza durante el RCALL un esquema de postdecremento. Banderas afectadas: Ninguna
routine:
; Guardar r14 en la pila ; Guardar r13 en la pila ; Restaurar r13 ; Restaurar r14 ; Retorno de subrutina
Ejemplo: RCALL routine ... PUSH r14 ... POP r14 RET ; Llamada a subrutina ; Guardar r14 en la pila ; Restaurar r14 ; Retorno de subrutina
routine:
routine:
; Guardar r14 en la pila I: Se pone a uno. ; Restaurar r14 ; Retorno de subrutina Ejemplo: ... extint: PUSH r0 ; Guardar r0 en la pila ... POP r0 ; Restaurar r0 RETI ; Retorno y habilitacin de interrupciones
27
error: ok:
28
* EEWE es el bit 1 del registro EECR (Registro de Control de la memoria EEprom) mapaeado en la localidad $1C de la memoria RAM.
29
30
31
32
Descripcin: Pone a uno la bandera de resultado cero Z del registro de estado SREG. Banderas afectadas: Z: Se pone a uno Ejemplo: ADD r2, r19 SEZ ; Suma r19 a r2 ; Poner a uno la bandera Z
Descripcin: Pone en modo Sleep al microcontrolador Banderas afectadas: Ninguna Ejemplo: MOV r0, r11 LDI r16, (1<<SE) OUT MCUCR, r16 SLEEP ; Copiar r11 en r0 ; Modo sleep habilitado ; Poner el MCU en modo descanso
El resultado de estas combinaciones es indefinido: LD X+, r26 LD X+, r27 LD X, r26 LD -X, r27 Algunas variantes de esta instruccin no son disponibles para todos los modelos de AVRs. Banderas afectadas: Ninguna Ejemplo: CLR r27 LDI r26, $60 ST X+, r0 ST X, r1 LDI r26, $63 ST X, r2 ST X, r3 ; Borra el byte alto de X ; Pone el byte bajo de X a $60 ; Almacena r0 en la localidad $60 (X post; incrementado) ; Almacenar r1 en la localidad $61 ; Pone el byte bajo de X a $63 ; Almacena r2 en la localidad $63 ; Almacena r3 en la localidad $62 (X pre; decrementado)
33
34
SUB
Sintaxis: SUB Rd, Rr Operacin: Rd Rd - Rr Operandos: 0 d 31, 0 r 31 Descripcin: Resta dos registros sin considerar la bandera C y deja el resultado en el registro destino Rd. Banderas afectadas: H: Se activa si hay un acarreo negativo (Borrow) del bit 3, de lo contrario se borrar. V: Se activa si ocurre un desbordamiento del complemento a dos como resultado de la operacin, de lo contrario se borrar. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. C: Se activa si el valor absoluto del contenido de Rr es mayor que el valor absoluto de Rd, de lo contrario se borrar. Ejemplo: ADD r1, r2 ADD r28, r28 ; Suma r2 a r1 (r1=r1+r2) ; Suma r28 a s mismo (r28=r28+r28)
35
V: Se pone a cero. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. Ejemplo: TST r0 ; Prueba r0 BREQ prueba ; Brinca si r0 = 0 ... prueba: NOP ; Destino de desvo (No hacer nada)
36