Problem mit Variablen und UART

Gast #1317449
Lesenswert?

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
1
SBUF = A;
statt
1
 SBUF = 0x76;

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.
#1317461
Lesenswert?

01000000 oder 01000001 ?

01000001 ist hex 41 und das ist der ASCII Code von 'A'. Das ist schon 
verdächtig.
Gibt es zufällig auf dem Keil Compiler ein vordefiniertes Register, 
welche zufällig A heißt?

Nenn doch mal den Parameter um (A ist sowieso ein beschissener Name für 
den Parameter. Irgendwie so nichtssagend)
1
void UART_senden(unsigned char data)
2
{
3
   TI = 0;
4
   SBUF = data;
5
   while(TI == 0)                     // warten bis Byte gesendet ist
6
     ;
7
   TI = 0;                            // Sendeflag TI zurücksetzen
8
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren