Forum: Mikrocontroller und Digitale Elektronik RS232 daten empfangen


von baur (Gast)


Lesenswert?

hallo

habe gerade ein problem

mit meiner rs232 schnittstelle. ich kann daten senden und weis nicht 
richtig wie ich daten empfangen kann. soweit ich weis sollten die daten 
im UDR stehen. wenn ich richtig liege.

verwende den atmega128 mit einem avr tool.
könnte mir da eventuel jemand helfen


dbaur

von jonny (Gast)


Lesenswert?

Hier ist meine ISR-Routine:
1
int NextChar;
2
unsigned char temp_str[40];
3
int rx_flag;
4
 
5
ISR(USART_RXC_vect)  {
6
  temp_str[NextChar] = UDR;
7
  if (temp_str[NextChar] == 0x0D) {
8
  rx_flag=1;
9
  NextChar=0;
10
  }
11
  else {
12
  NextChar++;
13
}
14
}

Das speichert alle empfangene Zeichen in dem Array temp_str. Also wir 
aus der Zeichenfolge: Test
temp_str[0] = T bzw. 0x54
temp_str[1] = e nzw. 0x65
temp_str[2] = s nzw. 0x73
temp_str[3] = t bzw. 0x74

Wenn jetzt Enter (0x0D) gedrückt gesendet wird, wird das Flag rx_flag 
gesetzt und mein Main-Programm reagriert drauf. Dabei wird auch NextChar 
wieder auf 0 gesetzt.

Jetzt könntest du mit Switch und Case die Zeichen abrfragen.
1
switch(temp_str[0]) {
2
case 0x54:
3
 // Zeichen ist ein großes T
4
break;
5
}

kann beliebig ausgeführt werden. Wenn du nur einzelne Zeichen abfragen 
willst, kannst du auch einfach mit switch und case das UDR-Register 
abfragen aber immer die Hex.-Nummern des Ascii-Zeichens angeben!!!

mfg jonny

von baur (Gast)


Lesenswert?

danke schon für die hilfe

nur ich verstehe noch nicht ganz was bei dir dieser befehl macht und für 
was er bei dir steht ->  "ISR(USART_RXC_vect)"



dbaur

von jonny (Gast)


Lesenswert?

Also da kann ich dir nur diese Links geben:
UART:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Der_UART
Interrupts:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmieren_mit_Interrupts
ISR:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#ISR


>> "ISR(USART_RXC_vect)"
Damit "sagt" man dem µC, was er machen soll, wenn er ein Zeichen per 
UART empfängt.
Man könnte ihm auch so "sagen" was er machen soll wenn ein Timer bis 30 
gezählt hat oder ähnliches.
Ist alles in den oben genannten Links vor allem ISR und Interrupt 
erklärt.

jonny

von baur (Gast)


Lesenswert?

ok

dank dir


noch einen schönen abend
dbaur

von jonny (Gast)


Lesenswert?

kein thema

jonny

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.