witam mam problem z wywolaniem przerwania od timer1 - od zdarzenia typu CTC, program ma wygrywac melodyjke na buzzerku, przerwanie od timer0 smiga - jest odpowiedzialne za generowanie sygnalu na wyjsciu OC0, a timer1 ma zmieniac nutki - podmieciac liczbe w OCR0 liczba z tablicy melodia... ale nie zmienia i nie moge znalezc przyczyny :/ wydaje mi sie ze wogle nie jest wywolywane przerwanie od timer1
.include "m32def.inc"
rjmp init ;inicjalizacja
.org OC1Aaddr ;przerwanie od timer1
rjmp int_T1
init:
ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi Zh,high(melodia<<1)
ldi Zl,low(melodia<<1)
ldi r18,1
ldi r16,0 ;timer0 inicjalizacja
out TCCR0,r16 ;tryb Clear Timer on Compare Match
sbi DDRB,DDB3 ;zmienia stan na wyjsciu OC0
lpm r16,Z+ ;gdy zliczy do wart wpisanej do OCR0
out OCR0,r16
ldi r16,0b00011011
out TCCR0,r16
ldi r16,0 ;timer1 inicjalizacja
out TCCR1A,r16
out TCCR1B,r16
ldi r17,high(256)
ldi r16,low(256)
sts OCR1AH,r17
sts OCR1AL,r16
ldi r17,0
ldi r16,0b00001101
sts TCCR1A,r17
sts TCCR1B,r16
ldi r16,0b00010000
sts TIMSK,r16
sei
main:
rjmp main
;------------------------------------------------------------------------------
int_T1:
lpm r16,Z+ ;wpisanie wysokosci nuty
out OCR0,r16
cpse r16,r18 ;jesli koniec melodyjki pomiń reti
reti
ldi Zh,high(melodia<<1) ;i wroc do poczatku tablicy
ldi Zl,low(melodia<<1)
reti
;------------------------------------------------------------------------------------------------
melodia:
.db 30,90,120,29,0,26,0,26,0,26,26,0,26,26,26,26,0,29,29,0,29,29,0,29,29,0,29,29,0,25,0,
25,0,25,25,0,25,25,25,25,0,26,26,0,26,26,0,26,26,0,29,29,0,26,0,26,0,26,26,0,26,26,
26,26,0,29,29,0,29,29,0,29,29,0,1
;------------------------------------------------------------------------------------------------