www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit Variablen und UART


Autor: kriz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

#include <stdio.h>
#include <aduc841.h>

int i=0;

unsigned int uiTemp;
unsigned char usTemp;

unsigned char ucUartH, ucUartL;


//********************************************************************************************************
// Konfiguration zur Ausgabe über serielle Schnittstelle (für Testzwecke)
//********************************************************************************************************
void InitUart(void)
{
  SCON  = 0x52;                                        // 8bit, noparity, 1stopbit  UART konfigurieren
  T3CON = 0x87;                                       // configure Timer3..          
  T3FD  = 0x01;                                         // ..for 9600baud @ 20MHz..

}


void UART_senden(unsigned char A)
{
  // A=0x76;
   TI = 0;
     //SBUF = A;
   SBUF = 0x76;
   while(TI == 0);                            // warten bis Byte gesendet ist
   TI = 0;                                // Sendeflag TI zurücksetzen
}

void main ()
{   

  InitUart();


   while(1)            //Endlosschleife!
  {
     UART_senden('w');
   }                
}


SO funktionierts. Wenn ich aber die Zeile
SBUF = A; 
statt
 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.

Autor: kriz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja klar, aber A ist die Variable in der Funktion, die aus Main mit 'w' 
übergeben wird

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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)
void UART_senden(unsigned char data)
{
   TI = 0;
   SBUF = data;
   while(TI == 0)                     // warten bis Byte gesendet ist
     ;
   TI = 0;                            // Sendeflag TI zurücksetzen
}

Autor: kriz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm nein, das wars nicht

Es kommt jetzt 11010000 an

(data geht übrigens nicht, das wird von Keil blau markiert. habs in uart 
umbenannt)

Autor: kriz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
des Rätsels-Lösung: In der Projekt Optionen war auf "large data model" 
gestellt. Wollte die Daten also auf xdata speichern, das hat wohl nicht 
funktioniert...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.