Departament de Microelectrònica i Sistemes Electrònics
AVR i FONAMENTS DE COMPUTADORS
Enginyeria en Informàtica (ETSE)
exemple d'ús amb interrupcions externes
El microcontrolador ATmega8 disposa de dues interrupcions externes: INT0 pel PORTD.2 i INT1 pel PORTD.3. Les interrupcions s'activen segons programació en el port corresponent. També es poden emprar per generar interrupcions per software sobre els pins corresponents.
El programa és un exemple que treballa amb INT1 i INT0. INT1 s'activa per flanc de baixada, metre que INT0 ho fa per flanc de pujada. La rutina de servei de la interrupció INT0 activa el PORTD.0 mentre que la de INT1 el desactiva, fet que es pot comprovar posant un led en aquest port.
Com sempre, pràcticament la major part de la feina està en programar correctament els registres.
.INCLUDE "m8def.inc"
.DEF srri = R10
.DEF temp = R16
.ORG 0x0
rjmp inici
.ORG 0x1
rjmp int_ext0
.ORG 0x2
rjmp int_ext1
inici:
ldi YH, HIGH(RAMEND)
ldi YL, LOW(RAMEND)
out SPH, YH
out SPL, YL
ldi temp, (1<<ISC11)|(1<<ISC01)|(1<<ISC00)
out MCUCR, temp
ldi temp, (1<<INT1)|(1<<INT0)
out GICR, temp
sei
sbi DDRD, 0
main: nop
rjmp main
int_ext0:
sbi PORTD, 0
reti
int_ext1:
cbi PORTD, 0
reti
; APLICACIÓ AMB INT'S EXTERNES
; Joan Oliver
; Universitat Autònoma de Barcelona
;
; es programa int'externa1 per baixada i int'externa0 per pujada
; int'externa1 activa PORTD.0 i int'externa0 el desactiva
; registre guarda de status
; registre temporal
; vector d'inici del programa
; vector int'ext0
; vector int'ext1
;-------INICI---------------------------------------------------------
inici:
; inicialització stack
int'ext1(PD3)_baixada'ext0(PD2)_pujada
; habilitació int'ext'0'1
; habilització bit I general d'interrupcions
; posar PORTD.0 com a sortida
;-------PROGRAMA PRINCIPAL--------------------------------------------
;-------INT'EXT0 -----------------------------------------------------
; activació PORT0
;-------INT'EXT1 -----------------------------------------------------
; desactivació PORT0