Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Serielle Daten in die CC schreiben Kategorie: Programmierung C (von Endress - 3.12.2009 13:40)
Als Antwort auf Serielle Daten in die CC schreiben von Endress - 3.12.2009 11:22
Ich nutze:
C-Control Pro Mega128, CC-Pro 128 Application Board, Pro-Bot128
ok vergesst das mit dem Absturz, am anderen Rechner funktioniert es ohne
Abstürze.

Aber über ein paar Tips in Sachen Auswertung in C würde ich mich
trotzdem freuen.

Es funktioniert auch das Orginalbeispiel aus dem Buch vom Ulli nicht :


Der Port funktioniert, das habe ich schon getestet, aber egal was ich eingebe, er springt
mir nicht in die IF Anweisung, als wenn er nie eine 1 bekommen würde.

Wo liegt das Problem ?

Meine Versuche, den Eingebenen Wert wieder auszugeben quittiert Hyperterm mit Stillstand.

'RS232_Input

#define LED1 8
#define PortC0 16
#define PortC1 17
#define PortC2 18

Dim buffer(80) As Byte
Dim Text(40) As Char
Dim count, sz As Integer
Dim Command As Byte
Dim Daten_Buffer(10) As Byte
Dim Buffer_Index As Integer

Dim ADC_0 As Word
Dim ADC0_Str(5) As Char


'Hauptprogramm
Sub main()

    SPI_Disable()
    Serial_Init_IRQ(0,buffer,20,80,SR_8BIT Or SR_1STOP Or SR_NO_PAR,SR_BD19200)
    Command = 0

    'Ports konfigurieren
    Port_DataDirBit(PortC2,1)
    Port_DataDirBit(LED1,1)
    Port_WriteBit(LED1,0)
    AbsDelay(500)

    'Info
    Lab Infotext

    NEWLINE()
    Text = "C-Control PRO Ein-/Ausgabe"
    PRINTLN(Text)
    Text = "**************************"
    PRINTLN(Text)
    NEWLINE()

    Text = " 1 = PortC2 EIN"
    PRINTLN(Text)

    Text = " 2 = PortC2 AUS"
    PRINTLN(Text)

    Text = " 3 = LED1 OFF"
    PRINTLN(Text)
    NEWLINE()

    Port_WriteBit(PortC2,1)
    AbsDelay(200)
    Port_WriteBit(PortC2,0)

    Do While True

        RS232()

        Text(1)=Command
        Serial_WriteText(0,Text)

        '#1 = ADC0 einlesen
        If Command = 1 Then
           Command = 0
           Text = "C2 EIN"
           PRINT(Text)
           Port_WriteBit(PortC2,1)
           Goto Infotext
        End If

        '#2 = LED1 ON
        If Command = 2 Then
           Command = 0
           Text = "C2 AUS"
           PRINTLN(Text)
           Port_WriteBit(PortC2,0)
           Goto Infotext
        End If

        '#3 = LED1 OFF
        If Command = 3 Then
           Command = 0
           Text = "LED1 = OFF"
           PRINTLN(Text)
           Port_WriteBit(LED1,0)
           Goto Infotext
        End If

    End While

End Sub

'ADC über GetAdc auslesen
Sub GetAdc(Channel As Byte) As Word
    ADC_Set(ADC_VREF_VCC,Channel) 'Uref ist Versorgung 5Volt, andere Möglichkeiten siehe Hilfe
    Return ADC_Read()
End Sub

'ADC0 einlesen
Sub ADC_TEST()
    Port_DataDir(PortA, 0)      'PortA als Eingang! Wichtig für ADC6 und 7
    ADC_0 = GetAdc(0)
    Str_WriteWord(ADC_0,10,ADC0_Str,0,4)
    PRINTLN(ADC0_Str)
End Sub

'RS232 Daten holen
Sub RS232()
    Dim sz As Integer
    Dim Buffer_Cnt As Integer
    Buffer_Index = 0
    Command = 0                                      'RX Daten zurücksetzen, damit die
                                                     'Routinen max einmal ausgeführt werden
    Buffer_Cnt = Serial_IRQ_Info(0,RS232_FIFO_RECV)  'Abfrage wieviel Zeichen empfangen wurden

    If Buffer_Cnt <> 0 Then                          'es sind Daten da?

        Do While True                                'jetzt Daten einlesen
         Buffer_Index = Buffer_Index + 1             'Buffer Index Zähler
         sz=Serial_ReadExt(0)                        'Puffer auslesen
         If sz <> 13 Then                            'CR unterdrücken
             Daten_Buffer(Buffer_Index) = sz         'Byte in Array übergeben
             If sz=&H100 Then
                 Exit                                'bei 0x100 ist der Puffer leer
             Else
                 Command = Daten_Buffer(1)           'Daten werden zugeordnet
             End If
         End If
        End While

    End If
End Sub

'NEWLINE
Sub NEWLINE()
    Serial_Write(0,13)
    Serial_Write(0,10)
    AbsDelay(10)
End Sub

'PRINT
Sub PRINT(ByRef serial_text As Char)
    Serial_WriteText(0,serial_text)
    AbsDelay(10)
End Sub

'PRINTLN
Sub PRINTLN(ByRef serial_text As Char)
    Serial_WriteText(0,serial_text)
    AbsDelay(10)
    NEWLINE()
End Sub


Vielleicht gibt es auch eine einfache Methode drei Zeichen seriell zu übertragen
und auszuwerten ?


    Antwort schreiben


Antworten:

Re: Serielle Daten in die CC schreiben (von UlliS - 3.12.2009 17:02)
    Re: Serielle Daten in die CC schreiben (von Endress - 7.12.2009 13:40)
        Re: Serielle Daten in die CC schreiben (von UlliS - 7.12.2009 16:48)
            Re: Serielle Daten in die CC schreiben (von Endress - 9.12.2009 16:24)
                Re: Serielle Daten in die CC schreiben (von UlliS - 9.12.2009 16:52)
                    Re: Serielle Daten in die CC schreiben (von PeterS - 10.12.2009 17:36)
                       Re: Serielle Daten in die CC schreiben (von Endress - 11.12.2009 22:39)
                          Re: Serielle Daten in die CC schreiben (von PeterS - 12.12.2009 12:11)
                             Re: Serielle Daten in die CC schreiben (von UlliS - 12.12.2009 12:42)
                                Re: Serielle Daten in die CC schreiben (von Endress - 14.12.2009 12:55)