hier jetzt der Code:

Code:
'**** Über RS232 Schnittstelle Dateien an RN-Control senden :*******************
'Funktion:
'

'*******************************************************************************

'Microcontroller Einstellungen Definieren.
 $regfile = "m32def.dat"
 $framesize = 32
 $swstack = 32
 $hwstack = 32
 $crystal = 16000000
 $baud = 9600

'Funktionen Declarieren
Declare Function Tastaturabfrage() As Byte                  'Funktion für die Tastenabfrage am Board deklarieren
Declare Sub Batteriespannung()
Declare Sub Irentfernung1()
Declare Sub Motorschalten()
Declare Sub Motorschalten1()
Declare Sub Fuluftdruck()
Declare Sub Serial0charmatch()
Declare Sub Temperatur()

'*******************************************************************************
 'Variablen deklarieren:
Dim Ton As Integer
Dim Motordrehzahl As Integer
Dim Spannung As Word
Dim Taste As Byte
'Const Ref = 5 / 1023       'Umrechnungsfaktor von 8Bit Zahlenwert = 1023 bei 5 Volt Spannung in Gleitkommazahlenwert
Dim Luftdruck As Word
'Dim Hoehe As Integer

'Variablen für das Einlesen der Empfangenen Daten
Dim Inputstring As String * 30
Dim Inputarray(7) As String * 5
Dim Status As Bit
Dim Tmp As Byte
Dim Data_available As Byte
Dim Dempfangen As Byte
Dim Dempfangstring As String * 5
Dim Empfangstatus As Boolean
Dim Motorr As Integer
Dim Motorl As Integer
Dim Schildv As Integer
Dim Schildh As Integer
Dim Kamera As Integer

'Variablen zum für Daten die versendet werden sollen
Dim Fehlermeldung As String * 30
Dim Irabstand1 As Integer
Dim Irabstand2 As Integer
Dim Uabstand1 As Integer
Dim Uabstand2 As Integer
Dim Batteriestatus As Word
Dim Temperatura As Integer
Dim Temperaturi As Integer

'*******************************************************************************
'Ports definieren (Als was welcher Port sein soll)

Config Adc = Single , Prescaler = Auto                      'Für Tastenabfrage und Spannungsmessung benötigt
Config Pina.7 = Input                                       'Für Tastenabfrage wird PortA7 als eingang definiert
Porta.7 = 1                                                 'Pullup Widerstand am PortA7 ein
Config Portd.2 = Output                                     'Für Enfernungsmessung Ultraschall diesen Port als eingang definieren
Config Pina.2 = Input                                       'Für Luftdruckmessung diesen Port als eingang definieren
Config Pina.1 = Input                                       'Port für Temperaturinnen:

'Buffer Einstellen
Config Serialin = Buffered , Size = 40 , Bytematch = 13     'Empfang-Buffer erstellen und wenn Zeichen 13 (Enter) gesendet wurde in Prozedur Serial0charmatch springen
'Enable Interrupts

'Ports für linken Motor
Config Pinc.6 = Output                                      'Linker Motor Kanal 1
Config Pinc.7 = Output                                      'Linker Motor Kanal 2
Config Pind.4 = Output                                      'Linker Motor PWM
'Ports für rechten Motor
Config Pinb.0 = Output                                      'Rechter Motor Kanal 1
Config Pinb.1 = Output                                      'Rechter Motor Kanal 2
Config Pind.5 = Output                                      'Rechter Motor PWM


'*******************************************************************************
'Interrupt
Config Int0 = Rising                                        'Configuriere Int0  auf Low Level
On Int0 Isr_von_int0                                        'springe Zu Isr_von _int0
Enable Interrupts                                           'einschalten der Interrupts
Enable Int0                                                 'einschalten Von Interrupt Int0



Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Tccr1b = Tccr1b Or &H02                                     'Prescale = 8 (Quarzfrequenz duch 8)
Pwm1a = 0                                                   'Linker Motor  (Drehzahl)
Pwm1b = 0                                                   'Linker Motor  (Drehzahl)


'*******************************************************************************
'Hauptprogramm

'Hochfahren der RN-Control Signal
Sound Portd.7 , 400 , 450                                   'BEEP (Pin, Länge in ms des Pipsesn, Anzahl Pulse
Sound Portd.7 , 600 , 150                                   'BEEP
Sound Portd.7 , 400 , 500                                   'BEEP

Motorr = 0
Motorl = 0
Empfangstatus = 1
Schildv = 0
Schildh = 0
Kamera = 0

