RS485 Protokoll

Gast #548844
Lesenswert?
• ▲
▼
Hallo! ich habe ein Problem mit RS485 bzw. RS232

Als Master µC fungiert ein AT89C51ED2, der einen 17 Byte langen Frame 
über RS485 versendet. Der Frame ist folgendermaßen aufgebaut:
1
typedef union
2
{
3
  struct
4
  {
5
    unsigned char ID;
6
    unsigned char slave_adress;
7
    unsigned char command;
8
    unsigned int temperature;
9
    float float_var1;
10
    float float_var2;
11
    unsigned int uint_var1;
12
    unsigned char sys_1;
13
    unsigned char checksum;
14
  } f;
15

16
  unsigned char byte[17];
17

18
} RS485_FRAME;

dieser Frame wird einfach über die serielle Schnittstelle gesendet.

==> Code für senden eines Bytes
1
void rs485_transmit(unsigned char zeichen)
2
{
3
  while(!TI);
4
    TI=0;
5
  SBUF=zeichen;
6

7
}

mit der folgenden Funktion wird somit dann der gesamte Frame gesendet
1
void sendframe(unsigned char *pframe, unsigned char length)
2
{
3
  unsigned char i=0;
4
  extern unsigned int interframe_gap;
5

6
  TXen=SEND;
7

8
  interframe_gap=0;
9
  //wait until minimal interframe gap is reached
10
  while(interframe_gap<5);
11
  
12
  for( i=0;i<length;i++)
13
  {
14
    rs485_transmit(*pframe);
15
    pframe++;
16

17
  }
18

19
  interframe_gap=0;
20

21
  while(!TI);
22

23
  TXen=RECEIVE;
24

25
}

Das Problem:

Wenn ich jetzt die Funktion rs485_sendframe aufrufe

==> sendframe(tx_frame.byte,sizeof(RS485_FRAME));

werden beim 1. mal nur 16 Byte gesendet. Wenn ich die Funktion danach 
ein 2. mal aufrufe werden 18 Byte gesendet (das letzte Byte vom vorigen 
Frame und die 17 Byte des aktuellen Frame)

Ich suche den Fehler schon wirklich lange. Vielleicht kann mir ja von 
euch jemand helfen. Danke schon für eure Bemühungen.

lg Markus

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.