Atmega16 – Introducción

En este tutorial de como utilizar el microcontrolador ATmega16 voy a utilizar el lenguaje ensamblador (assembler) ya que considero a este como el más óptimo para aprender a programarlos, además ayuda a entender con mayor facilidad sus recursos.

También utilizaré el lenguaje C debido a que la gran cantidad de ejemplos referenciales que podemos encontrar y que una vez aprendido nos ayuda significativamente a realizar proyectos de mayor complejidad.

Las características del uC ATmega16:

  • CPU de 131 instrucciones.
  • 32 registros de propósito general (cada uno de 8 bits)
  • Memoria de programa flash de 16KBytes
  • Memoria SRAM de 1KByte
  • 32 líneas de entrada/salida
  • 3 timers (se puede generar hasta 4 PWM)
  • ADC de 10 bits
  • Comparador Analógico
  • Comunicación serial USART, SPI, TWI
  • Timer Watchdog
  • Contador de tiempo real

Registros Trabajo:

Existen 32 registros de trabajo, los 16 primeros registros (R0 – R15) solo aceptan ciertas instrucciones en lenguaje ensamblador mientras que los últimos 16 registros las aceptan todas.

Para explicar esto con más detalle voy a hacer referencia al AVR Instruction Set.

La nomenclatura que se encuentra es la siguiente:

  • Rd: Registro destino
  • Rr: Registro fuente
  • R: Resultado después de la ejecución de una instrucción.
  • K: Dato constante
  • k: Dirección constante
  • b: Bit en un registro de propósito general o en un registro Entrada/Salida
  • s: Bit en el registro de estado (SREG)
  • A: Dirección de un registro Entrada/Salida
  • q: Desplazamiento para direccionamiento directo

SREG:

  • I: Habilitación global de interrupciones
  • T: Copiar bits
  • H: Acarreo auxiliar
  • S: Signo
  • V: Desbordamiento
  • N: Negación
  • Z: Cero
  • C: Acarreo principal

Para poder programar en lenguaje ensamblador debemos entender a profundidad cómo funcionan las instrucciones, por ejemplo tenemos la instrucción ADD:

Funcionamiento de operador ADD

En la parte de “Operands” nos dice que los registros destino que participan son los 32 y los registros fuente que participan son los 32, también podemos ver que las banderas que cambian en el SREG son H,S,V,N,Z,C

Otra parte importante a tener en cuenta en la programación es que podemos formar 3 registros (X, Y, Z) de 16 bits de la siguiente manera:

R26 : R27 = X
R28 : R29 = Y
R30 : R31 = Z