- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 5 von 5

Thema: USART Receiver

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    14.10.2004
    Beiträge
    9

    USART Receiver

    Anzeige

    Powerstation Test
    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

  2. #2
    Gast
    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.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    14.10.2004
    Beiträge
    9
    Daten senden hab ich ja gepackt, aber empfangen ist irgendwie ungemein schwieriger...

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    28.04.2004
    Ort
    Nähe Köln
    Alter
    58
    Beiträge
    247
    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

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    14.10.2004
    Beiträge
    9
    ok vielen dank. empfangen und verarbeiten hat soweit geklappt. interrupts zwar noch nicht, das kommt dann morgen.

    MFG B.Rust

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen