Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > 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 >