$regfile = "m8def.DAT" ' specify the used micro $crystal = 8000000 ' used crystal frequency $baud = 9600 ' use baud rate $hwstack = 32 ' default use 32 for the hardware stack $swstack = 10 ' default use 10 for the SW stack $framesize = 100 Dim Temp As Byte Dim I As Byte Dim Soll As Byte Dim Ist As Byte Dim Modus As Byte Dim Maschine As Byte Dim Maxi As Byte Dim Schub As Bit Dim X(16) As Byte Dim Seconds As Byte Dim Tick As Byte Dim Oeffnen As Bit Const Reload = 34286 Const Heu = 16 Const Gras = 11 Const Mist = 4 Restore Value_table For Temp = 1 To 16 Read X(temp) Next Config Timer1 = Timer , Prescale = 256 Config Portb = Output 'bcd Config Portc = Input 'c.0=auf, c.1=ab Portb = &B11111111 Portc = &B11111111 'Waitms 50 I = 1 Tick = 0 On Timer1 Timer1_isr On Urxc Daten 'Interrupt-Routine setzen Enable Urxc 'Interrupt URXC einschalten Enable Interrupts 'Interrupts global zulassen Restart: Ist = 0 Soll = 0 While Ist < 200 Portb = 127 Waitms 250 Portb = 255 Waitms 250 Printbin 127 Wend Waitms 10 Maschine = Ist - 200 Temp = Ist Printbin Ist While Ist = Temp Portb = 127 Waitms 250 Portb = 255 Waitms 250 Wend Waitms 10 Maxi = Ist If Maxi > 254 Then Portb = X(11) Printbin 255 Waitms 20 Goto Restart Else Printbin Maxi Waitms 20 End If If Maschine = 1 Then Modus = 3 Elseif Maschine = 2 Then Modus = 1 Temp = 14 Else Modus = 1 End If Enable Timer1 Do Debounce Pinc.2 , 0 , Moduse , Sub If Tick > 10 Then Disable Timer1 Goto Restart Else If Maschine = 1 Then 'Ladewagen Debounce Pinc.0 , 0 , Mehr , Sub Debounce Pinc.1 , 0 , Weniger , Sub Select Case Modus Case 0: I = Soll + 1 If Soll = Maxi Then Portb = X(i) + 128 Else Portb = X(i) End If Case 1: If Schub = 1 Then Portb = X(11) + 128 If Oeffnen = 1 Then Soll = Maxi + 128 Else Soll = Maxi End If Else Portb = X(11) If Oeffnen = 1 Then Soll = 128 Else Soll = 0 End If End If Case 2: If Seconds = 0 Then Schub = 0 Soll = 0 End If If Schub = 1 Then Portb = X(12) + 128 Else Portb = X(12) End If Case 3: If Seconds = 0 Then Schub = 0 Soll = 0 End If If Schub = 1 Then Portb = X(13) + 128 Else Portb = X(13) End If End Select Elseif Maschine = 2 Then 'schwader Select Case Modus Case 0: 'modus handbetrieb If Pinc.0 = 0 And Soll < 255 Then Incr Soll Incr Temp If Temp > 16 Then Temp = 14 End If If Pinc.1 = 0 And Soll > 0 Then Decr Soll Decr Temp If Temp < 14 Then Temp = 16 End If Portb = X(temp) Waitms 100 Case 1: 'modus auto Debounce Pinc.0 , 0 , Mehr , Sub Debounce Pinc.1 , 0 , Weniger , Sub If Soll > 0 Then Portb = X(11) I = Soll Mod 2 If I = 0 Then Set Portb.7 Else Reset Portb.7 End If Else Portb = X(1) End If End Select Elseif Maschine = 3 Then Debounce Pinc.0 , 0 , Mehr , Sub Debounce Pinc.1 , 0 , Weniger , Sub Select Case Modus Case 0: I = Soll + 1 If Soll = Maxi Then Portb = X(i) + 128 Else Portb = X(i) End If Case 1: I = Mist + 1 If Schub = 1 Then Portb = X(i) + 128 Else Portb = X(i) End If End Select End If End If Printbin Soll Loop Weniger: If Maschine = 1 Then 'ladewagen Select Case Modus Case 0: If Soll > 0 Then Decr Soll End If Case 1: Toggle Schub Case 2: Schub = 1 Soll = Maxi Seconds = Heu Case 3: Schub = 1 Soll = Maxi Seconds = Gras End Select Elseif Maschine = 2 Then 'schwader If Soll = 0 Or Soll > 150 Then Soll = 150 Reset Portb.7 Else Soll = 0 Set Portb.7 End If Elseif Maschine = 3 Then 'mist Select Case Modus Case 0: If Soll > 0 Then Decr Soll End If Case 1: If Soll = Mist Then Soll = 0 Schub = 0 Else Soll = Mist Schub = 1 End If End Select End If Return Mehr: If Maschine = 1 Then Select Case Modus Case 0: If Soll < Maxi Then Incr Soll End If Case 1: Set Oeffnen Case 2: nop Case 3: nop End Select Elseif Maschine = 2 Then If Soll < 150 Then Soll = 200 Reset Portb.7 Else Soll = 0 Set Portb.7 End If Elseif Maschine = 3 Then Select Case Modus Case 0: If Soll < Maxi Then Incr Soll End If Case 1: nop End Select End If Return Moduse: If Maschine = 1 Then If Modus = 3 Then Modus = 0 Else Incr Modus End If If Modus > 0 Then Schub = 0 Soll = 0 Elseif Maschine = 2 Then Waitms 500 If Pinc.2 = 0 Then Soll = 0 Temp = 14 Else If Modus = 1 Then Modus = 0 Set Portb.7 Else Modus = 1 Soll = 0 End If End If Elseif Maschine = 3 Then If Modus = 1 Then Modus = 0 Else Modus = 1 End If If Modus > 0 Then Schub = 0 Soll = 0 End If Return Daten: Ist = Udr Tick = 0 Return Timer1_isr: If Seconds > 0 Then Decr Seconds If Tick > 200 Then Tick = 100 Else Incr Tick End If Timer1 = Reload Reset Oeffnen Return Value_table: Data &HC0 , &HF9 , &HA4 , &HB0 , &H99 , &H92 , &H82 , &HF8 , &H80 , &H90 , &H88 , &H89 , &HC2 , &HC8 , &H89 , &HC1