Napisałem oto coś takiego w asemblerku:
.INCLUDE "2313def.inc" .DEF tmp=r17
.org 0
rjmp RESET ;Reset reti ;External Interrupt 0 reti ;External Interrupt 1 reti ;T/C1 Capture Event reti ;T/C1 Compare Match reti ;T/C1 Overflow rjmp PRZEP ;T/C0 Overflow reti ;UART Rx Complete reti ;UART Data Register Empty reti ;UART Tx Complete reti ;Analog Comparator
;.CSEG
RESET: ldi tmp,0b00000010 out timsk,tmp sei ldi tmp,0b11111110 out tcnt0,tmp ldi tmp,0b00000001 out tccr0,tmp LOOP: nop rjmp LOOP
PRZEP: ldi tmp,0b01100100 out tccr0,tmp reti
I wszystko by było fajnie ale po przepełnieniu licznika T0 wchodzę w przerwanie ale po wykonaniu kodu zawartego w "PRZEP" reti nie powoduje mi powrotu do miejsca wystąpienia przerwania (pętli LOOP) tylko wykonywanie kodu zaczyna się od pierwszedo rozkazu (skocz do RESET). Co jest nie tak?? Testowane w AVRStudio i w "realu".