Archiv verlassen und diese Seite im Standarddesign anzeigen : USART Receiver
Hab im Datenblatt des Mega32 folgenden Codeschnipsel gefunden:
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...
Dino Dieter
01.12.2004, 20:07
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
#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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.