Tutoriales

Curso Básico AVR AT90S1200 - Página 1


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
; =============================

 
--------------------------------------------------------------------------------