Hallo Zusammen, ich versuche gerade einen String über den USART einzulesen. Das PC Programm tut was es soll. Der PIC antwortet, wenn nur mit Schrott. Wenn ich einen Teststring manuell erstelle und versende funktioniert die Schnittstelle. Es muss also folglich was mit der Deklaration bzw. etwas mit dem Einlesevorgang zu tun haben. Der String besteht aus 38 Zeichen (siehe Bild). Nach der Durchsicht meiner C-Unterlagen und des String Artikels hier habe ich n alle möglichen für mich vorstellbaren Varianten durchgespielt.Ich komme nicht auf den richtige Lösung. Kennt jemand die Lösung?
1 | // C-Code Auszüge
|
2 | aus dem USART Programm |
3 | |
4 | void USART_Write_String(char *text) |
5 | {
|
6 | int i; |
7 | for(i=0;text[i]!='\0';i++) |
8 | USART_Write(text[i]); |
9 | }
|
10 | |
11 | void USART_Write(uint8_t txData) |
12 | {
|
13 | while(0 == PIR1bits.TX1IF) |
14 | {
|
15 | }
|
16 | |
17 | TXREG1 = txData; // Write the data byte to the USART. |
18 | }
|
19 | |
20 | void USART_Read_String(char *Output, unsigned int length) |
21 | {
|
22 | |
23 | unsigned int i; |
24 | for(int i=0;i<length;i++) |
25 | {
|
26 | Output[i] = USART_Read(); |
27 | |
28 | if ((Output[i] == '\r') || (Output[i] == '\r')) |
29 | {
|
30 | Output[i] = '\0'; |
31 | break; |
32 | }
|
33 | }
|
34 | //Output[i+1] = '\0';
|
35 | }
|
36 | |
37 | uint8_t USART_Read(void) |
38 | {
|
39 | |
40 | while(!PIR1bits.RC1IF) |
41 | {
|
42 | }
|
43 | |
44 | if(1 == RCSTA1bits.OERR) |
45 | {
|
46 | // EUSART1 error - restart
|
47 | |
48 | RCSTA1bits.CREN = 0; |
49 | RCSTA1bits.CREN = 1; |
50 | }
|
51 | |
52 | return RCREG1; |
53 | }
|
54 | |
55 | |
56 | aus Main.c |
57 | |
58 | //Deklarationen
|
59 | char chr_Temp[40]; |
60 | static char *chr_Data_1[40]; |
61 | char *chr_Data_2[40]; |
62 | char *chr_Data_3[40]; |
63 | while(1) // Ganzes Programm ist Endlosschleife |
64 | {
|
65 | memset(chr_Data_1, 0x20, 40); |
66 | USART_Read_String(chr_Data_1,37); |
67 | USART_Write_String(chr_Data_1); |
68 | LcdPrintf(4, 1, chr_Data_1); |
69 | USART_Write_String("\r\n"); |
70 | }
|
Viele Grüße Ingo