Do
   Taste = Tastaturabfrage()
   If Taste <> 0 Then
      Select Case Taste
         Case 1
            Empfangstatus = 0
         Case 2
            Empfangstatus = 1
         Case 3

         Case 4

         Case 5
            Print "Programm wurde abgebrochen"
            Sound Portd.7 , 800 , 400
            Exit Do
      End Select
   End If

   Temperatur                                               'Funktion Temperatur aufrufen
   Fehlermeldung = "Dies ist Ein Test"
   Irabstand1 = Schildv                                     '20
   Irabstand2 = Schildh                                     '10
   Uabstand1 = Motorr                                       '500
   Uabstand2 = Motorl                                       '100
   Batteriespannung
   Batteriestatus = Spannung
   Temperatura = Kamera
   Fuluftdruck                                              'Funktion Luftdruck auslesen starten


   If Empfangstatus = 1 Then
      Print 1 ; ";" ; Fehlermeldung ; ";" ; Irabstand1 ; ";" ; Irabstand2 ; ";" ; Uabstand1 ; ";" ; Uabstand2 ; ";" ; Batteriestatus ; ";" ; Temperatura ; ";" ; Temperaturi ; ";" ; Luftdruck ; ";" ; 23 ; ";"
      Empfangstatus = 1
   End If


   Motorschalten1                                           'Funktion Motor ausführen

   'Motorr = 0
   'Motorl = 0

   'Wenn Kamera gedreht werden soll dann Sound ausgeben
   If Kamera = 1 Then
      Sound Portd.7 , 10 , 800
      Waitms 20
      Kamera = 0
   End If

   If Kamera = -1 Then
      Sound Portd.7 , 10 , 400
      Waitms 20
      Kamera = 0
   End If


   Wait 1
Loop
End


'*******************************************************************************

'Funktionen Deklarieren (Unterprogramme)
'*******************************************************************************
'Diese Funktion fragt die Tastatur am analogen Port ab
Function Tastaturabfrage() As Byte
Local Ws As Word

   Tastaturabfrage = 0                                      'Variablen werte zuweisen
   Ton = 600                                                'Pipstonhöhe festlegen
      Start Adc
   Ws = Getadc(7)
   If Ws < 500 Then
      Select Case Ws
         Case 400 To 450                                    'Da nur ein port für die Taster verwendet wird
            Tastaturabfrage = 1                             'müssen verschiedene Spannungen abgefragt werden
            Ton = 550
         Case 330 To 380
            Tastaturabfrage = 2
            Ton = 500
         Case 260 To 305
            Tastaturabfrage = 3
            Ton = 450
         Case 180 To 220
            Tastaturabfrage = 4
            Ton = 400
         Case 90 To 130
            Tastaturabfrage = 5
            Ton = 350
         Case Else
            Print "Tastenabfrage anpassen! ADC Wert ws=" ; Ws
      End Select
      Sound Portd.7 , 400 , Ton                             'Sound ausgeben
      End If

End Function

Sub Serial0charmatch()                                      'Wenn Buffer voll ist bzw Zeichen 13 Gesendet wurde dann Diese Funktion ausführen

    Input Inputstring Noecho
    If Inputstring <> "" Then

      'Anweisung Aufteilen
       Tmp = Split(inputstring , Inputarray(1) , ";")

       '---- X Motorr---
       Dempfangen = Instr(inputarray(1) , "X")              'Gibt den Motorwert des Substrings "Motorr" aus oder NULL wenn nicht gefunden
       'Motorl_empfangen = Instr(inputarray(2) , "Y")        'Gibt den Motorwert des Substrings "Motorl" aus oder NULL wenn nicht gefunden

       If Dempfangen = 1 Then
          Dempfangstring = Mid(inputarray(1) , 2)           'Die erste stelle des Strings (Das Motorr) abschneiden
          Motorr = Val(dempfangstring)                      'String in Integer konvertieren
       End If
       Dempfangen = 0
       Dempfangstring = ""

       '---- Y Motorl ----
       Dempfangen = Instr(inputarray(2) , "Y")              'Gibt den Motorwert des Substrings "Motorr" aus oder NULL wenn nicht gefunden

       If Dempfangen = 1 Then
          Dempfangstring = Mid(inputarray(2) , 2)           'Die erste stelle des Strings (Das Motorr) abschneiden
          Motorl = Val(dempfangstring)                      'String in Integer konvertieren
       End If
       Dempfangen = 0
       Dempfangstring = ""

       '--- SH SchildH -----
       Dempfangen = Instr(inputarray(3) , "SH")             'Gibt den Motorwert des Substrings "Motorr" aus oder NULL wenn nicht gefunden

       If Dempfangen = 1 Then
          Dempfangstring = Mid(inputarray(3) , 3)           'Die erste stelle des Strings (Das Motorr) abschneiden
          Schildh = Val(dempfangstring)                     'String in Integer konvertieren
       End If
       Dempfangen = 0
       Dempfangstring = ""

       '--- SV SchildV -----
       Dempfangen = Instr(inputarray(4) , "SV")             'Gibt den Motorwert des Substrings "Motorr" aus oder NULL wenn nicht gefunden

       If Dempfangen = 1 Then
          Dempfangstring = Mid(inputarray(4) , 3)           'Die erste stelle des Strings (Das Motorr) abschneiden
          Schildv = Val(dempfangstring)                     'String in Integer konvertieren
       End If
       Dempfangen = 0
       Dempfangstring = ""

       '--- K Kamera-----
       Dempfangen = Instr(inputarray(5) , "K")              'Gibt den Motorwert des Substrings "Motorr" aus oder NULL wenn nicht gefunden

       If Dempfangen = 1 Then
          Dempfangstring = Mid(inputarray(5) , 2)           'Die erste stelle des Strings (Das Motorr) abschneiden
          Kamera = Val(dempfangstring)                      'String in Integer konvertieren
       End If
       Dempfangen = 0
       Dempfangstring = ""

    End If

