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ęobsluga getrc5 z przerwania
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
czy ktos wie dlaczego w bascomieAVR nie dziala polecenie getrc5 jesli zostanie wywolane z procedury obslugi przerwania ? i czy da sie cos zrobic zeby dzialalo (umieszczanie getrc5 w glownej petli programu odpada, bo to strasznie spowalania caly program)
pozdrawiam
karol
pozdrawiam
karol
calosc wyglada tak:
po kilku zmianach dziala
ale mam jeszcze pytanie: czemu po wcisnieciu przycisku na pilocie procedura obslugi int0 wykonywana jest dwukrotnie ? niby to juz nie ma wiekszego znaczenia, ale jednak mnie to gryzie
dzieki bardzo i pozdrawiam
karol
$lib "mcsbyte.lbx"
Config Rc5 = Pind.2
Stop Watchdog
Enable Interrupts
Enable Int0
On Int0 Odbierz
Config Int0 = Falling
Dim Adres As Byte
Dim Komenda As Byte
Dim Licznik As Byte
Dim Licznik2 As Byte
Dim Nowy As Bit
Cls
Do
Locate 1 , 10
Lcd Licznik2
If Nowy = 1 Then
Nowy = 0
Locate 2 , 1
Lcd Adres ; " " ; Komenda
If Adres = 0 Then
If Komenda = 1 Then Incr Licznik
If Komenda = 2 Then Decr Licznik
Home
Lcd Licznik
End If
Enable Interrupts
Enable Int0
End If
Loop
Odbierz:
Disable Int0
Enable Interrupts
Incr Licznik2
Nowy = 1
Getrc5(adres , Komenda)
Komenda = Komenda And &B00111111
Disable Interrupts
Return
po kilku zmianach dziala
ale mam jeszcze pytanie: czemu po wcisnieciu przycisku na pilocie procedura obslugi int0 wykonywana jest dwukrotnie ? niby to juz nie ma wiekszego znaczenia, ale jednak mnie to gryzie
dzieki bardzo i pozdrawiam
karol
$lib "mcsbyte.lbx"
Config Rc5 = Pind.2
Stop Watchdog
Enable Interrupts
Enable Int0
On Int0 Odbierz
Config Int0 = Falling
Dim Adres As Byte
Dim Komenda As Byte
Dim Licznik As Byte
Dim Licznik2 As Byte
Dim Nowy As Bit
Cls
Do
Locate 1 , 10
Lcd Licznik2
If Nowy = 1 Then
Nowy = 0
Locate 2 , 1
Lcd Adres ; " " ; Komenda
If Adres = 0 Then
If Komenda = 1 Then Incr Licznik
If Komenda = 2 Then Decr Licznik
Home
Lcd Licznik
End If
Enable Interrupts
Enable Int0
End If
Loop
Odbierz:
Disable Int0
Enable Interrupts
Incr Licznik2
Nowy = 1
Getrc5(adres , Komenda)
Komenda = Komenda And &B00111111
Disable Interrupts
Return
a to akurat nie ma znaczenia bo w standardzie rc5 kody sa do 63. no chyba ze w celu eliminacji ewentualnych przeklaman, kiedy to na 6. bicie pojawia sie jakies bzdury. ale w tym przypadku chodzilo mi jedynie o sprawdzenie samej idei obslugi getrc5 przy wystapieniu przerwania na int0.
pozdrawiam, karol
pozdrawiam, karol
Oto moja sprawdzona idea: Do
If Odebr_kod = 1 Then
Cls
Lcd "Adres: " ; Address Lowerline
Lcd "Komenda:" ; Command
Reset Odebr_kod
Enable Int0
End If
Loop
End
Pobr_rc5:
Disable Int0
Enable Interrupts
Getrc5(address , Command)
Command = Command And &B01111111 Set Odebr_kod Return Przy czym przerwanie mam wywolywane poziomem, a nie zboczem.
If Odebr_kod = 1 Then
Cls
Lcd "Adres: " ; Address Lowerline
Lcd "Komenda:" ; Command
Reset Odebr_kod
Enable Int0
End If
Loop
End
Pobr_rc5:
Disable Int0
Enable Interrupts
Getrc5(address , Command)
Command = Command And &B01111111 Set Odebr_kod Return Przy czym przerwanie mam wywolywane poziomem, a nie zboczem.
przerwanie int0 jest wykonywane dwukrotnie, po nacisnieciu przycisku pilota, ponieważ dane kodu Rc5 sa zawsze przesyłane przynajmniej dwukrotnie, jezeli trzymamy przycisk to oczywiscie wiecej. informacja o tym, że trzymamy przycisk jest zawarta w najstarszym bicie komendy(czyli w tym przypadku w zmiennej command) - jest on po prostu zmieniany na przeciwny w kazdej kolejnej paczce impulsów.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 45 gości