Hallo, wir haben bei unserem kleinen Tester folgendes Problem: Der Funktion WriteUARTStringPC ()kann kein String übergeben werden. Bitte um Hilfe. Es wird auf einem ATMEGA128 mit einem 7372000 Quarz programmiert. Quellcode
1 | |
2 | #include <avr/io.h> |
3 | #include <avr/interrupt.h> |
4 | //#include <util/delay.h>
|
5 | #include <inttypes.h> |
6 | #include <string.h> |
7 | |
8 | #define FOSC 7372000 //clock speed
|
9 | #define BAUD 9600
|
10 | #define MYUBRR FOSC/16/BAUD-1
|
11 | |
12 | //typeset unsigned char uchar;
|
13 | //set baud rate
|
14 | |
15 | |
16 | |
17 | void USART0Init(unsigned int ubrr0) |
18 | { //set Bausdrate |
19 | UBRR0H = (ubrr0>>8); |
20 | UBRR0L = (ubrr0); |
21 | |
22 | //transmit enable / 1 stopbit, 8 databits
|
23 | UCSR0B = 0x18; //?!?!?!?!?!?!?!?!? |
24 | UCSR0C = 0x06; |
25 | }
|
26 | |
27 | |
28 | char ReadPcUART() |
29 | {
|
30 | while (!(UCSR0A & (1<<RXC0))) // warten bis Zeichen verfuegbar |
31 | ;
|
32 | return UDR0; |
33 | }
|
34 | |
35 | void ReadStringPCUART( char* Buffer, uint8_t MaxLen ) |
36 | {
|
37 | uint8_t NextChar; |
38 | uint8_t StringLen = 0; |
39 | |
40 | NextChar = ReadPcUART(); // Warte auf und empfange das n‰chste Zeichen |
41 | |
42 | // Sammle solange Zeichen, bis:
|
43 | // * entweder das String Ende Zeichen kam
|
44 | // * oder das aufnehmende Array voll ist
|
45 | while( NextChar != '\n' && StringLen < MaxLen + 1 ) { |
46 | *Buffer++ = NextChar; |
47 | StringLen++; |
48 | NextChar = ReadPcUART(); |
49 | }
|
50 | |
51 | // Noch ein '\0' anh‰ngen um einen Standard
|
52 | // C-String daraus zu machen
|
53 | //*Buffer = '\0';
|
54 | }
|
55 | |
56 | |
57 | void WriteCharPC (unsigned char cData) |
58 | {
|
59 | while (!(UCSR0A & (1<<UDRE0))) /* warten bis Senden moeglich */ |
60 | {
|
61 | }
|
62 | |
63 | UDR0 = cData; /* sende Zeichen */ |
64 | return 0; |
65 | }
|
66 | |
67 | void WriteUARTStringPC (char* sText) |
68 | {
|
69 | unsigned char cByte; |
70 | unsigned char cOffset; |
71 | |
72 | for (cOffset=0;sText[cOffset]!='\0';cOffset++) |
73 | {
|
74 | // byte aus flash lesen
|
75 | cByte=sText[cOffset]; |
76 | |
77 | // fertig
|
78 | if (cByte=='\0') break; |
79 | |
80 | // und zum PC schicken
|
81 | WriteCharPC (cByte); |
82 | }
|
83 | }
|
84 | |
85 | int main () |
86 | {
|
87 | |
88 | char Line[20]; // String mit maximal 20 zeichen |
89 | |
90 | Line[0] = 101; |
91 | Line[1] = 54; |
92 | Line[2] = 72; |
93 | |
94 | USART0Init(MYUBRR); |
95 | |
96 | for(;;) |
97 | {
|
98 | //ReadStringPCUART(Line);
|
99 | //WriteUARTStringPC('1');
|
100 | /*
|
101 | WriteCharPC ('A');
|
102 | WriteCharPC ('0');
|
103 | WriteCharPC ('0');
|
104 | WriteCharPC ('0');
|
105 | WriteCharPC ('1');
|
106 | WriteCharPC ('\n');
|
107 | */
|
108 | WriteUARTStringPC(Line[0]); //<-- |
109 | //WriteUARTStringPC("\n\r");
|
110 | //uart_gets( Line,40);
|
111 | //data=ReadPcUSART();
|
112 | //WritePCUSART(data);
|
113 | }
|
114 | |
115 | return 0; |
116 | }
|
Bitte um Hilfe.