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ę

komenda getrc5 bascom AVR

Marcin-K
-
-
Posty:1
Rejestracja:7 lip 2008, o 09:46
Lokalizacja:Pruchnik
komenda getrc5 bascom AVR

Postautor: Marcin-K » 7 lip 2008, o 10:34

Dlaczego w bascomie AVR nie działa funkcja getrc5 w bascomie 8051 ta komenda działa super. Niedawno przesiadłem się na AVR-A i kicha program z założenia miał się uczyć sam na podstawie kodów odebranych i zapisanych w wewnętrznej pamięci eeprom . Działa to mniej więcej tak jeśli przed włączeniem zasilania zewrę wyprowadzenie PD.0 do masy i włączę zasilanie to program oczekuje na cztery komendy z pilota , poczym zapisuje je do eeprom i przechodzi do pętli głównej a w niej jeśli zostanie odebrany jakiś kod to porównuje go z tym w eepromie . Jeśli na porcie PD.0 po włączeniu zasilania będzie jedynka to program opuszcza fragment programu odpowiedzialny za zapis do eeproma tylko odczytuje bezpośrednio z eepromu i porównuje czy komenda i rozkaz jest taki sam jak w pamięci i stosownie do kodu załącza jeden z czterech przekaźników. Co mam zrobić , żeby to chciało działać

Kod: Zaznacz cały

