Ach sooo, so funktioniert das. Sorry ich mußte erst einmal ausprobieren wie das geht. Ich hoffe so ist es o.k.
Code:
'Tasten Aufwärts und Abwärts
$regfile = "89s8252.dat"
Config Lcd = 20 * 4
$lcd = &H8000
$lcdrs = &H8002
'$Sim
Cls Lcd
Cursor Off Noblink
Dim A As Integer 'Variable A = Arbeitszeit
Dim E As Byte 'Variable zum ein und ausschalten Hindergrundbeleuchtung, LED Anzeige und Relai
Dim D As Byte 'Varible D wird P1 für LED's
Dim N As Integer 'Varible N = Counter
Dim P As Integer 'Varible P = Pausenzeit
Dim Ba As Integer 'Variable für Basis PWM
Declare Sub Auf(a As Integer)
Declare Sub Aufb(a As Integer)
Config Watchdog = 2048
E = 255
P3 = E
D = 255
P1 = D
A = 0
If Ba > 0 And A > 0 Then Goto Ausgabe
While 1 = 1
While P1.4 = 0 '
Call Aufb()
Cls Lcd
Locate 1 , 1
Lcd "Basiszeit"
Locate 1 , 12
Lcd Ba
Wend
While P1.5 = 0 '
Call Abb()
Cls Lcd
Locate 1 , 1
Lcd "Basiszeit"
Locate 1 , 12
Lcd Ba
Wend
While P1.0 = 0 '
Call Auf()
Cls Lcd
Locate 1 , 1
Lcd "Arbeitszeit"
Locate 1 , 13
Lcd A
Wend
While P1.1 = 0 '
Call Ab()
Cls Lcd
Locate 1 , 1
Lcd "Arbeitszeit"
Locate 1 , 13
Lcd A
Wend
If P1.2 = 0 Then Gosub Ausgabe 'Nach Eingabe der Zeiten springe zu Ausgabe
Wend
Ausgabe:
For N = A Downto 1
'Start Watchdog
P3.0 = 0 'Einschalten der Anzeige LED
P3.2 = 0 'Einschalten des Relais
Stop Watchdog
Wait 1 'Warte eine Sekunde
Start Watchdog
Cls Lcd
Locate 1 , 1
Lcd "Sollarbeit" 'Also genau hier bleibt das Programm stehen. Der Text Sollarbeit wird noch angezeigt
Delay
Locate 1 , 13
Lcd A
Locate 3 , 1
Lcd "Arbeit"
Locate 3 , 11
'Reset Watchdog
Lcd N
If P1.3 = 0 Then Goto Abbruch ' Ist Taste an P1.3 gedrückt wird die Ausgabe abgebrochen
Next N
P = Ba - A 'Hier wird die Pausenzeit aus Basisizeit und Arbeitszeit gebildet
For N = P Downto 1
'Start Watchdog
P3.0 = 1 'Ausschalten der Anzeige LED
P3.2 = 1 'Ausschalten des Relais
Stop Watchdog
Wait 1
Cls Lcd
Locate 1 , 1
Lcd "Sollpause"
Locate 1 , 13
Lcd P
Locate 3 , 1
Lcd "Pause"
Locate 3 , 11
Lcd N
If P1.3 = 0 Then Goto Abbruch
Next N
If A <> 0 Then Gosub Ausgabe 'Endlosschleife für Ausgabe zum verlassen muß die Taste P1.3 gedrückt werden '
Return
Sub Aufb()
'If Ba = 600 Then Goto Fertigb
'If Ba > A Then Goto Fertigb
Incr Ba 'Aufwärtszählen der Basiszeit
Waitms 500
P3.1 = 0
Fertigb:
End Sub
Sub Abb()
'If A = 0 Then Goto Endeb
Decr Ba 'Abwärtszählen der Basiszeit
Waitms 500
Endeb:
End Sub
Sub Auf()
'If A > Ba Then Goto Fertig
Incr A 'Aufwärtszählen der Arbeitszeit
Waitms 500
Fertig:
End Sub
Sub Ab()
If A = 0 Then Goto Ende 'Abbruchbedingung dass bis 0 und nicht bis minus abwärts gezählt wird
Decr A 'Abwärtszählen der Arbeitszeit
Waitms 500
Ende:
End Sub
Abbruch:
Do
Cls Lcd
Locate 1 , 1
Lcd "Abbruch"
Wait 1
Cls Lcd
P3.0 = 1
P3.1 = 1
P3.2 = 1
Loop Until P1.4 = 0
Return
Vieleicht kannst Du mir auch etwas feedback geben, ob ich mit dem programmieren auf der richtigen Spur bin. Das ist mein erstes Projekt in Bascom.
Gruß, Harald
Was ich noch vergessen habe, nicht stören an den auskommentierten Stellen, die sind noch zum testen. Auch den Watchdog habe ich normalerweise nicht aktiviert.
Lesezeichen