Forum: Mikrocontroller und Digitale Elektronik Hardwarehandshake RTS/CTS benutzen


von M. K. (sylaina)


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.

von Falk B. (falk)


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.

von M. K. (sylaina)


Lesenswert?

Falk B. schrieb:
> Das RTS setzen und löschen packt man besser in sendstring, dort gehört
> es hin.

OK, dann pack ich es da rein. Danke für den Tipp, Falk.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.