Witam!
Problem tego typu, że po przepełnieniu licznika (T0 lub T1) procesor resetuje się zamiast wykonać instrukcje umieszczone w swojej funkcji. Przerwania od przetwornika ADC działają poprawnie. Oto kawałek programu:
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
INTERRUPT (SIG_OVERFLOW0) { cbi(TIFR,TOV0); cli(); /* + pare prostych instrukcji */ sei(); }
void Timer0Init() { TCNT0=0; //wartość początkowa timera TCCR0=4; //preskaler CK/256 sbi(TIMSK, TOIE0); // zezwolenie na przerw. od przepełnienia }
void main(void) //program główny { DDRB=0xF1; //konfiguraja portów DDRD=0xFF; DDRC=0xFF; PORTD=0xFF; PORTB=0xF1; PORTC=0x00; Timer1Init(); //inicjuje timer
while(1) { sei(); /* + pare prostych instrukcji bez większego znaczenia */ } } Nie ma znaczenia czy zadeklaruje INTERRUPT (SIG_OVERFLOW0) czy też SIGNAL (SIG_OVERFLOW0). Nie ma znaczenia czy w podprogramie przerwania znajdują się (lub nie) instrukcje: cbi(TIFR,TOV0);cli();sei; nie ma też znaczenia stopień preskalera. Reakcja zawsze ta sama: w momencie wystapienia przerwania-> reset procka. O czym zapomniałem? Co robie źle?
Pozdrawiam. dielektrykus