Hallo
Ich bin an verzweifeln mit dem uart.
Es will einfach nicht.
µC at90can128
externer 8MHz Quartz
Mein code:
Led 1s an, dann 1s aus.
Also wird alle 2s ein Zeichen geschickt.
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 | #include <avr/wdt.h>
|
4 |
|
5 | void usart0_init(unsigned long baudrate) // Initialize USART0
|
6 | {
|
7 | UBRR0H = 0;
|
8 | UBRR0L = baudrate; // set baud rate UBRRN sei 12 für 8 MHZ und 38400
|
9 | UCSR0B = (1<<RXEN) | (1<<TXEN); // enable receiver and transmitter
|
10 | UCSR0C = 0x06;// 8 Datenbit 1 Stoppbit no parity
|
11 | }
|
12 |
|
13 |
|
14 | void usart0_tx (char data) // transmit byte via usart0
|
15 | {
|
16 | while (!(UCSR0A & (1 << UDRE0))); // wait for empty transmit buffer
|
17 | UDR0 = data; // put data to buffer = send data
|
18 | }
|
19 |
|
20 |
|
21 | void main()
|
22 | {
|
23 | wdt_disable();
|
24 | usart0_init(12);
|
25 |
|
26 | while(1)
|
27 | {
|
28 | PORTC |= (1 << PINC6); //turn on led
|
29 | _delay_ms(1000);
|
30 | usart0_tx('i');
|
31 |
|
32 | PORTC &= ~(1 << PINC6);//turn off led
|
33 | _delay_ms(1000);
|
34 | }
|
35 | }
|
Es kommt leider jede Sekunde nur K? an.
also 2 Byte anstatt von einem.
Hab mir auch schon die anderen uart Threads durchgelesen.
Ich find den Fehler einfach nicht...