TIM0_OVF en atmel studio 7 no funciona

0

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

    
pregunta P. Paulin

2 respuestas

0

No hay comentarios ni nada? Bueno, una cosa es segura. No es TIMO sino TIM0 .. que significa Timer0 (como en cero, nulo).

Sin embargo, ASM es tan difícil de depurar e incluso más sin ningún comentario, así que probablemente esto no te ayude. Además, no veo ninguna configuración de los registros TCCR, así que, comente su código (y formatéelo según corresponda)

    
respondido por el Tom L.
0

Si busca en hoja de datos , página 46, Puede ver la lista de vectores de interrupción de su MCU. El vector de desbordamiento del temporizador 0 se encuentra en la dirección 0x09. Pero de acuerdo con el código que ha mostrado, su instrucción RJMP TIM0_OVF se encuentra en la dirección 0x05, que sería el objetivo de la interrupción TIMER1_CAPT . En realidad, la interrupción de timer0 está saltando directamente a la etiqueta RESET en su código.

Nota al margen: su código está poco "sucio" en algunos otros aspectos, pero nada de esto debe afectar solo a esta pieza que ha mostrado.

    
respondido por el Martin

Lea otras preguntas en las etiquetas