przerwania na 51 - help...

Nov 01, 2004 3 Replies

Nie moge sobie poradzic z pomiarem szerokosci impulsu podawanego na wejscie T1... program chodzi na 2 przerwaniach: jedno od INT0 (wyzwalane zboczem opadajacym, sygnal prostokatny podawany na polacznone wejscia INT0 i T1) drugie zegarowe 50ms generowane z T0; przerwanie od INT0 wyglada nastepujaco:



void it_int0 (void ) interrupt 0 using 2 // Przerwanie INT0 { impulsy=TL1; impulsy=impulsy+256*TH1; TL1=0; TH1=0; }



gdy zawartosc licznika wyswietlam przy kazdym wywolaniu tego przerwania wszystko dziala bez zarzutu natomiast gdy chce to robic co 200ms w przerwaniu od T0:



void it_t0 (void ) interrupt 1 using 1 // Przerwanie od czasomierza (generowane 20 razy na sekunde) { TL0=0xaf; //wartosc odpowiadanaja 50ms przy zegarze 12MHz TH0=0x3c; cz_sek++; impulsy2=impulsy2+(impulsy/4); //srednia z 4 kolejnych odczytow T1 if (cz_sek==4) // wyswietlanie co 4 cykle przerwania { imp(); // funkcja wyswietlajaca wynik pomiaru cz_sek=0; impulsy2=0; }



wszystko jest dobrze, gdy dlugosc impulsu nie przekracza 1.5ms (15000 impulsow przy zegarze 12MHz). powyzej tej wartosc wynik zaczyna plywac tym bardziej im dluzszy jest impuls - przy 15000 jest to ok 500, przy 35000 nawet 5000



ma ktos pomysl jak to rozwiazac? probowalem zmieniac priorytety obu przerwan i nic sie nie zmienia...



pozdrawiam Artur



ps. w momencie wlaczenie drugiego przerwanie (zegarowego od T0) wynik pomiaru jest dwukrotnie wiekszy niz rzeczywista warto¶æ...

Witam. Coś mi się tu nie zgadzają Twoje obliczenia. Mamy Kwarc 12MHz czyli timery taktowane są częstotliwością 1MHz.Więc skoro T1 zliczył do 15000 to upłynęło 15000 uS inaczej 15ms a nie 1.5ms.Więc moja propozycja brzmi:Policz to jeszcze raz.

Pzdr. Piotrek Sz.

Użytkownik Piotrek Sz. napisał:

zdaje sie ze tu byl problem plywania wynikow przy wylaczonym T1, problem z dwukrotnie dluzszym liczenie Artur ma jak T1 jest wlaczony

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required