Ich habe die uart_puts und uart_putc für meinen Atmega128 eingebunden,
wie hier beschrieben:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Schreiben_einer_Zeichenkette_.28String.29
Die Registernamen habe ich geändert.
Konfiguration auf 9600, 8 Datenbits, 1 Stopbit, No Parity, Asynchronous.
Am PC ist ein Terminal-Programm eingeschaltet, was für den String
("Hallo") aber nur ‹Ë½!…±ÙoHal¶oHal¶ und noch ein paar mehr wirre
Zeichen ausgibt. Außerdem wundert mich, dass die Zeichen ständig
ausgegeben werden, obwohl keine Schleife implementiert ist. Bei 9600
Baud dürfte das doch eigentlich nicht passieren. Woran kann das liegen?
Hier der Code:
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 | #include <stdio.h>
|
4 |
|
5 | #ifndef F_CPU
|
6 | #define F_CPU 16000000UL
|
7 | #endif
|
8 |
|
9 |
|
10 |
|
11 | int uart_putc(unsigned char c)
|
12 | {
|
13 | while (!(UCSR0A & (1<<UDRE0))) /* warten bis Senden moeglich */
|
14 | {
|
15 | }
|
16 |
|
17 | UDR0 = c; /* sende Zeichen */
|
18 | return 0;
|
19 | }
|
20 |
|
21 |
|
22 | /* puts ist unabhaengig vom Controllertyp */
|
23 | void uart_puts (char *s)
|
24 | {
|
25 | while (*s)
|
26 | { /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */
|
27 | uart_putc(*s);
|
28 | s++;
|
29 | }
|
30 | }
|
31 |
|
32 |
|
33 |
|
34 | int main(void)
|
35 | { // RS232 Buffer
|
36 |
|
37 | // USART initialization
|
38 | // Communication Parameters: 8 Data, 1 Stop, No Parity
|
39 | // USART Receiver: On
|
40 | // USART Transmitter: On
|
41 | // USART Mode: Asynchronous
|
42 | // USART Baud rate: 9600
|
43 | UCSR0A=0x00;
|
44 | UCSR0B=0x18;
|
45 | UCSR0C=0x86;
|
46 | UBRR0H=0x00;
|
47 | UBRR0L=0x67;
|
48 |
|
49 | uart_puts("Hallo");
|
50 | return 0;
|
51 |
|
52 | }
|