Hallo!
Folgendes Problem:
Ich will nichts weiter als ein einziges Zeichen über den UART senden.
Erstmal der Code (Minimalbeispiel, hab inzwischen alles was ich sonst
noch wollte rausgelöscht um das Problem zu begrenzen...)
Das ganze ist mit Keil auf einem ADuC841 programmiert.
1 | #include <stdio.h>
|
2 | #include <aduc841.h>
|
3 |
|
4 | int i=0;
|
5 |
|
6 | unsigned int uiTemp;
|
7 | unsigned char usTemp;
|
8 |
|
9 | unsigned char ucUartH, ucUartL;
|
10 |
|
11 |
|
12 | //********************************************************************************************************
|
13 | // Konfiguration zur Ausgabe über serielle Schnittstelle (für Testzwecke)
|
14 | //********************************************************************************************************
|
15 | void InitUart(void)
|
16 | {
|
17 | SCON = 0x52; // 8bit, noparity, 1stopbit UART konfigurieren
|
18 | T3CON = 0x87; // configure Timer3..
|
19 | T3FD = 0x01; // ..for 9600baud @ 20MHz..
|
20 |
|
21 | }
|
22 |
|
23 |
|
24 | void UART_senden(unsigned char A)
|
25 | {
|
26 | // A=0x76;
|
27 | TI = 0;
|
28 | //SBUF = A;
|
29 | SBUF = 0x76;
|
30 | while(TI == 0); // warten bis Byte gesendet ist
|
31 | TI = 0; // Sendeflag TI zurücksetzen
|
32 | }
|
33 |
|
34 | void main ()
|
35 | {
|
36 |
|
37 | InitUart();
|
38 |
|
39 |
|
40 | while(1) //Endlosschleife!
|
41 | {
|
42 | UART_senden('w');
|
43 | }
|
44 | }
|
SO funktionierts. Wenn ich aber die Zeile
statt
mache, läuft es nicht mehr. Es kommt eine ganz andere Bitfolge als
gewünscht an (01000000 statt 01110110).
Woran könnte das liegen? Der Variablen Typ (unsigned char) müsste doch
passen? Konfiguration sollte auch stimmen.