AVR - przerwania??

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".

Reply to
Szczepan
Loading thread data ...

Pewnego dnia Szczepan przemówił ludzkim głosem:

Zapomniałeś stos zainicjować.

Reply to
Zbych
Reply to
invalid unparseable

Dnia Fri, 04 Feb 2005 01:00:32 +0100, Zbych napisał(a):

No tak, teraz działa. :]

Reply to
Szczepan

Dnia Fri, 4 Feb 2005 01:03:19 +0100, Tomasz Gumny napisał(a):

Poeta miał na myśli dokładnie to co napisał - chciał sie pobawić.

A skąd się taki "dobry zwyczaj" bierze? Bo z moich obserwacji w AVRStudio ta flaga zawsze jest kasowane w momencie wystąpienia przerwania. Niewidziałem potrzeby dubowania tego.

Reply to
Szczepan
Reply to
invalid unparseable

Dnia Fri, 4 Feb 2005 13:37:59 +0100, Tomasz Gumny napisał(a):

Teraz widzę swój błąd. Wkleiłem nie tem kod co trzeba. Miało być: ldi tmp,0b01100100 out tcnt0,tmp

Takie są początki w asm ;-)

Teraz rozumiem Twoją uwagę.

Reply to
Szczepan

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.