Uart Problem mit atmega8 (TXC bit?)

Gast #49680
void
txoff() {
        // wait for bytes still to go
        loop_until_bit_is_set(UCSRA, TXC);
        PORTD &= ~_BV(PD2);     // disable transmitter
        UCSRB |= _BV(TXEN);     /* rx enable */
        PORTC |= _BV(PC3);      // disable txled
}

Obige Funktion sollte eigendlich den Ausgangstreiber für eine
Halbduplex RS485 Anwendung abschalten, sobald das letzte Zeichen
verschickt wurde.
Allerdings kommt das Programm scheinbar nicht über die Warteschleife
hinweg.
Unten sind noch mal die wichtige Funktionen für die Ausgabe.

inline void
sio_putchar(uint8_t c)
{
        loop_until_bit_is_set(UCSRA, UDRE);
        UDR = c;
}

#define SYSCLK 7372800UL
#define BPS_RATE 9600UL

void
ioinit() {
        /* setup UART */
        UCSRB = _BV(TXEN) | _BV(RXEN); /* rx/tx enable */
        UBRRL = (SYSCLK / (16 * BPS_RATE)) - 1; /* Bd */

        PORTD &= ~_BV(PD2);     // disable transmitter
        DDRD |= _BV(PD2);       // set txen as output
...
}

void
txon() {
        PORTD |= _BV(PD2);      // enable transmitter
        UCSRB &= ~_BV(TXEN);    /* rx disable */
        PORTC &= ~_BV(PC3);     // enable txled
}
Gast
Jetzt habe ich die Hoffnung, daß ein anderes Augenpaar meinen Fehler
sieht.
Evtl mache ich ja im Umgang mit dem TXC bit etwas falsch und habe
irgendwas wichtiges in der Doku überlesen.
Gast
Ich habe gerade den Fehler gefunden.
Anstellen den Empfänger vor der Übertragung (zur Echounterdrückung) zu
deaktivieren habe ich den Sender abgeschaltet.
Dann können die Zeichen natürlich nicht raus.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.