Witam
Mam niezrozumiały dla mnie problem z przerwaniami. Do tej pory ich nie używałem ale że rozwijać się trzeba pora i na nie. A więc mam kod jak poniżej (nie wklejam całego bo symulator nawet dalej nie dochodzi) i w momencie odblokowania przerwań "sei" a dokładniej w linijce
nie wiem czemu przeskakuje do 8 od dołu "reti" po czym dochodzi do pętli głównej i co drugi krok wraca do tego nieszczęsnego "reti". Nie mówiąc już o tym że nie reaguje na przerwania na które powinien :/
Ktoś mi to może wytłumaczy?
Będę wdzięczny za pomoc i dobre rady.
Proszę uściślić temat.
Robak
Mam niezrozumiały dla mnie problem z przerwaniami. Do tej pory ich nie używałem ale że rozwijać się trzeba pora i na nie. A więc mam kod jak poniżej (nie wklejam całego bo symulator nawet dalej nie dochodzi) i w momencie odblokowania przerwań "sei" a dokładniej w linijce
ldi r17,0nie wiem czemu przeskakuje do 8 od dołu "reti" po czym dochodzi do pętli głównej i co drugi krok wraca do tego nieszczęsnego "reti". Nie mówiąc już o tym że nie reaguje na przerwania na które powinien :/
.include "m16def.inc"
.equ granica = 10 ; wartosc graniczna dla timera
.cseg
.org 0x00
rjmp reset
rjmp ext_int0
reti
reti
reti
reti
rjmp timer_po37ms
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reset:
cli ;wyłączenie zezwolenia na przerwania
;wskaznik stosu na koncu ramu
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,low(RAMEND)
out SPL,r16
; porty
ldi r16,0b11111111 ; same wyjscia
out DDRB, r16
ldi r16,0b11111111
out PORTB,r16
ldi r16,0b10000000 ; same wejscia
out DDRD, r16
ldi r16,0b00000000
out PORTD,r16
;konfiguracja przerwania od wejscia zewnętrznego
ldi r16,0b01000000
out gicr,r16
ldi r16,0b00000010
out mcucr,r16
; konfiguracja przerwania związanego z timerem
ldi r16,0 ; ustawienie pracy timera bez trybu PWM oraz wyzerowanie go
out tccr1a,r16
out tcnt1h,r16
out tcnt1l,r16
ldi r16,0b00001001 ; ustawienie trybu CTC itp.
out tccr1b,r16
ldi r16,high(granica) ; załadowanie żądanego czasu resetu timera (37ms)
out ocr1ah,r16
ldi r16,low(granica)
out ocr1al,r16
ldi r16,0b00010000 ; ustawienie typu przerwania
out timsk,r16
sei ; zezwolenie na przerwania
ldi r17,0
ldi r18,0
;==================================================
; PĘTLA GŁÓWNA
;==================================================
petla:
out PORTB,r19
rjmp petla
Ktoś mi to może wytłumaczy?
Będę wdzięczny za pomoc i dobre rady.
Proszę uściślić temat.
Robak