Hardwarehandshake RTS/CTS benutzen

OP #4317345
Lesenswert?
• ▲
▼
Hallo,

ich habe eine Frage zum Hardwarehandshake. Und zwar muss man ja, bevor 
man Daten sendet, fragen ob die Gegenseite bereit ist Daten zu senden. 
Meine Frage ist nun: Setze ich den RTS-Pin permament wenn ich Daten 
senden will und schaue nur bei jedem Zeichen, ob die Gegenstelle CTS 
gesetzt hat oder setze ich bei jedem Zeichen, dass gesendet werden soll, 
RTS, warte auf CTS und lösche RTS wieder wenn das Zeichen gesendet 
wurde?

Aktuell habe ich letzteres implementiert, weiß aber nicht ob das 
wirklich sinnvoll ist:
1
void sendChar(unsigned char sendChar){
2
    {
3
        /* Wait for empty transmit buffer */
4
        while ( !( UCSR0A & (1<<UDRE0)) );
5
        /* hardware-handshake */
6
        /* set Request to Send (RTS) */
7
        PORTD |= (1 << RTS);
8
        /* wait for Clear to Send Signal from Reciver */
9
        while (PIND & (1 << CTS));
10
        /* Put data into buffer, sends the data */
11
        UDR0 = sendChar;
12
        PortD &= ~(1 << RTS);
13
    }
14
}

Oder ob nicht
1
…
2
void sendChar(unsigned char sendChar){
3
    {
4
        /* Wait for empty transmit buffer */
5
        while ( !( UCSR0A & (1<<UDRE0)) );
6
        /* hardware-handshake */
7
        /* wait for Clear to Send Signal from Reciver */
8
        while (PIND & (1 << CTS));
9
        /* Put data into buffer, sends the data */
10
        UDR0 = sendChar;
11
    }
12
}
13
…
14
void sendString(char* string) {
15
    while (*string) {
16
        sendChar(*string);
17
        string++;
18
    }
19
}
20
…
21
PORTD |= (1 << RTS);
22
sendString("Hallo Welt");
23
PORTD &= ~(1 << RTS);
24
…
sinnvoller wäre.
#4317354
Lesenswert?
• ▲
▼
@ Michael Köhler (sylaina)

>Meine Frage ist nun: Setze ich den RTS-Pin permament wenn ich Daten
>senden will

Ja.

> und schaue nur bei jedem Zeichen, ob die Gegenstelle CTS
>gesetzt hat oder setze ich bei jedem Zeichen, dass gesendet werden soll,
>RTS, warte auf CTS und lösche RTS wieder wenn das Zeichen gesendet
>wurde?

Eher nicht.


>PORTD |= (1 << RTS);
>sendString("Hallo Welt");
>PORTD &= ~(1 << RTS);

Das RTS setzen und löschen packt man besser in sendstring, dort gehört 
es hin.

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.