Dim Klawisz_1_com As Byte 'Eram Byte 'ZMIENNA ZAPISYWANA W EEPROM Dim Klawisz_1_adr As Byte 'Eram Byte 'ZMIENNA ZAPISYWANA W EEPROM Dim Klawisz_2_com As Byte 'Eram Byte 'ZMIENNA ZAPISYWANA W EEPROM Dim Klawisz_2_adr As Byte 'Eram Byte 'ZMIENNA ZAPISYWANA W EEPROM Dim Klawisz_3_com As Byte 'Eram Byte 'ZMIENNA ZAPISYWANA W EEPROM Dim Klawisz_3_adr As Byte 'Eram Byte 'ZMIENNA ZAPISYWANA W EEPROM Dim Klawisz_4_com As Byte 'Eram Byte 'ZMIENNA ZAPISYWANA W EEPROM Dim Klawisz_4_adr As Byte 'Eram Byte 'ZMIENNA ZAPISYWANA W EEPROM Dim Klaw_1_com As Byte 'ZMIENNA PORÓWNUJ¥CA ZAWARTOSC EEPROM Z PILOTEM Dim Klaw_1_adr As Byte 'ZMIENNA PORÓWNUJ¥CA ZAWARTOSC EEPROM Z PILOTEM Dim Klaw_2_com As Byte 'ZMIENNA PORÓWNUJ¥CA ZAWARTOSC EEPROM Z PILOTEM Dim Klaw_2_adr As Byte 'ZMIENNA PORÓWNUJ¥CA ZAWARTOSC EEPROM Z PILOTEM Dim Klaw_3_com As Byte 'ZMIENNA PORÓWNUJ¥CA ZAWARTOSC EEPROM Z PILOTEM Dim Klaw_3_adr As Byte 'ZMIENNA PORÓWNUJ¥CA ZAWARTOSC EEPROM Z PILOTEM Dim Klaw_4_com As Byte 'ZMIENNA PORÓWNUJ¥CA ZAWARTOSC EEPROM Z PILOTEM Dim Klaw_4_adr As Byte 'ZMIENNA PORÓWNUJ¥CA ZAWARTOSC EEPROM Z PILOTEM Dim Address As Byte , Command As Byte Dim Licznik As Byte 'ZMIENNA DO LICZNIKA Dim Zezwolenie As Bit 'ZMIENNA ZEZWOLENIE Licznik = 0 'WYZERUJ ZMIEENA LICZNIK Zezwolenie = 0 'WYZERUJ ZMIEENA Zezwolenie Config Portb = Output Config Rc5 = Pind.2 Set Portd.0 '= 1 Set Pind.0 Config Pind.0 = 1 Set Portd.0 Reset Portb.7 : Reset Portb.6 : Reset Portb.5 : Reset Portb.4 : Set Portb.2 ': Set Portd.2 : Set Pind.2 Set Portd.1 : Set Portd.3 : Set Portd.4 : Set Portd.5 : Set Portd.6 : : Set Portd.7 Reset Pinb.7 : Reset Pinb.6 : Reset Pinb.5 : Reset Pinb.4 : Set Pinb.2 Set Pind.1 : Set Pind.3 : Set Pind.4 : Set Pind.5 : Set Pind.6 : : Set Pind.7 Set Portb.2 Wait 1 Reset Portb.2 Wait 1 Set Portb.2 Config Int0 = Low Level On Int0 Odkodoj_sygnal Enable Interrupts Enable Int0 '-----------------SEKWENCJA ZAPISUJACA DO EEPROM-------------------------------- If Pind.0 = 0 Then 'JESLI WYBRANO OPCJE NAUKI Reset Portb.2 'ZAPAL DIODE LED Wait 1 'CZEKAJ 1 sek Set Portb.2 'ZGAS DIODE LED Do If Licznik = 1 Then 'SPRAWDZ CZY ZMIENNA LICZNIK MA WARTOSC 1 If Zezwolenie = 1 Then 'SPRAWDZ CZY JEST ZEZWOLENIE =1 Zezwolenie = 0 'WYZERUJ ZMIENNA ZEZWOLENIE Klawisz_1_com = Command 'WPISZ KOD KOMENDY DO EEPROM Writeeeprom Klawisz_1_com , 1 'WYSLIJ WARTOSC DO EEPROM POD ADRES 1 Klawisz_1_adr = Address 'WPISZ KOD ADRESU DO EEPROM Writeeeprom Klawisz_1_adr , 2 'WYSLIJ WARTOSC DO EEPROM POD ADRES 2 Reset Portb.2 'ZAPAL DIODE LED Waitms 250 'CZEKAJ 250 ms Set Portb.2 'ZGAS DIODE LED End If : End If If Licznik = 2 Then 'SPRAWDZ CZY ZMIENNA LICZNIK MA WARTOSC 2 If Zezwolenie = 1 Then 'SPRAWDZ CZY JEST ZEZWOLENIE =1 Zezwolenie = 0 'WYZERUJ ZMIENNA ZEZWOLENIE Klawisz_2_com = Command 'WPISZ KOD KOMENDY DO EEPROM Writeeeprom Klawisz_2_com , 3 'WYSLIJ WARTOSC DO EEPROM POD ADRES 3 Klawisz_2_adr = Address 'WPISZ KOD ADRESU DO EEPROM Writeeeprom Klawisz_2_adr , 4 'WYSLIJ WARTOSC DO EEPROM POD ADRES 4 Reset Portb.2 'ZAPAL DIODE LED Waitms 250 'CZEKAJ 250 ms Set Portb.2 'ZGAS DIODE LED End If : End If If Licznik = 3 Then 'SPRAWDZ CZY ZMIENNA LICZNIK MA WARTOSC 3 If Zezwolenie = 1 Then 'SPRAWDZ CZY JEST ZEZWOLENIE =1 Zezwolenie = 0 'WYZERUJ ZMIENNA ZEZWOLENIE Klawisz_3_com = Command 'WPISZ KOD KOMENDY DO EEPROM Writeeeprom Klawisz_3_com , 5 'WYSLIJ WARTOSC DO EEPROM POD ADRES 5 Klawisz_3_adr = Address 'WPISZ KOD ADRESU DO EEPROM Writeeeprom Klawisz_3_adr , 6 'WYSLIJ WARTOSC DO EEPROM POD ADRES 6 Reset Portb.2 'ZAPAL DIODE LED Waitms 250 'CZEKAJ 250 ms Set Portb.2 'ZGAS DIODE LED End If : End If If Licznik = 4 Then 'SPRAWDZ CZY ZMIENNA LICZNIK MA WARTOSC 4 If Zezwolenie = 1 Then 'SPRAWDZ CZY JEST ZEZWOLENIE =1 Zezwolenie = 0 'WYZERUJ ZMIENNA ZEZWOLENIE Klawisz_4_com = Command 'WPISZ KOD KOMENDY DO EEPROM Writeeeprom Klawisz_4_com , 7 'WYSLIJ WARTOSC DO EEPROM POD ADRES 7 Klawisz_4_adr = Address 'WPISZ KOD ADRESU DO EEPROM Writeeeprom Klawisz_4_adr , 8 'WYSLIJ WARTOSC DO EEPROM POD ADRES 6 Licznik = 0 'ZAPISZ DO ZMIENNEJ LICZNIK WARTOSC 0 Reset Portb.2 'ZAPAL DIODE LED Waitms 250 'CZEKAJ 250 ms Set Portb.2 'ZGAS DIODE LED Waitms 250 'CZEKAJ 250 ms Reset Portb.2 'ZAPAL DIODE LED Waitms 250 'CZEKAJ 250 ms Set Portb.2 'ZGAS DIODE LED Exit Do End If : End If 'Enable Int0 'Enable Interrupts Loop End If '---------------- KONIEC SEKWENCJ ZAPISUJACEJ DO EEPROM------------------------- '--SEKWENCJA ODCZYTUJACA Z EEPROM I PRZEPISANIA DO ZMIENNYCH POMOCNICZYCH------- Readeeprom Klawisz_1_com , 1 'ODCZYTAJ WARTOSC Z EEPROM Z ADRESU 1 Waitms 25 'CZEKAJ 20 ms Klaw_1_com = Klawisz_1_com 'ZAPISZ DO ZMIEENJ POMOCNICZEJ Waitms 25 'CZEKAJ 20 ms Readeeprom Klawisz_1_adr , 2 'ODCZYTAJ WARTOSC Z EEPROM Z ADRESU 2 Waitms 25 'CZEKAJ 20 ms Klaw_1_adr = Klawisz_1_adr 'ZAPISZ DO ZMIEENJ POMOCNICZEJ Waitms 25 'CZEKAJ 20 ms Readeeprom Klawisz_2_com , 3 'ODCZYTAJ WARTOSC Z EEPROM Z ADRESU 3 Waitms 25 'CZEKAJ 20 ms Klaw_2_com = Klawisz_2_com 'ZAPISZ DO ZMIEENJ POMOCNICZEJ Waitms 25 'CZEKAJ 20 ms Readeeprom Klawisz_2_adr , 4 'ODCZYTAJ WARTOSC Z EEPROM Z ADRESU 4 Waitms 25 'CZEKAJ 20 ms Klaw_2_adr = Klawisz_2_adr 'ZAPISZ DO ZMIEENJ POMOCNICZEJ Waitms 25 'CZEKAJ 20 ms Readeeprom Klawisz_3_com , 5 'ODCZYTAJ WARTOSC Z EEPROM Z ADRESU 5 Waitms 25 'CZEKAJ 20 ms Klaw_3_com = Klawisz_3_com 'ZAPISZ DO ZMIEENJ POMOCNICZEJ Waitms 25 'CZEKAJ 20 ms Readeeprom Klawisz_3_adr , 6 'ODCZYTAJ WARTOSC Z EEPROM Z ADRESU 6 Waitms 25 'CZEKAJ 20 ms Klaw_3_adr = Klawisz_3_adr 'ZAPISZ DO ZMIEENJ POMOCNICZEJ Waitms 25 'CZEKAJ 20 ms Readeeprom Klawisz_4_com , 7 'ODCZYTAJ WARTOSC Z EEPROM Z ADRESU 7 Waitms 25 'CZEKAJ 20 ms Klaw_4_com = Klawisz_4_com 'ZAPISZ DO ZMIEENJ POMOCNICZEJ Waitms 25 'CZEKAJ 20 ms Readeeprom Klawisz_4_adr , 8 'ODCZYTAJ WARTOSC Z EEPROM Z ADRESU 8 Waitms 25 'CZEKAJ 20 ms Klaw_4_adr = Klawisz_4_adr 'ZAPISZ DO ZMIEENJ POMOCNICZEJ Waitms 25 'CZEKAJ 20 ms '-------------------------KONIEC SEKWENCJI-------------------------------------- '>>>>>>>>>>>>>>>>>>>>>>>>>>PROGRAM GLOWNY>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Do If Zezwolenie = 1 Then 'SPRAWDZ CZY JEST ZEZWOLENIE =1 If Klaw_1_com = Command Then 'SPRAWDZ CZY ZMIENNA KLAWICZ1 COM =ZMIENNEJ COMMAND If Klaw_1_adr = Address Then 'SPRAWDZ CZY ZMIENNA KLAWICZ1 ADR =ZMIENNEJ ADRES Toggle Portb.7 'ZMIEN STAN TRANZYSTORA Q2 NA PRZECIWNY Zezwolenie = 0 'WYZERUJ ZMIENNA ZEZWOLENIE End If : End If : End If ': End If If Zezwolenie = 1 Then 'SPRAWDZ CZY JEST ZEZWOLENIE =1 If Klaw_2_com = Command Then 'SPRAWDZ CZY ZMIENNA KLAWICZ 2 COM =ZMIENNEJ COMMAND If Klaw_2_adr = Address Then 'SPRAWDZ CZY ZMIENNA KLAWICZ 2 ADR =ZMIENNEJ ADRES Toggle Portb.6 'ZMIEN STAN TRANZYSTORA Q3 NA PRZECIWNY Zezwolenie = 0 'WYZERUJ ZMIENNA ZEZWOLENIE End If : End If : End If ': End If If Zezwolenie = 1 Then 'SPRAWDZ CZY JEST ZEZWOLENIE =1 If Klaw_3_com = Command Then 'SPRAWDZ CZY ZMIENNA KLAWICZ 3 COM =ZMIENNEJ COMMAND If Klaw_3_adr = Address Then 'SPRAWDZ CZY ZMIENNA KLAWICZ 3 ADR =ZMIENNEJ ADRES Toggle Portb.5 'ZMIEN STAN TRANZYSTORA Q4 NA PRZECIWNY Zezwolenie = 0 'WYZERUJ ZMIENNA ZEZWOLENIE End If : End If : End If ': End If If Zezwolenie = 1 Then 'SPRAWDZ CZY JEST ZEZWOLENIE =1 If Klaw_4_com = Command Then 'SPRAWDZ CZY ZMIENNA KLAWICZ 4 COM =ZMIENNEJ COMMAND If Klaw_4_adr = Address Then 'SPRAWDZ CZY ZMIENNA KLAWICZ 4 ADR =ZMIENNEJ ADRES Toggle Portb.4 'ZMIEN STAN TRANZYSTORA Q5 NA PRZECIWNY Zezwolenie = 0 'WYZERUJ ZMIENNA ZEZWOLENIE End If : End If : End If ' : End If Enable Int0 Enable Interrupts Loop End '>>>>>>>>>>>>>>>>>>>>>>>>>>>>PROGRAM GLOWNY>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Odkodoj_sygnal: Disable Int0 Enable Interrupts Getrc5(address , Command) 'ODKODUJ SYGNAL Z PILOTA 'Command = Command And &B01111111 Incr Licznik 'zwieksz zmienna licznik o 1 Zezwolenie = 1 'ZMIENNA ZEZWOLENIE =1 If Licznik => 4 Then 'jesli licznik osiagnal wartosc=4 lub wieksza od 4 Licznik = 0 'wyzeruj End If Set Portb.2 'zgas diode Waitms 100 'czekaj 1 sek Reset Portb.2 'zapal diode Waitms 100 'czekaj 1 sek Set Portb.2 'zgas diode Enable Int0 Enable Interrupts Return
Proszę używać znacznika

Kod: Zaznacz cały

- Pajączek[/color]
Załączniki
PILOT SAMOUCZACY22.jpg
prosze zmienić rozszerzenie pliku na doc
(23.83KiB)Pobrany 397 razy
Ostatnio zmieniony 7 lip 2008, o 12:59 przez Marcin-K, łącznie zmieniany 1 raz.

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 0 gości