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

serielle Schnittstelle ausreden lassen Kategorie: Programmierung Basic (von Henning S. - 21.01.2009 10:20)
Ich nutze:
C-Control Pro Mega128
Moin, moin allerseits!

Ich bin gerade dabei, mich im Umgang mit der C-Control Mega 128 zu üben und habe dabei auch die
Funktionen der seriellen Schnittstelle mal ausprobiert. Das Beispielprogramm RS232_IRQ.cbas lief und
ich habe es dann ein wenig modifiziert - und bekam nur noch Garbage am Hyperterminal.


' 105 byte Sende + 20 byte Empfungspuffer + 6 byte interne FIFO Verwaltung
Dim buffer(131) As Byte                              ' Array deklariert

'------------------------------------------------------------------------------
' Hauptprogramm
'
Sub main()
    Dim Text1(40), Text2(5), ausgabe(80) As Char    ' Array deklariert

    Text1="Test Textrn"
    Text2="rn"

    ' Init RS232: 9600 bps, 8 Bit, 1 Stop, NP
    ' 20 byte Empfangspuffer - 105 byte Sendepuffer
    Serial_Init_IRQ(0,buffer,20,105,SR_8BIT Or SR_1STOP Or SR_NO_PAR,SR_BD9600)

    Serial_WriteText(0,Text2)                       ' CR und LF ausgeben
    Serial_WriteText(0,Text1)                       ' Text über RS232 ausgeben
    Serial_WriteText(0,Text2)                       ' CR und LF ausgeben

    ausgabe = "Hier kommt was aus dem Mikrocontroller raus, was sich der Henning aus"
    Serial_WriteText(0,ausgabe)
    Serial_WriteText(0,Text2)       ' CR und LF ausgeben

    ausgabe = "dem Hirn gewrungen hat. Aber mit meinen schreiberischen Fähigkeiten war"
    Serial_WriteText(0,ausgabe)
    Serial_WriteText(0,Text2)                       ' CR und LF ausgeben

    ausgabe = "das ja noch nie was gewesen."
    Serial_WriteText(0,ausgabe)
    Serial_WriteText(0,Text2)                       ' CR und LF ausgeben



Wenn ich ein

    AbsDelay(100)

nach jeder Ausgabe eingefügt hatte, klappte der Code. Aber diese Art der Ausbremsung kann's ja
wohl nicht sein. Mit büschen Lesen in der Doku kam ich auf Serial_IRQ_Info(), die (wohl) angibt, wie
viele nicht gesendete Bytes im Sendepuffer sind. Wenn ich nun

    Do While Serial_IRQ_Info(0,RS232_FIFO_SEND)<>0
    End While

zwischen die Ausgaben schreibe, ist die Bremse weg und es werden alle Zeichen sicher ausgegeben.

Vielleicht hilft diese Information ja, wenn man mal mit langsameren Geschwindigkeiten auf der seriellen
Schnittstelle arbeiten will (oder muss).

Hier noch einmal der endgültige Code.

' 105 byte Sende + 20 Empfungspuffer + 6 byte interne FIFO Verwaltung
Dim buffer(131) As Byte                              ' Array deklariert

'------------------------------------------------------------------------------
' Hauptprogramm
'
Sub main()
    Dim Text1(40), Text2(5), ausgabe(80) As Char    ' Array deklariert

    Text1="Test Textrn"
    Text2="rn"

    ' Init RS232: 9600 bps, 8 Bit, 1 Stop, NP
    ' 20 byte Empfangspuffer - 105 byte Sendepuffer
    Serial_Init_IRQ(0,buffer,20,105,SR_8BIT Or SR_1STOP Or SR_NO_PAR,SR_BD9600)

    Serial_WriteText(0,Text2)                       ' CR und LF ausgeben
    Serial_WriteText(0,Text1)                       ' Text über RS232 ausgeben

    Serial_WriteText(0,Text2)                       ' CR und LF ausgeben

    Do While Serial_IRQ_Info(0,RS232_FIFO_SEND)<>0
    End While
    ausgabe = "Hier kommt was aus dem Mikrocontroller raus, was sich der Henning aus"
    Serial_WriteText(0,ausgabe)
    Serial_WriteText(0,Text2)       ' CR und LF ausgeben

    Do While Serial_IRQ_Info(0,RS232_FIFO_SEND)<>0
    End While
    ausgabe = "dem Hirn gewrungen hat. Aber mit meinen schriftstellerischen Fähigkeiten war"
    Serial_WriteText(0,ausgabe)
    Serial_WriteText(0,Text2)                       ' CR und LF ausgeben

    Do While Serial_IRQ_Info(0,RS232_FIFO_SEND)<>0
    End While
    ausgabe = "das ja noch nie was gewesen."
    Serial_WriteText(0,ausgabe)
    Serial_WriteText(0,Text2)                       ' CR und LF ausgeben

End Sub


GruÃ? Henning

 


    Antwort schreiben


Antworten:

Re: serielle Schnittstelle ausreden lassen (von Gregor - 27.01.2009 14:57)