Para comenzar a estudiar este curso necesitas tener un conocimiento básico de programación a nivel ensamblador.
Paso 1
¿Qué significa AVR?
Pues según ATMEL, sólo es un nombre que se sacaron de la manga. Algunos dicen que significa Advanced Virtual RISC. Otros dicen que lleva las iniciales de los inventores de los AVR: Alf Egil Bogen and Vegard Wollan... AlfVegardRisk. Ya saben Reduced Instruction Set Computer es lo de RISC.
Paso 2
Bajen el compilador de AVR, el AVR Studio.
http://www.atmel.com/dyn/products/tools.asp?family_id=607
Si el link cambia sólo busquen el AVR Studio más reciente en la página de ATMEL.
Paso 3
Para que sepan de que estamos hablando, bajen la hoja de características del AT90S1200.
http://www.atmel.com/dyn/resources/prod_documents/DOC0838.PDF
Sería bueno que imprimieran las páginas del set de instrucciones, del espacio de I/O y del sumario de bits de registros.
Paso 4
Bajen un generador de subrutinas de tiempo para AVR
(Descarga)
Por ahora sólo daré una explicación básica del 1200.
Compararé al ATMEL AT90S1200, que es un AVR muy popular y al MICROCHIP PIC16F84... se puede decir que son los ejemplos básicos de comparación.
No. de instrucciones
AVR: 89 PIC: 35
Registros
AVR: 32 registros PIC: 68 RAM
Velocidad
AVR: 12MIPS (12MHz) PIC: 20MHz en donde c/inst. toma 4 ciclos de reloj en promedio
Memoria de programa
AVR: 1kByte FLASH (512 líneas de programa, 16bits por inst.) PIC:1kx14
EEPROM
AVR: 64B PIC: 64B
Salidas
AVR: 15 salidas PIC: 13 salidas
TIMER
AVR: 1 de 8bit (preescala desde CK hasta CK/1024) PIC: 1 de 8 bit (preescala desde 1:2 hasta 1:256)
Comparador analógico (NO convertidor analógico)
AVR: 1 PIC: NO
Watchdog
Ambos
Oscilador interno
Ambos, en el AVR sólo habilitable con programación paralela
Niveles de pila (STACK)
AVR: 3 PIC: 8
Interrupciones
AVR: reset, int. externa, timer y por comparador analógico PIC: sólo me acuerdo de que son 5 jeje
Antes de empezar les explico algo básico... en los AVR se tienen 3 registros para cada puerto de salida:
DDRB - Sirve para decir que patitas son de entrada o salida, 0 es entrada, 1 es salida, es inverso a los pics
PINB - Registro que sirve para entradas nadamás
PORTB - Registro que sirve de salidas nadamás
Es decir si leen, váyanse con PINB; si escriben váyanse a PORTB.
Las terminales del AVR AT90S1200 son:

El PortB tiene 8 bits de datos, a diferencia del PORTD que tiene sólo 7. El bit 7 del PORTD no sirve ; PORTD también consta de 3 registros: DDRD, PORTD y PIND.
Programa de salidas en puerto B
Ahora el programa sólo será un ejemplo de cómo declarar salidas en puerto B, cada segundo se incrementa un conteo binario en portb.
------------------------------------------------------
.include "1200def.inc" ;librería de definiciones de registros y demás cosas
ser r16 ;SER pone a uno todos los bits del Registro 16
out ddrb,r16 ;saca R16 a DDRB, los 1 son salidas, los 0 son entradas
; que es contrario a los PIC, todo B es salida
clr r16 ;pone a ceros todo r16
ciclo: inc r16 ; r16 ++
out portb,r16 ;pone r16 en portb, es decir en patitas del avr
rcall retardo ;llama subrutina de 1 segundo
rjmp ciclo ;salto incondicional a ciclo
; =============================
; delay loop generator
; 4000000 cycles: es decir 1 segundo con xtal de 4MHz
; -----------------------------
; delaying 3999996 cycles:
retardo: ldi R17, $24
WGLOOP0: ldi R18, $BC
WGLOOP1: ldi R19, $C4
WGLOOP2: dec R19
brne WGLOOP2
dec R18
brne WGLOOP1
dec R17
brne WGLOOP0
; -----------------------------
; delaying 3 cycles:
ldi R17, $01
WGLOOP3: dec R17
brne WGLOOP3
; -----------------------------
; delaying 1 cycle:
ret
; =============================
--------------------------------------------------------------------------------
