Mam problem z obsługą pilota RC5 w przerwaniu - działa odbiór pojedynczej komendy.
Chciałbym wprowadzać za pomocą pilota kody wielocyfrowe - kolejne komendy potrzebuje zapisać np. do zmiennej tablicowej.
To, co próbowałem napisać działa nie tak jak potrzebuję - nie chcę, aby np. przytrzymanie przycisku 1 powodowało wprowadzenie np. dwóch kolejnych 1 (potrzebuję, aby wprowadzenie dwóch 1 wymagało dwukrotnego naciśnięcia przycisku).
Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięBascom AVR i RC5
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
Trochę poeksperymentowałem i powstało coś takiego
Miał to być "program" do przećwiczenia wprowadzania za pomocą pilota komendy dwu cyfrowej, jednak nie działa on stabilnie (można powiedzieć, ze raz działa a raz nie) i juz sie trochę zapętliłem. Może ktoś chłodnym okiem wyłapie, co jest nie tak (tak właściwie to jest moje pierwsze podejście do obsługi przerwań zewnętrznych).
Kod: Zaznacz cały
$crystal = 16000000
$regfile = "m16def.dat"
Config Rc5 = Pind.3
'konfiguracja wyświetlacza
Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7 'konfiguracja linii
Config Int1 = Low Level
On Int1 Pobr_rc5
'deklaracja procedur
Declare Sub Keyscan
Declare Sub Odczytkomendy
'deklaracja zmiennych
Dim Komenda(2) As Byte
Dim Key As Byte
Dim Licznik As Byte
Dim Wylocznik As Integer
'zmienne do odczytu kodu RC5
Dim Address As Byte
Dim Command As Byte
Dim Flagarc5 As Bit
Enable Interrupts
Enable Int1
Cls
Flagarc5 = 0
Wylocznik = 0
Cursor Off
'PROGRAM GŁÓWNY
Do
Enable Int1
Call Odczytkomendy
Loop
End
Pobr_rc5: 'obsługa przerwania INT0
Disable Int1
Enable Interrupts
Getrc5(address , Command)
Command = Command And &B01111111
If Command < 127 And Flagarc5 = 0 Then
Flagarc5 = 1
End If
Return
Sub Keyscan
If Command < 127 And Flagarc5 = 1 Then
Key = Command
Flagarc5 = 0
End If
End Sub
Sub Odczytkomendy 'odczyt 2 znaków z pilota
Licznik = 1
Locate 1 , 1
Lcd "COMMAND :"
Do
Enable Int1
Call Keyscan
Disable Int1
If Key < 127 And Flagarc5 = 1 Then
Komenda(licznik) = Key
If Licznik = 1 Then
Locate 1 , 11
Lcd Komenda(licznik)
Wylocznik = Komenda(1) * 10
End If
If Licznik = 2 Then
Locate 1 , 12
Lcd Komenda(licznik)
Wylocznik = Wylocznik + Komenda(2)
End If
Incr Licznik
End If
If Key = 107 Then 'kod ENTER
Licznik = 1
Locate 1 , 11
Lcd " "
Locate 4 , 1
Lcd Wylocznik
Exit Do
End If
Loop
End Sub
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 27 gości