Złożyłem już kilka projektów z avr-ami. Przyszedł czas na naukę programowania. '******on przekaznik nr.1/3****** Pr1: If Aktywny_pro = 0 Then ' przekaźnik1 Aktywny_pro = 1 Set Przekaznik1 Czas_odliczony = Czas_zadany1 Elseif Aktywny_pro = 1 Then Reset Przekaznik1 Aktywny_pro = 2 ' przekaźnik 2 Set Przekaznik2 Czas_odliczony = Czas_zadany2 Elseif Aktywny_pro = 2 Then Reset Przekaznik2 Aktywny_pro = 0 End If Return Ale chyba nie tędy droga ? Nie działa gdy dołożę trzeci przekaźnik. Później będę chciał dołożyć zabezpieczenie przed zawieszeniem programu, a może później zaprzęgnąć do pracy DS1307... ale to jak zrozumiem podstawy '***********konfiguracja uC********** $regfile = "m8def.dat" $crystal = 8000000 Config Portb = &B11000111 'porty PB.3 PB.4 PB.5 przyciski PB.1 I PB.2 PRZEKAŹNIKI Portb = &B11111001 'przekaźniki wyłączone Config Portd = &B11111111 ' PD.0 przekaźnik Portd = &B11111110 Config Portc = &B11111111 Portc = &B11111111 'wszystkie linie wyjście 'przypisanie nazw dla przekaźników Przekaznik1 Alias Portd.0 'przekaźnik 3 Przekaznik2 Alias Portb.1 ' przekaźnik 2 Przekaznik3 Alias Portb.2 'przekaźnik 1 / buzzer Sw1 Alias Pinb.3 'przypisanie nazw przycisków Sw2 Alias Pinb.4 Sw3 Alias Pinb.5 Set Portb.3 'rezystory podciągające dla przyciskó Set Portb.4 Set Portd.7 '*****konfiguracja timer0******* Config Timer0 = Timer , Prescale = 256 On Timer0 Odmierz_1s Dim Licz_8ms As Byte Enable Interrupts Enable Timer0 Load Timer0 = 250 '*****zmienne,stałe sterujące on/off***** Const Czas_zadany1 = 2 '2 sek. działanie przekaźnika 1 Const Czas_zadany2 = 1 '1 sek. działanie przekaźnika 2 Const Czas_zadany3 = 5 '5 sek. działanie przekaźnika 3 Dim Czas_odliczony As Byte Dim Aktywny_pro As Byte Aktywny_pro = 0 '******obsługa przycisków****** Do Debounce Sw1 , 0 , Pr1 , Sub Debounce Sw2 , 0 , Pr2 , Sub Debounce Sw3 , 0 , Pr3 , Sub Loop End '*****timer***** Odmierz_1s: Load Timer0 = 250 Incr Licz_8ms If Licz_8ms = 125 Then Licz_8ms = 0 If Czas_odliczony > 0 Then Decr Czas_odliczony 'zmniejszenie zmiennej o 1 If Czas_odliczony = 0 Then Select Case Aktywny_pro Case 1: Gosub Pr1 Case 2: Gosub Pr2 Case 3: Gosub Pr3 End Select End If End If End If Return '*****wyłączenie wszystkiego****** Power_off: Reset Przekaznik1 Reset Przekaznik2 Reset Przekaznik3 Return '******on przekaznik nr.1/3****** Pr1: If Aktywny_pro = 0 Then Aktywny_pro = 1 Set Przekaznik1 Czas_odliczony = Czas_zadany1 Set Przekaznik2 Czas_odliczony = Czas_zadany1 Elseif Aktywny_pro = 1 Then Reset Przekaznik1 Aktywny_pro = 0 End If Return '*****on przekaznik nr.2/3***** Pr2: If Aktywny_pro = 0 Then Aktywny_pro = 2 Set Przekaznik2 Czas_odliczony = Czas_zadany2 Elseif Aktywny_pro = 2 Then Reset Przekaznik2 Aktywny_pro = 0 End If Return '*****on przekaznik nr.3/3***** Pr3: If Aktywny_pro = 0 Then Aktywny_pro = 3 Set Przekaznik3 Czas_odliczony = Czas_zadany3 Elseif Aktywny_pro = 3 Then Reset Przekaznik3 Aktywny_pro = 0 End If Return
|
|||
Dodaję jako następny post,
Dodaję jako następny post, żeby było widać z czego wyszedłem.
Udało mi się tak skomplikować program, aby robił to co chcę. Proszę o wytknięcie błędów. Ewentualnie jak uprościć program. Następnym krokiem będzie dodanie przerwy między kolejnymi krokami.
Re: Dozownik
to jest niepotrzebne, przecież ustawiasz to zaraz po konfiguracji portów
Poza tym wykonujesz wszystko w przerwaniu.... czy zdąży wykonać się całość zanim przyjdzie kolejne przerwanie? Wywoływanie etykiety z wnętrza kolejnej etykiety też nie jest dobrym pomysłem. Jak dojdzie do ostatniej to skoczy do Pr5, potem do Pr4 i tak aż do przerwania z którego dopiero do pętli głównej... Raczej powinno być tak że wskakuje do przerwania, ustawia odpowiednie parametry i skacze spowrotem do pętli głównej.
Na końcu zwróć uwagę na robienie wcięć w programie. Jak nie ma poprawnych wcięć to jest to nieczytelne i nikomu się tego nie chce sprawdzać
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Oczywiście to moje
Oczywiście to moje przeoczenie. Program jest zmodyfikowany nie mój. Więc to ja mieszam. Dziękuję postaram się zastosować do rad.