Perdóname por mi inglés. Soy un programa para principiantes en lenguaje ensamblador con atmel studio 7. Intento borrar el led en el puerto c cada 500 ms con atmega8.En la simulación, No veo la ejecución del desbordamiento del tiempo. ¿Dónde está mi error?
---
.DEF mp = R16
.DEF mp1 = R17
.DEF vard = R18
;Registers
RJMP RESET RETI
RETI
RETI
RETI
RJMP TIM0_OVF
RETI
RETI
RETI
RESET:
LDI mp,0x04
OUT SPH,mp
LDI mp,0x5F
OUT SPL,mp
;Stack initialization
LDI mp,0x01
OUT DDRC,mp
LDI mp,0x00
OUT PORTC,mp
;Choose a port c as output
LDI mp,0b00000101
OUT TCCR0,mp
;Prescaler Fclk/1024
LDI mp,246
OUT TCNT0,mp
LDI mp,0b00000001
OUT TIMSK,mp
;Timer/counter0
LDI vard,50
;variable vard to count (50*10*1.024ms=500ms)
SEI
; Interrupción de activación para SREG
MAIN_LOOP:
CPI vard, 0
BRNE NEXT01
; si estoy aquí, esto significa que se pasan 500 ms
LDI vard, 50
; inicialización de vard IN mp, PINC
; leer el puerto c LDI mp1,0b00000001
EOR mp, mp1 ; complemente para el puerto c
OUT PORTC, mp
SIGUIENTE01:
; Si no se pasan 500 ms, continúo verificando con el bucle principal
RJMP MAIN_LOOP
TIM0_OVF:
IN mp,SREG PUSH mp
; En caso de desbordamiento, Imust guarda los datos de SREG en la pila
DEC vard
; Decrement vard
LDI mp,246 OUT TCNT0,mp
; Initializate TCNT0
POP mp OUT SREG,mp RETI