Witam!
Uczę się Bascoma i postanowiłem napisać "stoper" sterowany z pilota (pilot nadaje w standardzie rc5). Najpierw napisałem pętlę odpowiadającą za ustawienie stopera za pomocą pilota. Zrobiłem to za pomocą przerwania INT0. Wszystko działało jak należy. Problem się zaczął jak skonfigurowałem timer0 do pracy jako timer. Program przestał reagować na pilota, na lcd pojawiły się jakieś dziwne liczby. Nie wiem z czego może to wynikać. Dołączam kod, proszę o pomoc
Uczę się Bascoma i postanowiłem napisać "stoper" sterowany z pilota (pilot nadaje w standardzie rc5). Najpierw napisałem pętlę odpowiadającą za ustawienie stopera za pomocą pilota. Zrobiłem to za pomocą przerwania INT0. Wszystko działało jak należy. Problem się zaczął jak skonfigurowałem timer0 do pracy jako timer. Program przestał reagować na pilota, na lcd pojawiły się jakieś dziwne liczby. Nie wiem z czego może to wynikać. Dołączam kod, proszę o pomoc
$regfile = "m32def.dat"
$crystal = 16000000
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
Config Lcd = 16 * 2
Config Timer0 = Timer , Prescale = 256
Config Int0 = Low Level
Config Rc5 = Pind.2
Config Portd.2 = Input
Portd.2 = 1
Config Portb.1 = Output
Set Portb.1
On Int0 Pobr_rc5
Dim Address As Byte , Command As Byte , I As Byte
Dim S As Integer , M As Integer
Dim Sm As Bit , Odliczanie As Bit
Dim Odeb_kod As Bit , Start_odm As Bit
Enable Interrupts
Enable Int0
Enable Timer0
Reset Odeb_kod
Reset Start_odm
Reset Odliczanie
Cls
Cursor Off
Sm = 0 '0 to minuty, 1 to sekundy
S = 0
M = 0
I = 0
Do ' w tej pętli nastawiany jest, za pomocą pilota, czas do odmierzenia
If Sm = 0 Then
Locate 1 , 1
If Sm = 1 Then
Locate 1 , 4
End If
End If
If Odeb_kod = 1 Then
Select Case Command
Case 80:
If Sm = 0 Then
Incr M
End If
If Sm = 1 Then
Incr S
End If
Case 82:
If Sm = 0 Then
Decr M
End If
If Sm = 1 Then
Decr S
End If
Case 86:
Toggle Sm
Case 60:
Odliczanie = 1
End Select
Reset Odeb_kod
Cls
End If
If M < 10 Then
Locate 2 , 6
Lcd "0" ; M
End If
If M >= 10 Then
Locate 2 , 6
Lcd M
End If
Locate 2 , 8
Lcd ":"
If S < 10 Then
Locate 2 , 9
Lcd "0" ; S
End If
If S >= 10 Then
Locate 2 , 9
Lcd S
End If
If Sm = 0 Then
Locate 1 , 4
Lcd "Ile minut?"
End If
If Sm = 1 Then
Locate 1 , 3
Lcd "Ile sekund?"
End If
Loop Until Odliczanie = 1
Disable Int0 ' wyłączam przerwanie zewnętrzne int0, żeby nie było reakcji na pilota
On Timer0 Odmierz_1s ' włączam timer żeby zacząć odliczanie
Load Timer0 = 250
Do ' pętla wyświetlająca odliczanie
Locate 1 , 3
Lcd "Odliczanie..."
If M < 10 Then
Locate 2 , 6
Lcd "0" ; M
End If
If M >= 10 Then
Locate 2 , 6
Lcd M
End If
Locate 2 , 8
Lcd ":"
If S < 10 Then
Locate 2 , 9
Lcd "0" ; S
End If
If S >= 10 Then
Locate 2 , 9
Lcd S
End If
Loop Until M = 0 And S = 0
Cls
Lcd "koniec"
End 'end program
Odmierz_1s:
Load Timer0 = 250
Incr I
If I = 250 Then
I = 0
S = S - 1
If S < 0 Then
S = 59
M = M - 1
If M < 0 Then
M = 0
S = 0
End If
End If
End If
Cls
Return
Pobr_rc5:
Disable Int0
Enable Interrupts
Getrc5(address , Command)
Command = Command And &B01111111
Set Odeb_kod
Enable Int0
Return