www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Anfängerprobleme C und AVR - zeichen empfangen und senden


Autor: Chris Tian (chris0086)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute ich bin Anfänger in c ´mit AVR´s.
Ich habe eigentlich eine simple Routine die mir zeichen die ich über die 
serielle schicke emfpängt und eigentlich wieder zurück senden soll.
Funktioniert bloß nicht  und ich finde den Fehler nicht. Nur die Routine
(aus dem Tutorial) zum senden eines Zeichens alleine funkioniert, aber 
das dann nicht.
#include <avr/io.h>
#include <stdint.h>

#define BAUD 9600UL          // Baudrate
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
int main(void)
{
    UCSRB |= (1<<TXEN);                // UART TX einschalten
    UCSRC |= (1<<URSEL)|(3<<UCSZ0);    // Asynchron 8N1

    UBRRH = UBRR_VAL >> 8;
    UBRRL = UBRR_VAL & 0xFF;
    unsigned char daten;
    void USART_Transmit( unsigned char data )
    {
    /* Wait for empty transmit buffer */
    while ( !( UCSRA & (1<<UDRE)) )
    ;
    /* Put data into buffer, sends the data */
    UDR = data;
    }


    unsigned char USART_Receive( void )
    {
    /* Wait for data to be received */
    while ( !(UCSRA & (1<<RXC)) )
    ;
    /* Get and return received data from buffer */
    return UDR;
    }
   
    daten = USART_Receive();
    USART_Transmit(daten);
}


Das funktioniert, also schnittstelle und alles läuft
#include <avr/io.h>
#include <stdint.h>

#define BAUD 9600UL          // Baudrate
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
int main(void)
{
    UCSRB |= (1<<TXEN);                // UART TX einschalten
    UCSRC |= (1<<URSEL)|(3<<UCSZ0);    // Asynchron 8N1

    UBRRH = UBRR_VAL >> 8;
    UBRRL = UBRR_VAL & 0xFF;

    while (!(UCSRA & (1<<UDRE)))  /* warten bis Senden moeglich                   */
        {
        }

        UDR = 'x';
}
Aber für euch hoffe ich kein Problem mich zu berichtigen.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
int main(void)
{
    void USART_Transmit( unsigned char data )
    {
    }
}

Was ist daran wohl falsch?

Autor: Chris Tian (chris0086)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sags mir bitte, ich steh grad echt aufm schlauch

Autor: Jean Player (fubu1000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
RXEN Bit in UCSRB setzen wäre nit schlecht. Zudem weren Funktionen 
außerhalb der main deklariert und definiert.

Gruß

Autor: Chris Tian (chris0086)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
alles Klar... RXEN gesetzt und funzt danke euch erstmal

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.