Hi, ich hab einen ATMega 8 mit einem FT232 mit dem PC verbunden. Und wollte zum testen ein serielles Echos schreiben: echo.c:
1 | #include "serialIO.h" |
2 | |
3 | #define FOSC 1200000
|
4 | #define BAUD 9600
|
5 | #define UBRR FOSC/16/BAUD-1
|
6 | |
7 | |
8 | void main(void) |
9 | {
|
10 | USART_Init(UBRR) ; |
11 | |
12 | |
13 | while(1) |
14 | {
|
15 | USART_Transmit(USART_Receive()); |
16 | }
|
17 | }
|
serialIO.c:
1 | #include "serialIO.h" |
2 | |
3 | void USART_Init(unsigned int ubrr) |
4 | {
|
5 | // Calc speed
|
6 | //unsigned int ubrr = freq / 16 / baud - 1;
|
7 | |
8 | // Set Baudrate
|
9 | UBRRH = (unsigned char) (ubrr>>8); |
10 | UBRRL = (unsigned char) ubrr; |
11 | |
12 | // Enable RX and TX
|
13 | UCSRB = (1<<RXEN)|(1<<TXEN); |
14 | // Set 8n1
|
15 | UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1); |
16 | }
|
17 | |
18 | void USART_Transmit(char data) |
19 | {
|
20 | // Wait for empty transmit buffer
|
21 | while(!(UCSRA & (1<<UDRE)) ); |
22 | |
23 | // Set data
|
24 | UDR = data; |
25 | }
|
26 | |
27 | char USART_Receive(void) |
28 | {
|
29 | // Wait for data to be received
|
30 | while(!(UCSRA & (1<<RXC)) ); |
31 | |
32 | // Get Data and return
|
33 | return UDR; |
34 | }
|
Jedoch wird aus einem s ein c machmal werden die Buchstaben auch als Großbuchstaben ausgegeben. Woran könnte das liegen ? Gruß SkySurfer