Mam prośbę o pomoc w ukończeniu programu, otórz założeniem programu jest aby zaświecić dioda1 po określonej ilości mrugnięć dioda2 i w odpowiednim momencie wciśnięciu SW1. Program działa bezbłędnie jeśli ręcznie określę mu zmienne A i B, natomiast zaczynają się schody jeśli chcę dodać możliwość programowania zmiennych A i B, zapisując je w pamięci eeprom. Przejście do podprogramu PROGRAMUJ działa prawidłowo, natomiast chodzi mi o samo zaprogramowanie zmiennych A i B za pomocą SW i SW1, kombinacja przycisków nie jest tak bardzo istotna, chociaż chciałbym aby będąc w podprogramie PROGRAMUJ, każde naciśnięcie SW zmieniało docelowo A o wartość 1, a w momencie np przytrzymania SW1 przez 3 sek powodowało powrót do pętli głównej, w której wczytana będzie już nowa wartość zmiennej A.
Podsumowując:
1. Wchodzę do podprogramu programuj
2. Zeruję zmienną A
3. Za pomocą SW wpisuję nowe A
4. Wciskam na 3 sek SW1 = wracam do pętli głównej z nowym A
Wartoś B praktycznie zawsze miała by być A+2 więc to nie taki problem.
Proszę w temacie sprecyzować problem.
Robak
Podsumowując:
1. Wchodzę do podprogramu programuj
2. Zeruję zmienną A
3. Za pomocą SW wpisuję nowe A
4. Wciskam na 3 sek SW1 = wracam do pętli głównej z nowym A
Wartoś B praktycznie zawsze miała by być A+2 więc to nie taki problem.
$regfile "attiny2313.dat"
$crystal = 1000000
Config Portb.4 = Output
Config Portb.3 = Output
Config Pinb.2 = Input
Config Pinb.1 = Input
Pinb.1 = 1
Pinb.2 = 1
Sw Alias Pinb.2
Sw1 Alias Pinb.1
Dioda1 Alias Portb.3
Dioda2 Alias Portb.4
Dim Ptimer1 As Byte 'deklaracje zmiennych
Dim I As Byte
Dim A As Byte
Dim B As Byte
Dim C As Byte
Dim D As Byte
Dim E As Byte
Dim Eeprom As Byte
A = 8 ' przypisanie wartości zmiennych
B = 10
C = 0
D = 0
Declare Sub Programuj
Config Timer0 = Timer , Prescale = 1024 'konfiguracja timer0
On Timer0 Przerwanie 'właczenie Przerwanie
Enable Timer0 'włączenie timer0
Enable Interrupts 'uruchomienie globalnych przerwań
'############################### PĘTLA GŁÓWNA ##################################
Do
Readeeprom Eeprom , 2
A = Eeprom
If Sw1 = 0 And Sw = 0 Then
If C = 20 Then
Waitms 1
Call Programuj
Waitms 1
End If
End If
If Sw = 0 Then 'jeżeli przycisk Sw jest wciśnięty, mruga dioda1 co okolo 1sek
If Ptimer1 = 0 Then
Ptimer1 = 2
Toggle Dioda1
Incr I 'z każdym mrugnięciem (zaświeceniem diody) zwiększa zmienną I
End If
Else
Reset Dioda1
I = 0
End If
If I > 4 And I < 6 Then 'jeżeli dioda1 zaświeci 3x to wyłączy dioda2
Reset Dioda2
End If
If I > A And I < B Then '
If Sw1 = 0 Then
Set Dioda2
End If
End If
If Sw1 = 0 Then 'warunek nie pozwalający zapalić dioda2 w innej sytuacji niż I>A and I<B
If I < A Then
I = 0
End If
End If
Loop
End
'################################ PROGRAMOWANIE EEPROM #########################
Sub Programuj
Wait 1
For D = 1 To 10
Waitms 50
Reset Dioda1
Reset Dioda2
Waitms 50
Set Dioda1
Set Dioda2
Next D
Reset Dioda1
Reset Dioda2
Set Dioda1
Wait 1
Eeprom = 0
Do
If Sw = 0 Then
Waitms 25
If Sw = 0 Then
Eeprom = Eeprom + 1
End If
End If
Loop Until Sw1 = 0
Wait 1
Writeeeprom Eeprom , 2
Wait 1
Bitwait Sw1 , Reset
Reset Dioda2
C = 0
End Sub
Return
'############################### PRZERWANIE TIMER0 #############################
Przerwanie:
If Ptimer1 > 0 Then Decr Ptimer1 'odmierzenie około 1sek
If Sw1 = 0 And Sw = 0 Then Incr C
ReturnProszę w temacie sprecyzować problem.
Robak