Hallo,
ich möchte gerne einen String mit beliebiger länger senden und empfangen
(UART) können. Der String welcher empfangen wird, der soll wieder
gesendet werden (Terminal String senden, Mikrocontroller empfängt und
schickt wieder an Terminal). Komme nicht weiter, was mach ich falsch?
Würde mich über Antworten freuen, danke.
MfG Sepp
-----------------------------------------------------------------
1 | #include <avr/io.h>
|
2 |
|
3 | #define F_CPU 3686400ul
|
4 | #define BAUD 9600
|
5 | #define UBRR_VAL = ((3686400/(9600*16))-1)
|
6 |
|
7 | void uart_tx();
|
8 | char* string[];
|
9 | unsigned char* str;
|
10 |
|
11 | void uart_init(void) {
|
12 | UBRR0H = 0x00;
|
13 | UBRR0L = 0x17;
|
14 |
|
15 |
|
16 | UCSR0B = (1<<TXEN0) | (1<<RXEN0); // UART TX und RX einschalten
|
17 | UCSR0C = (1<<USBS0)|(1<<UCSZ01)|(1<<UCSZ00); // Asynchron 8N2
|
18 | }
|
19 |
|
20 | int main(void) {
|
21 | uart_init();
|
22 | uart_tx(str);
|
23 | uart_rx();
|
24 | }
|
25 |
|
26 | void uart_rx(unsigned char *str) {
|
27 | while (!(UCSR0A & (1<<RXC0))) { //warten bis Zeichen verfuegbar
|
28 | }
|
29 | str = UDR0++;
|
30 | }
|
31 |
|
32 | void uart_tx(unsigned char *str) {
|
33 | while(*str != 0) {
|
34 | while (!(UCSR0A & (1<<UDRE0))) { // warten bis Senden moeglich
|
35 | }
|
36 | UDR0 = *str++; //Zeichen für Zeichen wird übertragen
|
37 | }
|
38 | }
|
-----------------------------------------------------------