Hier mein Programm:
$regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 16000000 'Quarzfrequenz Dim Taste1 As Bit Dim Wert1 As Integer Dim Wert2 As Integer Dim Wert3 As Integer Dim Wert4 As Integer Dim Volt1 As Integer Dim Spannung1 As Single Dim Spa1 As String * 6 Declare Sub 4motvorw() Declare Sub 4motruck() Declare Sub Bremsen() Declare Sub Spannungmessen() Declare Sub Tastenabfrage() Const Fest = 5 / 1023 'Zur Spannungsmessung Config Porta = &B00111111 'Drehrichtung 3 Mot A7&A6 AD Wandler Config Portb = &B00000011 'Drehrichtung 1 Mot B0&B1 (1=Ausgang 0=Eingang) Config Lcd = 20 * 4 Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2 Config Adc = Single , Prescaler = Auto Config Timer0 = Pwm , Pwm = On , Compare = Clear , Prescale = 1 ' 8 Bit PWM Ausgang Portb.3 Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1 ' 8 Bit PWM Ausgang Portd.4 und Portd.5 Config Timer2 = Pwm , Pwm = On , Compare = Clear , Prescale = 1 ' 8 Bit PWM Ausgang Portd.7 Enable Timer0 Enable Timer1 Enable Timer2 'Festgelegte Werte Servos 1 - 4 = Wert1 = 179 : Wert2 = 178 : Wert3 = 158 : Wert4 = 173 Cls Wait 1 Locate 1 , 1 Lcd "8 Bit PWM 4 Motore" Locate 2 , 1 : Lcd "PWM1A=" Locate 2 , 11 : Lcd "PWM1B=" Locate 3 , 1 : Lcd "PWM0 =" Locate 3 , 11 : Lcd "PWM2 =" Locate 4 , 1 : Lcd "Ubat =" Locate 2 , 7 : Lcd Wert1 Locate 2 , 17 : Lcd Wert2 Locate 3 , 7 : Lcd Wert3 Locate 3 , 17 : Lcd Wert4 Locate 4 , 11 : Lcd Spa1 Locate 4 , 12 : Lcd "V" Call Spannungmessen Do Call Tastenabfrage For Wert4 = 130 To 255 Call 4motvorw Waitms 80 Next Wert4 Wert4 = 0 Call Bremsen For Wert1 = 110 To 255 Step 5 Wert2 = Wert1 : Wert3 = Wert1 : Wert4 = Wert1 Call 4motvorw Waitms 100 Next Wert1 Wait 5 For Wert1 = 255 To 110 Step -5 Wert2 = Wert1 : Wert3 = Wert1 : Wert4 = Wert1 Call 4motvorw Waitms 100 Next Wert1 Call Bremsen For Wert1 = 110 To 255 Step 5 Wert2 = Wert1 : Wert3 = Wert1 : Wert4 = Wert1 Call 4motruck Waitms 25 Next Wert1 Wait 5 For Wert1 = 255 To 110 Step -5 Wert2 = Wert1 : Wert3 = Wert1 : Wert4 = Wert1 Call 4motruck Waitms 25 Next Wert1 Call Bremsen For Wert1 = 140 To 255 Step 5 Wert2 = Wert1 : Wert3 = Wert1 : Wert4 = Wert1 Call 4motvorw Waitms 10 Next Wert1 Wait 5 For Wert1 = 255 To 140 Step -5 Wert2 = Wert1 : Wert3 = Wert1 : Wert4 = Wert1 Call 4motvorw Waitms 10 Next Wert1 Call Bremsen Wert1 = 0 : Wert2 = 0 : Wert3 = 0 : Wert4 = 0 Loop End Sub 4motvorw() 'Motoren Ein 'Linker Motor ein Porta.0 = 1 'Richtung vorw. Porta.1 = 0 'Richtung vorw. Portd.4 = 1 'Linker Motor EIN OC1B 'Rechter Motor ein Porta.2 = 1 'Richtung vorw. Porta.3 = 0 'Richtung vorw. Portd.5 = 1 'rechter Motor Ein OC1A Porta.4 = 1 'Richtung vorw. Porta.5 = 0 'Richtung vorw. Portb.3 = 1 'Linker Motor EIN OC0 'Rechter Motor ein Portb.0 = 1 'Richtung vorw. Portb.1 = 0 'Richtung vorw. Portd.7 = 1 'rechter Motor Ein OC2 Compare1a = Wert1 '255=Maxspeed : 0=Minspeed Compare1b = Wert2 Compare0 = Wert3 Compare2 = Wert4 Locate 2 , 7 : Lcd " " Locate 2 , 7 : Lcd Wert1 Locate 2 , 17 : Lcd " " Locate 2 , 17 : Lcd Wert2 Locate 3 , 7 : Lcd " " Locate 3 , 7 : Lcd Wert3 Locate 3 , 17 : Lcd " " Locate 3 , 17 : Lcd Wert4 Call Spannungmessen End Sub Sub 4motruck() 'Motoren Ein 'Linker Motor ein Porta.0 = 0 'Richtung vorw. Porta.1 = 1 'Richtung vorw. Portd.4 = 1 'Linker Motor EIN OC1B 'Rechter Motor ein Porta.2 = 0 'Richtung vorw. Porta.3 = 1 'Richtung vorw. Portd.5 = 1 'rechter Motor Ein OC1A Porta.4 = 0 'Richtung vorw. Porta.5 = 1 'Richtung vorw. Portb.3 = 1 'Linker Motor EIN OC0 'Rechter Motor ein Portb.0 = 0 'Richtung vorw. Portb.1 = 1 'Richtung vorw. Portd.7 = 1 'rechter Motor Ein OC2 Compare1a = Wert1 '255=Maxspeed : 0=Minspeed Compare1b = Wert2 Compare0 = Wert3 Compare2 = Wert4 Locate 2 , 7 : Lcd " " Locate 2 , 7 : Lcd Wert1 Locate 2 , 17 : Lcd " " Locate 2 , 17 : Lcd Wert2 Locate 3 , 7 : Lcd " " Locate 3 , 7 : Lcd Wert3 Locate 3 , 17 : Lcd " " Locate 3 , 17 : Lcd Wert4 Call Spannungmessen End Sub Sub Bremsen() 'Motoren Ein 'Linker Motor ein Porta.0 = 0 'Richtung vorw. Porta.1 = 0 'Richtung vorw. Portd.4 = 1 'Linker Motor EIN OC1B 'Rechter Motor ein Porta.2 = 0 'Richtung vorw. Porta.3 = 0 'Richtung vorw. Portd.5 = 1 'rechter Motor Ein OC1A Porta.4 = 0 'Richtung vorw. Porta.5 = 0 'Richtung vorw. Portb.3 = 1 'Linker Motor EIN OC0 'Rechter Motor ein Portb.0 = 0 'Richtung vorw. Portb.1 = 0 'Richtung vorw. Portd.7 = 1 'rechter Motor Ein OC2 Compare1a = 255 '255=Maxspeed : 0=Minspeed Compare1b = 255 Compare0 = 255 Compare2 = 255 Waitms 200 End Sub Sub Spannungmessen() 'Spannungsmessung an pin A7 Start Adc Volt1 = Getadc(7) 'Versorgungssp. Volt1 = Volt1 * 11 'Spannungsteiler 10k/1k Spannung1 = Volt1 * Fest Spannung1 = Spannung1 * 100 : Spannung1 = Int(spannung1) '*100 dann nur Vorkommastellen Spa1 = Str(spannung1) : Spa1 = Left(spa1 , 4) 'Die ersten 4 Stellen als String Locate 4 , 7 : Lcd " " 'Löschen If Spannung1 > 999 Then 'Mehr als 9.99V Locate 4 , 7 : Lcd Left(spa1 , 2) ; Chr(46) ; Mid(spa1 , 2 , 2) Goto Raus End If Locate 4 , 7 : Lcd Left(spa1 , 1) ; Chr(46) ; Mid(spa1 , 2 , 2) 'Weniger als 10 Raus: Locate 4 , 19 End Sub Sub Tastenabfrage() 'Diese Unterfunktion fragt die Taste An b4 ab Warten: Taste1 = Pinb.4 If Taste1 = 0 Then Taste1 = 1 Else Goto Warten 'Taste Betätigt, dann raus sonst warten End Sub