Witam.
Chciałem wykorzystać w Atmedze 128 Timer1 do wykonania zegara zliczającego sekundy. W tym celu ustawiłem go w trybie CTC i po zliczeniu do 62500 (taką wartość wpisuje do OCR1A] powinno nastąpić przerwanie. Nie wiem czemu tak się nie dzieje.
Atmega taktowana jest kwarcem 16MHz. W układzie cały czas aktywne jest globalne zezwolenie na przerwania [znacznik I w SREG].
Moje pytanie brzmi: Dlaczego to nie działa?
Chciałem wykorzystać w Atmedze 128 Timer1 do wykonania zegara zliczającego sekundy. W tym celu ustawiłem go w trybie CTC i po zliczeniu do 62500 (taką wartość wpisuje do OCR1A] powinno nastąpić przerwanie. Nie wiem czemu tak się nie dzieje.
Atmega taktowana jest kwarcem 16MHz. W układzie cały czas aktywne jest globalne zezwolenie na przerwania [znacznik I w SREG].
.CSEG
.ORG $000 RJMP RESET
.ORG $018 RJMP DATA
...
KONFIGURACJA_TIMER1:
push r16
in r16,SREG
push r16
ldi r16,high(62500)
out OCR1AH,r16
ldi r16,low(62500) ;ustaw przerwanie po czasie 1s
out OCR1AL,r16 ;dla częstotliwości 16MHz
in r16,TIMSK
ldi r16,(1<<OCIE1A)
out TIMSK,r16 ;ustaw przerwanie porownania OCIE1A
in r16,TCCR1B
ldi r16,(1<<CS12)|(0<<CS11)|(0<<CS10)|(1<<WGM12)
out TCCR1B,r16 ;ustaw tryb pracy licznika na CTC
;ustaw prescaler licznika na 256
;uruchom licznik
pop r16
out SREG,r16
pop r16
reti
DATA:
w tej procedurze Atmega128 ma zgasić diodę. Ogólnie później zmienię jej przeznaczenie, natomiast narazie widzę dzięki temu czy układ działa poprawnie.
reti
Moje pytanie brzmi: Dlaczego to nie działa?