Cześć, działam sobie nad zadaniem: program Timer1 działa w trybie porównania( CTC). Licznik T/C1 taktowany jest wewnętrznym sygnałem zegarowym. Wpisz odpowiednią wartość do rejestru OCR1A. Licznik zlicza od 0 do odpowiedniej wartości i po jej osiągnięciu generuje przerwanie. Proszę ustawić preskaler. Dioda podłączona do PA.7 mruga w takt licznika co 1s.
I to co mam do tej pory:
.include "m32def.inc"
.org $0000
rjmp RESET
.org OC0ADDR
rjmp TIM1_COMPA ; przerwanie od porownania timera/licznika0
;-----------------------
.def TIME=r16
.def TEMP=r17
.def LED=r18
;-----------------------
RESET:
ldi TEMP, low(RAMEND) ; ustawienie wskaznika stosu na koniec RAM
out SPL, TEMP
ldi TEMP, high(RAMEND)
out SPH, TEMP
;-----------------------
ser TEMP ; ustawienie TEMP na "11111111"
out DDRA, TEMP ; ustawienie kierunku wyjsciowego DDRA
out PORTA, TEMP ; wygaszenie diod "11111111"
ldi TEMP, (1<OCIE1A) ; przerwanie Compare Match A
out TIMSK, TEMP
ldi TEMP, $0C
out TCCR1B, TEMP
;-------- test -------
;---------------------
ldi TIME, 250
out OCIE1A, TIME
ldi TEMP, 0
sei
MAIN_LOOP: rjmp MAIN_LOOP
TIM1_COMPA:
inc TEMP
cpi TEMP, 125
brne PAUSE
ldi TEMP, 0
com LED
ori LED, $7F
out PORTA, LED
PAUSE:
reti
I o ile się kompiluje to nie działa prawidłowo, dioda nie mruga. Czy ktoś widzi czego tutaj może brakować? Testuję to na AVR Studio 4 emulator.