PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : USART Receiver



B.Rust
01.12.2004, 18:24
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

01.12.2004, 18:33
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.

B.Rust
01.12.2004, 19:15
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

B.Rust
01.12.2004, 22:17
ok vielen dank. empfangen und verarbeiten hat soweit geklappt. interrupts zwar noch nicht, das kommt dann morgen.

MFG B.Rust