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 UlliS - 3.12.2009 17:02)
Als Antwort auf Re: Serielle Daten in die CC schreiben von Endress - 3.12.2009 13:40
Ich nutze:
C-Control Pro Mega32, C-Control Pro Mega128, CC-Pro 32 Application Board, 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 ?

Hi,

die Beispiele und auch das Beispiel RS232_Input funktionieren.
Ich habe die eben nochmals getestet, aber du musst die Zeichen als Byte also Integer senden
nicht ASCII codiert! Nimm mal das interne Terminal der IDE und versuche es nochmal :-)

Grü�e Ulli



    Antwort schreiben


Antworten:

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)