Servus miteinander,
irgendwie kriege ich es mal wieder nicht hin. Ich habe einen AtMega32 und da will der USART nicht so wie ich will.
Hier ist der Code:
In meinem Programm stelle ich 9600 8N1 und sende was, es kommt nichts zurück.
Wenn ich dann den Code wie folgt abändere, bekomme ich nur "\0" (hex 0x00) zu sehen:
Ich verwende einen externen Quarz mit 14,7456MHz. Die Fusebits sind:
low: FF
high: 99
Danke & Grüsse
Heinrich
irgendwie kriege ich es mal wieder nicht hin. Ich habe einen AtMega32 und da will der USART nicht so wie ich will.
Hier ist der Code:
Code:
#include <avr/io.h>
#define BaudRate 9600UL
#define F_CPU 14745600UL
int main (void) {
uint16_t ubrr = (uint16_t) ((uint32_t)F_CPU / (16*BaudRate)-1);
UBRRH = (uint8_t)(ubrr >> 8);
UBRRL = (uint8_t)(ubrr);
UCSRB = (1 << RXEN)|(1 << TXEN)|(1 << RXCIE);
// 8N1
UCSRC = (1 << UPM1)|(1 << UCSZ1)|(1 << UCSZ0);
unsigned char buffer;
while (1) {
while ( !(UCSRA & (1<<RXC)) ) ;
buffer = UDR;
while ( !( UCSRA & (1<<UDRE)) );
UDR = buffer;
}
return 0;
}
In meinem Programm stelle ich 9600 8N1 und sende was, es kommt nichts zurück.
Wenn ich dann den Code wie folgt abändere, bekomme ich nur "\0" (hex 0x00) zu sehen:
Code:
#include <avr/io.h>
#define BaudRate 9600UL
#define F_CPU 14745600UL
int main (void) {
uint16_t ubrr = (uint16_t) ((uint32_t)F_CPU / (16*BaudRate)-1);
UBRRH = (uint8_t)(ubrr >> 8);
UBRRL = (uint8_t)(ubrr);
UCSRB = (1 << RXEN)|(1 << TXEN)|(1 << RXCIE);
// 8N1
UCSRC = (1 << UPM1)|(1 << UCSZ1)|(1 << UCSZ0);
unsigned char buffer = 'a';
while (1) {
while ( !( UCSRA & (1<<UDRE)) );
UDR = buffer;
}
return 0;
}
Ich verwende einen externen Quarz mit 14,7456MHz. Die Fusebits sind:
low: FF
high: 99
Danke & Grüsse
Heinrich