tanger
07.03.2008, 22:00
Hi,
wenn ich über meinen UART Daten übertrage ist das 1. Bit immer 1 ich schicke eine 0 hin 00000000 und bekomme 10000000 zurück und das bei allen zahlen.
Ich benutze einen AtMega16 mit internem 1MHZ die übetragung läuft über einen max232 Chip
Eigenschaften:
Baud 9600 kein parity 8 bit 1 stop
Programm:
#define F_CPU 1000000UL
#define BAUD 9600UL
#define UBRR_BAUD ((F_CPU/(16UL*BAUD))-1)
void uart_init(void)
{
// Baudrate einstellen (Normaler Modus)
UBRRH = (unsigned char) (UBRR_BAUD>>8);
UBRRL = (unsigned char) (UBRR_BAUD & 0x0ff);
// Aktivieren des Empfängers, des Senders und des "Daten empfangen"-Interrupts
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
// Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}
SIGNAL(SIG_UART_RECV)
{
unsigned char buffer;
// Daten aus dem Puffer lesen ...
buffer = UDR;
// ... warten bis der Sendepuffer leer ist ...
while ( !( UCSRA & (1<<UDRE)) )
;
// ... und gleich wieder zurück schicken
UDR = buffer;
}
Vielen Dank
Martin
wenn ich über meinen UART Daten übertrage ist das 1. Bit immer 1 ich schicke eine 0 hin 00000000 und bekomme 10000000 zurück und das bei allen zahlen.
Ich benutze einen AtMega16 mit internem 1MHZ die übetragung läuft über einen max232 Chip
Eigenschaften:
Baud 9600 kein parity 8 bit 1 stop
Programm:
#define F_CPU 1000000UL
#define BAUD 9600UL
#define UBRR_BAUD ((F_CPU/(16UL*BAUD))-1)
void uart_init(void)
{
// Baudrate einstellen (Normaler Modus)
UBRRH = (unsigned char) (UBRR_BAUD>>8);
UBRRL = (unsigned char) (UBRR_BAUD & 0x0ff);
// Aktivieren des Empfängers, des Senders und des "Daten empfangen"-Interrupts
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
// Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}
SIGNAL(SIG_UART_RECV)
{
unsigned char buffer;
// Daten aus dem Puffer lesen ...
buffer = UDR;
// ... warten bis der Sendepuffer leer ist ...
while ( !( UCSRA & (1<<UDRE)) )
;
// ... und gleich wieder zurück schicken
UDR = buffer;
}
Vielen Dank
Martin