Forum: Compiler & IDEs UART


von Matthias (Gast)


Lesenswert?

Ich will auf einem AT MEGA 644 ein Zeichen/ String empfangen.
Kann ich das so realisieren?:

main:
...
if(String[0] == 'D')
{
  PORTC|= (1<<PC4);
...


ISR(USART0_RX_vect)
{
  String_empf[n] = UDR0;  // empfangenes im String speichern
  n++;          // Zähler erhöhe
}

Oder wie prüfe ich ab, ob das erste Zeichen zB ein D ist?

von inoffizieller WM-Rahul (Gast)


Lesenswert?

>Kann ich das so realisieren?:

ja

von Matthias (Gast)


Lesenswert?

Problem, ich komme nicht in die ISR(USART0_RX_vect)woran könnte das
liegen?
Initialisiert hab ich das ganze:
#define UART_BAUD_RATE 9600    // Baudrate = 9600 Baud

UBRR0 = (F_CPU / (UART_BAUD_RATE * 16L)) - 1;  //Baudrate
UCSR0C = (3 << UCSZ00);    // 8bit, no parity, ein Stoppbit
UCSR0B = (1 << RXEN0)|(1 << RXCIE0);  // Empfänger freischalten
UCSR0B = (1 << TXEN0)|(1 << TXCIE0);  // Sender freischalten

von Joe D. (kosmonaut_pirx)


Lesenswert?

hallo,
im zweiten setzen des control-status-register überschreibst du wieder
das erste setzen. denke ich jdf.
bye kosmo

von inoffizieller WM-Rahul (Gast)


Lesenswert?

UCSR0B = (1 << RXEN0)|(1 << RXCIE0);  // Empfänger freischalten
UCSR0B = (1 << TXEN0)|(1 << TXCIE0);  // Sender freischalten

Kosmo hat Recht.
Also entweder so:
UCSR0B = (1 << RXEN0)|(1 << RXCIE0) | (1 << TXEN0)|(1 << TXCIE0);  //
Empfänger und Sender freischalten

Oder so:
UCSR0B = (1 << RXEN0)|(1 << RXCIE0);  // Empfänger freischalten
UCSR0B |= (1 << TXEN0)|(1 << TXCIE0);  // Sender freischalten

von Matthias (Gast)


Lesenswert?

Stimmt, ihr habt beide Recht jetzt funktioniert es.
Danke euch.
Matthias

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.