-
USART Receiver
Hab im Datenblatt des Mega32 folgenden Codeschnipsel gefunden:
Code:
unsigned char USART_Receive( void )
{
/* Wait for data to be received */
while ( !(UCSRA & (1<<RXC)) )
;
/* Get and return received data from buffer */
return UDR;
}
alles soweit klar...
Meine Frage ist nun wie kann ich das ganze jetzt weiterverwenden? Hat jemand sowas schonmal gemacht?
MFG B.Rust
-
Stand da nicht noch ein wenig Text ringsherum? :-)
Weiterverwenden kannst du das, wenn du den USART auf eingehende Zeichen pollen willst. Alternativ kannst du auch einen Interrupt nutzen. Steht aber alles im Datasheet.
Verwendet haben das sicherlich schon viele.
-
Daten senden hab ich ja gepackt, aber empfangen ist irgendwie ungemein schwieriger...
-
Hallo
Daten empfangen machst du am besten mit dem UART Recive Complete Int.
Wenn der Avr ein Zeichen empfangen hat, löst er einen Interrupt aus. Daraufhin springt er in die UART Recive Complete Int. Routine. Dort speicherst du UDR in eine Variable und fertig.
In deinem Hauptprogramm wertest du das Zeichen dann aus.
So ganz grob in der Weise
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
volatile uchar Daten;
SIGNAL(SIG_UART_RECV)
{
Daten = UDR;
}
void main(void)
{
UCSRB = (1<<TXEN) |(1<<RXEN)|( 1<<RXCIE) ;
//Interrupts freigeben
sei();
for(;;)
{
if(Daten == 'A')
{
Daten = 0;
// Mach was bei A
}
if(Daten == 'e')
{
Daten = 0;
// Mach was bei e
}
}
}
MFG
Dieter
-
ok vielen dank. empfangen und verarbeiten hat soweit geklappt. interrupts zwar noch nicht, das kommt dann morgen.
MFG B.Rust