End Sub


'Diese Funktion zeigt die Batteriespannung an
Sub Batteriespannung()
Local W As Word
   Start Adc
   W = Getadc(6)
   Spannung = W                                             '* Ref
   Spannung = Spannung                                      '* 5.2941
   'Print "Die aktuelle Spannung beträgt: " ; Spannung ; "Volt"
End Sub

'Diese Funktion schaltet den Motor an
Sub Motorschalten1()
   Dim Richtung1motorr As Bit
   Dim Richtung2motorr As Bit
   Dim Richtung1motorl As Bit
   Dim Richtung2motorl As Bit

   Motorr = Motorr * 10
   Motorl = Motorl * 10

   If Motorr < 0 Then
      Richtung1motorr = 0
      Richtung2motorr = 1
      Motorr = Motorr * -1
   Else
      Richtung1motorr = 1
      Richtung2motorr = 0
   End If

   If Motorl < 0 Then
      Richtung1motorl = 0
      Richtung2motorl = 1
      Motorl = Motorl * -1
   Else
      Richtung1motorl = 1
      Richtung2motorl = 0
   End If

   If Motorr > 1000 Then
      Motorr = 1000
   End If

   If Motorl > 1000 Then
      Motorl = 1000
   End If


   'Linker Motor ein
   Portc.6 = Richtung1motorl                                'Bestimmt Richtung 1 = Spannung      +
   Portc.7 = Richtung2motorl                                'Bestimmt Richtung 0 = Keine Spannung -
   Portd.4 = 1                                              'Linker Motor Ein

   'Rechter Motor ein
   Portb.0 = Richtung1motorr                                'Bestimmt Richtung 1 = Spannung      +
   Portb.1 = Richtung2motorr                                'Bestimmt Richtung 0 = Keine Spannung -
   Portd.5 = 1                                              'Rechter Motor ein

   Pwm1a = Motorl                                           'Linker Motor  (Drehzahl)
   Pwm1b = Motorr                                           'Rechter Motor (Drehzahl)

End Sub

'Diese Funktion schaltet den Motor an
Sub Motorschalten()
   If Motorr > 1000 Then
      Motorr = 1000
   End If

   'Linker Motor ein
   Portc.6 = 1                                              'Bestimmt Richtung 1 = Spannung      +
   Portc.7 = 0                                              'Bestimmt Richtung 0 = Keine Spannung -
   Portd.4 = 1                                              'Linker Motor Ein

   'Rechter Motor ein
    Portb.0 = 1                                             'Bestimmt Richtung 1 = Spannung      +
   Portb.1 = 0                                              'Bestimmt Richtung 0 = Keine Spannung -
   Portd.5 = 1                                              'Rechter Motor ein

   Dim I As Integer
   I = 0
   Do                                                       'Motor beschleunigen
      Pwm1a = I                                             'Linker Motor  (Drehzahl)
      Pwm1b = I                                             'Rechter Motor (Drehzahl)
      I = I + 5
      Waitms 1
   Loop Until I > Motorr                                    'maximalwert 1024

      Pwm1a = Motorl                                        'Linker Motor  (Drehzahl)
      Pwm1b = Motorr                                        'Rechter Motor (Drehzahl)

   Do                                                       'Motor abbremsen
      Pwm1a = I                                             'Linker Motor (Drehzahl)
      Pwm1b = I                                             'Rechter Motor (Drehzahl)
      I = I - 5
      Waitms 40
   Loop Until I < 1
     Pwm1a = 0                                              'Linker Motor aus
     Pwm1b = 0                                              'Rechter Motor aus
End Sub

'Diese Funktion zeigt den Luftdruck an
Sub Fuluftdruck()
Local Ws As Word

   Start Adc
   Ws = Getadc(2)
   Luftdruck = Ws
End Sub

'Diese Funktion zeigt die Temperatur an
Sub Temperatur()
   Start Adc
   Temperaturi = Getadc(1)
End Sub

'Interrupt Int0 Unterprogramm. Dieses wird gestartet wenn Signal an INT0 anliegt
Isr_von_int0:                                               'ISR von int0
Motorr = 0
Motorl = 0
Motorschalten1
Return