www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RS485 Protokoll


Autor: markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
typedef union
{
  struct
  {
    unsigned char ID;
    unsigned char slave_adress;
    unsigned char command;
    unsigned int temperature;
    float float_var1;
    float float_var2;
    unsigned int uint_var1;
    unsigned char sys_1;
    unsigned char checksum;
  } f;

  unsigned char byte[17];

} RS485_FRAME;

dieser Frame wird einfach über die serielle Schnittstelle gesendet.

==> Code für senden eines Bytes
void rs485_transmit(unsigned char zeichen)
{
  while(!TI);
    TI=0;
  SBUF=zeichen;

}

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

  TXen=SEND;

  interframe_gap=0;
  //wait until minimal interframe gap is reached
  while(interframe_gap<5);
  
  for( i=0;i<length;i++)
  {
    rs485_transmit(*pframe);
    pframe++;

  }

  interframe_gap=0;

  while(!TI);

  TXen=RECEIVE;

}

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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.