Ach sooo, so funktioniert das. Sorry ich mußte erst einmal ausprobieren wie das geht. Ich hoffe so ist es o.k.
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.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
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.







Zitieren

Lesezeichen