Zawarte tutaj procedury dotyczą obsługi odbiornika podczerwieni pracującego na częstotliwości 36KHz (np. układ TSOP1736) a konkretnie odbioru transmisji Rc5 nadawanej z pilota uniwersalnego lub dowolnego innego pracującego w omawianym standardzie.
Język Bascom 8051
Do poprawnej pracy z mikrokontrlerem (np. AT89C4051) wymagane jest odpowiednia konfiguracja przerwania zewnętrznego, tak aby reagowało na zbocze narastające. Do tego właśnie wejścia zostanie podłączony odbiornik podczerwieni:
Config Rc5 = P3.2
Reset Tcon.0 'reaguje na zbocze narastajace
On Int0 Odbierz_rc5
Odczyt będzie dokonywany w obsłudze przerwania zewnętrznego. Po każdym odebraniu kodu Rc5 zmienna bitowa Odebrano przyjmuje wartość 1. Traktując tą zmienną jako flagę bitową w głównej pętli programu możemy napisać procedurę wykonującą odpowiednie czynności zależne od odebranego adresu(0-31) i komendy(0-63):
Odbierz_rc5:
Getrc5(adres , Komenda)
Adres = Adres And &B00011111 'zerowanie bitu 5
Odebrano = 1
Return
Do poprawnej pracy wymagane jest zadeklarowanie na początku programu zmiennych używanych w powyższej procedurze:
Dim Odebrano As Bit
Dim Komenda As Byte , Adres As Byte
Poniżej znajduje się przykład programu odbierającego transmisję Rc5:
$crystal = 12000000 ’12MHz
$regfile = „89C4051.DAT”
Config Rc5 = P3.2
Reset Tcon.0 'reaguje na zbocze narastajace
On Int0 Odbierz_rc5
Enable Int0
Enable Interrupts
Dim Odebrano As Bit
Dim Komenda As Byte , Adres As Byte
Do
If Odebrano = 1 Then
Odebrano = 0
Disable Int0
'**********************************
'czynnosci wykonywane w zaleznosci od zmiennych adres i komenda
'**********************************
Enable Int0
End If
Loop
End
Odbierz_rc5:
Getrc5(adres , Komenda)
Adres = Adres And &B00011111 'zerowanie bitu 5
Odebrano = 1
Return
Język Bascom AVR
Do poprawnej pracy mikrokontrolera AVR, konieczna jest jego konfiguracja (przykład dla ATTiny2313). ustawiony zostanie typ mikrokontrolera, rezonator kwarcowy i funkcje wyprowadzeń. Skonfigurowane zostanie przerwanie zewnętrzne i obsługa Rc5:
$regfile = „attiny2313.dat”
$crystal = 12000000
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111011 : Portd = &B11111111
On Int0 Przzew0 Nosave
Config Int0 = Low Level
Enable Int0
Config Rc5 = Pind.2
Enable Interrupts
Odbieranie kodów z pilota odbywa się w przerwaniu zewnętrznym:
Przzew0:
Disable Int0
Enable Interrupts
Getrc5(adres , Komenda)
Komenda = Komenda And &B01111111
Odebrano = 1
Return
a interpretacja wciśniętego klawisza i adresu pilota następuje w pętli głównej programu:
Do
If Odebrano = 1 Then
If Adres = 0 Then 'pilot o adresie 0
'co się ma dziać w zależności od komendy
End If
Odebrano = 0
Enable Int0
End If
'inne instrukcje ….
Loop
End
Poniżej znajduje się przykład programu odbierającego transmisję Rc5:
'************* Konfiguracja uC *****************
'***********************************************
$regfile = „attiny2313.dat”
$crystal = 12000000
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111011 : Portd = &B11111111
On Int0 Przzew0 Nosave
Config Int0 = Low Level 'Falling
Enable Int0
Config Rc5 = Pind.2
Dioda Alias Portd.6
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.1 , Rs = Portb.0 'mirley test board 2
Config Lcd = 16 * 2
Cls
Cursor Off Noblink
Enable Interrupts
'********** Konfiguracja uC Koniec ************
'****************** Zmienne *******************
'***********************************************
Dim Komenda As Byte , Adres As Byte
Dim Odebrano As Bit
'************* Zmienne Koniec ****************
'************** Petla glowna ******************
'***********************************************
Do
If Odebrano = 1 Then
If Adres = 0 Then 'pilot o adresie 0
Reset Dioda
Cls
Lcd Komenda
Waitms 10
Set Dioda
Waitms 10
End If
Odebrano = 0
Enable Int0
End If
Loop
End
'************ Petla glowna Koniec **************
Przzew0:
Disable Int0
Enable Interrupts
Getrc5(adres , Komenda)
Komenda = Komenda And &B01111111
Odebrano = 1
Return
Materiał nadesłał użytkownik : Elektron