Ich habe heute leider noch ein Anliegen:
Folgendes Programm soll über den UART1 eines ATmega128 die Nachricht
"Test" ausgeben. Das Programm soll nur zum Test der UART-Schnittstelle
dienen. Leider kann ich sowohl am PC, als auch mit einem Oszi direkt am
Mikrocontroller nichts erkennen.
1 | /*
|
2 | * TestUARTATmega128.c
|
3 | *
|
4 | * Created: 18.01.2016 13:52:28
|
5 | * Author : Jens
|
6 | */
|
7 |
|
8 | #include <avr/io.h>
|
9 |
|
10 | #define F_CPU 800000L
|
11 | #define BAUD 9600L
|
12 | #define MYUBRR F_CPU/16/BAUD-1
|
13 |
|
14 | void debug_message(char *pt);
|
15 | void init_uart2(uint32_t baudRate);
|
16 |
|
17 | int main(void)
|
18 | {
|
19 | uint8_t output;
|
20 |
|
21 | // Init UART
|
22 | init_uart2(MYUBRR);
|
23 |
|
24 | while (1)
|
25 | {
|
26 | debug_message("Test\n\r");
|
27 | }
|
28 | }
|
29 |
|
30 | // Transmit a message through the debug interface (UART2)
|
31 | void debug_message(char *pt)
|
32 | {
|
33 | while(*pt != '\0')
|
34 | {
|
35 | while(!(UCSR1A & (1<<UDRE1))); // Wait while transmitter is busy
|
36 | UDR1 = *pt; // Write data to output register
|
37 | pt++;
|
38 | }
|
39 | }
|
40 |
|
41 | void init_uart2(uint32_t baudRate)
|
42 | {
|
43 | uint8_t output;
|
44 |
|
45 | UBRR1L = (unsigned char) baudRate; // Baudrate Low Byte
|
46 | UBRR1H = (unsigned char) (baudRate >> 8); // High Byte
|
47 |
|
48 | UCSR1B |= (1<<TXEN1) | (1<<RXEN1) | (1<<RXCIE1); // Enable receiver, transmitter and receive interrupt
|
49 | UCSR1C |= (1<<UCSZ11) | (1<<UCSZ10); // Data format 8N1
|
50 |
|
51 | output = UDR1; // Reset receive register
|
52 | }
|