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


von Chris T. (chris0086)


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.
1
#include <avr/io.h>
2
#include <stdint.h>
3
4
#define BAUD 9600UL          // Baudrate
5
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
6
int main(void)
7
{
8
    UCSRB |= (1<<TXEN);                // UART TX einschalten
9
    UCSRC |= (1<<URSEL)|(3<<UCSZ0);    // Asynchron 8N1
10
11
    UBRRH = UBRR_VAL >> 8;
12
    UBRRL = UBRR_VAL & 0xFF;
13
    unsigned char daten;
14
    void USART_Transmit( unsigned char data )
15
    {
16
    /* Wait for empty transmit buffer */
17
    while ( !( UCSRA & (1<<UDRE)) )
18
    ;
19
    /* Put data into buffer, sends the data */
20
    UDR = data;
21
    }
22
23
24
    unsigned char USART_Receive( void )
25
    {
26
    /* Wait for data to be received */
27
    while ( !(UCSRA & (1<<RXC)) )
28
    ;
29
    /* Get and return received data from buffer */
30
    return UDR;
31
    }
32
   
33
    daten = USART_Receive();
34
    USART_Transmit(daten);
35
}


Das funktioniert, also schnittstelle und alles läuft
1
#include <avr/io.h>
2
#include <stdint.h>
3
4
#define BAUD 9600UL          // Baudrate
5
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
6
int main(void)
7
{
8
    UCSRB |= (1<<TXEN);                // UART TX einschalten
9
    UCSRC |= (1<<URSEL)|(3<<UCSZ0);    // Asynchron 8N1
10
11
    UBRRH = UBRR_VAL >> 8;
12
    UBRRL = UBRR_VAL & 0xFF;
13
14
    while (!(UCSRA & (1<<UDRE)))  /* warten bis Senden moeglich                   */
15
        {
16
        }
17
18
        UDR = 'x';
19
}
Aber für euch hoffe ich kein Problem mich zu berichtigen.

von holger (Gast)


Lesenswert?

int main(void)
{
    void USART_Transmit( unsigned char data )
    {
    }
}

Was ist daran wohl falsch?

von Chris T. (chris0086)


Lesenswert?

sags mir bitte, ich steh grad echt aufm schlauch

von Jean P. (fubu1000)


Lesenswert?

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

Gruß

von Chris T. (chris0086)


Lesenswert?

alles Klar... RXEN gesetzt und funzt danke euch erstmal

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.