Witam serdecznie, pomóżcie bo nie znam bascoma. Potrzebuję zrealizować odbiór sygnału z pilota RC5 w asemblerze AVR a znalazłem jedynie kod w bascomie.
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
