logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

atmega88 Przerwanie: Timer1 Overflow

yahuza 15 Maj 2011 22:35 1770 2
REKLAMA
  • #1 9510434
    yahuza
    Poziom 11  
    Witam,

    Mam Atmege88 i chciałem spróbować napisać obsługę przerwania wew. zegara 16bitowego.
    Korzystając z książki, która traktuje o atmedze8 i dokumentacji do atmegi88 udało mi się napisać taki oto mnw. kod:
    
    #include<avr/io.h>
    #include<avr/interrupt.h>
    //(...)
    ISR(TIMER1_OVF_vect)
    {
       // moj kod przerwania
    }
    
    ISR(BADISR_vect)
    {}
    
    int main()
    {
    //(...)
    	//timmer1
    	TCCR1B = _BV(CS10); // brak preskallera, inkrementacja co cykl proc, (16bit rejestr) 
    	TIMSK0 = _BV(TOIE1);
            //TIMSK1 = _BV(TOIE1); // to tez probowałem
    
    while(true)
    //(...) itd.
    


    Niestety przerwanie jakby nienastępuje. Debugowałem kod w AVRStudio, ustawiłem BreakPoint wewnątrz funkcji przerwania i nigdy kod programu do niego nie dociera. Już dłuższy czas się nad tym głowie. Byłbym rad gdyby ktoś podzielił się wiadomością na temat przyczyny braku chęci współpracy uC ze mną.

    Z góry dziękuję

    Jacek
  • REKLAMA
  • Pomocny post
    #2 9510455
    hotdog
    Poziom 26  
    brakuje instrukcji sei();

    włącza ona globalną obsługę przerwań. Umieść ją zaraz przed pętlą while(true)

    Dodano po 5 [minuty]:

    a poprawnie jest
    TIMSK1 = _BV(TOIE1);
  • #3 9515543
    yahuza
    Poziom 11  
    Dziękuję, oczywiście pomogło. : )
REKLAMA