Witam. Prosze o pomoc poniewaz napisalem prosty program z wykorzystaniem przerwania z INT1 ale niestety procesor nie reaguje na zmiane stanu na wyjsciu PD3. Mam atmege16 na plytce testowej. W programie chodzi o to zeby po odebraniu przerwania na wyswietlaczu pojawila sie wartosc licznika Timer1. Timer1 ma pokazywac czas pomiedzy dwoma impulsami. To jest program.Prosze o pomoc poniewaz nie wiem juz co moglem opuscic.
$crystal = 16000000 'zastosuj kwarc 16 MHz.
Config Lcd = 16 * 2 'konfiguruj wyświetlacz Lcd.
Config Pind.3 = Input ' ustawienie pd3 jako wejscie
Reset Portd.3
Dim W As Word 'zmienna do odczytu stanu timer1
Dim A As Bit 'zmienna sluzace do okreslenia czy timer1 byl wczesniej wyzerowany
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
Cls 'czyść wyświetlacz.
Cursor Off ' wyłącz kursor.
Config Int1 = Falling ' przerwanie bedzie reagowalo na zbcoze opadajace
Config Timer1 = Timer , Prescale = 64 ' timer1 jako czasomierz z preskalerem 64
Lcd "witam"
Enable Interrupts 'Zgoda na wszystkie odblokowania.
Enable Int1 ' zgoda na przerwanie pochodzace od pd.3 (int1)
On Int1 Obr ' przy przerwaniu idz do
A = 0 ' na pcozatku musi wyzerowac timer1
Do 'nieskończona pętla
Loop
End
Obr:
If A = 0 Then
Timer1 = 0 'ustawia timer1 na 0
A = 1
Home
Lcd "1"
Else
' laduje wartosc timer1 do W
W = Timer1
A = 0
Home
Lcd W ; "imp"
End If
Return
$crystal = 16000000 'zastosuj kwarc 16 MHz.
Config Lcd = 16 * 2 'konfiguruj wyświetlacz Lcd.
Config Pind.3 = Input ' ustawienie pd3 jako wejscie
Reset Portd.3
Dim W As Word 'zmienna do odczytu stanu timer1
Dim A As Bit 'zmienna sluzace do okreslenia czy timer1 byl wczesniej wyzerowany
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
Cls 'czyść wyświetlacz.
Cursor Off ' wyłącz kursor.
Config Int1 = Falling ' przerwanie bedzie reagowalo na zbcoze opadajace
Config Timer1 = Timer , Prescale = 64 ' timer1 jako czasomierz z preskalerem 64
Lcd "witam"
Enable Interrupts 'Zgoda na wszystkie odblokowania.
Enable Int1 ' zgoda na przerwanie pochodzace od pd.3 (int1)
On Int1 Obr ' przy przerwaniu idz do
A = 0 ' na pcozatku musi wyzerowac timer1
Do 'nieskończona pętla
Loop
End
Obr:
If A = 0 Then
Timer1 = 0 'ustawia timer1 na 0
A = 1
Home
Lcd "1"
Else
' laduje wartosc timer1 do W
W = Timer1
A = 0
Home
Lcd W ; "imp"
End If
Return