;**********************************************************************
;***** PROGRAMA QUE CUENTA DE 1 A F UNA VEZ *****
;**********************************************************************
.include"m32def.inc"
.def temp= r16
.def incr= r17
;***** TABLA DE VECTORES DE INTERRUPCION *****
.org $000 ;selección de dirección para esta inetrrupcion
rjmp RESET ;manjo de interrupción 1=RESET
.org $004
rjmp INT_1 ;manejo de interrupción 3=INT1
RESET:
ldi temp, low(RAMEND)
out SPL, temp
ldi temp, high(RAMEND)
out SPH, temp ;se configura al stack-pointer para subrutina e interrupciones
clr temp
out DDRD, temp
ser temp
out DDRB, temp
out PORTD, temp
ldi temp, 0b10000000
out GICR, temp ;se crea la mascara para interrupción externa
ldi temp, 0b00001000
out MCUCR, temp ;la interrupción se genera en el flanco positivo
sei ;habilitación del bit I en SREG
rjmp INICIO
;***** S U B R U T I N A S *****
SUBRUTINA:
; 2000000 cycles:
; -----------------------------
; delaying 1999998 cycles:
ldi R17, $12
WGLOOP0: ldi R18, $BC
WGLOOP1: ldi R19, $C4
WGLOOP2: dec R19
brne WGLOOP2
dec R18
brne WGLOOP1
dec R17
brne WGLOOP0
; -----------------------------
; delaying 2 cycles:
nop
nop
ret
; =============================
;***** INTERRUPCIONES *****
INT_1:
dec incr
rcall SUBRUTINA
out PORTB, incr
cpi incr, 0
breq fin
brne INT_1
fin:
reti
;***** P R O G R A M A P R I N C I P A L *****
INICIO:
inc incr
rcall SUBRUTINA
out PORTB, incr
cpi incr, 15
breq fina
brne INICIO
fina:
rjmp fina
martes, 7 de octubre de 2008
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario