demmy
12.01.2014, 20:51
Hallo zusammen,
ich wollte wir einen kleinen Sendepuffer selber basteln, um Daten mittels UART über eine RS485 zu senden.
Dazu habe ich mir überlegt die Daten aus einem Bytearray nacheinander zu übertragen. Dafür zähle ich nach jedem Byte einen Zeiger um eins hoch.
Das Hochzählen und das Senden des nächsten Bytes soll im TXC interrupt erfolgen. Allerdings liegt genau hier das Problem. Es wird nur das erste Byte gesendet und dann wars das.
könnt Ihr mir erklären warum?
Das Programm sieht folgendermaßen aus:
' Interrupts global zulassen
Enable Interrupts
' Sendeinterrupt UART1
Enable Utxc1
On Utxc1 Onutxc1
Declare Sub Senden1
Rs485dir1 Alias Portb.1
Config Rs485dir1 = Output
Rs485dir1 = 0 ' Auf Empfangsmodus schalten
Sub Senden1
Rs485dir1 = 1 ' Auf Sendemodus schalten
Sendezeiger1 = 1 ' Zeiger wieder auf Anfang setzen
Waitus 10
Udr1 = S_bus_sendearray(sendezeiger1) ' Nächstes Byte senden an UART I/O Data Register
End Sub
Onutxc1:
Incr Sendezeiger1
If Sendezeiger1 < 18 Then
Toggle led
Udr1 = S_bus_sendearray(sendezeiger1)
Else
Waitus 10
Rs485dir1 = 0 ' Auf Empfangsmodus schalten
End If
Return
Das Senden soll beginnen, wenn das Unterprogramm Senden1 aufgerufen wird. Ich habe auch eine LED am µC die toggelt wenn das Interrupt aufgerufen wird. Sie toggelt genau einmal, Und ich empfange nur ein Byte!
Könnt Ihr mir bitte Helfen, ich weiß nicht wo mein Fehler ist.
Viele Grüße
ich wollte wir einen kleinen Sendepuffer selber basteln, um Daten mittels UART über eine RS485 zu senden.
Dazu habe ich mir überlegt die Daten aus einem Bytearray nacheinander zu übertragen. Dafür zähle ich nach jedem Byte einen Zeiger um eins hoch.
Das Hochzählen und das Senden des nächsten Bytes soll im TXC interrupt erfolgen. Allerdings liegt genau hier das Problem. Es wird nur das erste Byte gesendet und dann wars das.
könnt Ihr mir erklären warum?
Das Programm sieht folgendermaßen aus:
' Interrupts global zulassen
Enable Interrupts
' Sendeinterrupt UART1
Enable Utxc1
On Utxc1 Onutxc1
Declare Sub Senden1
Rs485dir1 Alias Portb.1
Config Rs485dir1 = Output
Rs485dir1 = 0 ' Auf Empfangsmodus schalten
Sub Senden1
Rs485dir1 = 1 ' Auf Sendemodus schalten
Sendezeiger1 = 1 ' Zeiger wieder auf Anfang setzen
Waitus 10
Udr1 = S_bus_sendearray(sendezeiger1) ' Nächstes Byte senden an UART I/O Data Register
End Sub
Onutxc1:
Incr Sendezeiger1
If Sendezeiger1 < 18 Then
Toggle led
Udr1 = S_bus_sendearray(sendezeiger1)
Else
Waitus 10
Rs485dir1 = 0 ' Auf Empfangsmodus schalten
End If
Return
Das Senden soll beginnen, wenn das Unterprogramm Senden1 aufgerufen wird. Ich habe auch eine LED am µC die toggelt wenn das Interrupt aufgerufen wird. Sie toggelt genau einmal, Und ich empfange nur ein Byte!
Könnt Ihr mir bitte Helfen, ich weiß nicht wo mein Fehler ist.
Viele Grüße