UART Programmierung

Gast #508913
Lesenswert?
• ▲
▼
Hallo Leute,

hab ein kleines Problem mit dem UART des AT89S52. So will ich ein 
DMX-Signal über diesen ausgeben. Ich programmiere den AT89S52 mit C.

Problem: Die zu sendenden DMX Daten schreibe ich ins SBUF Register und 
das SCON Register habe ich mit 88h geladen (9 Bit UART,feste 
Baudrate).Obwohl ich nur kleine, oder zuletzt gar keine Zeitschleifen 
zwischen den zu ladenden DMX Werten (SBUF) programmiert habe, vergeht 
doch zwischen den einzelnen DMX-Kanälen ein gewisse Zeit (500µs !!!). 
ich möcht die DMX Kanäle allerdings direkt hintereinander senden.

Wenn einer eine Idee oder einen Codeschnipsel hat wäre vich sehr 
Dankbar.


Gruss Christoph
#508930
Lesenswert?
• ▲
▼
>Wenn einer eine Idee oder einen Codeschnipsel hat wäre vich sehr
>Dankbar.

Wie wäre es, wenn du deinen Code hier reinstellen würdest, damit man den 
Fehler darin finden kann?
Ansonsten klingt das eher danach, dass jemand wieder zu faul ist, etwas 
selber zu prgrammieren (oder im Netz zu suchen).
Gast #508939
Lesenswert?
• ▲
▼
Hier mei tolles Programm (man beachte das ich in C un µC ein Neuling 
bin)



//void zeit(void);   //Prototypen-Anmeldung der Verzögerung
//void zeit88(void);
//void zeit8(void);

void main(void)
{
  SCON=0xA8; //Mode 2 (Startbit, 8 Datenbits, zwei x Stoppbit)


//  while(1)
//  {
//    P3=0x02;
//    zeit();
//    P3=0x00;
//    zeit88();
//    P3=0x02;
//    zeit8();


        while(1)
        {
          SBUF=0x00;       //Sende das Startbyte (00h)
        //  P3=P3 &  0x02;
        //  P3=P3 + 0x02;
        //  while(TI==0);     //Senden beendet?
        //  TI=0;         //Wenn ja: Sendeflag löschen
        //  zeit();       //Delay von ca. 5000 Mikrosekunden
          SBUF=0xAA;      //Ersten Kanal übertragen
        //  P3=P3 + 0x02;
        //  zeit();
          SBUF=0xCC;      //Zweiten Kanal übertragen
        //  P3=P3 + 0x02;
        //  zeit();
          SBUF=0xEE;
        //  zeit();
          SBUF=0xFE;
        //  zeit();

        }


}

/*---------------------------------------------------------------------- 
-
Zusatzfunktionen
------------------------------------------------------------------------ 
-*/
/*void zeit(void)
{
  unsigned int x;
  for(x=0;x<=2;x++); //Int-Wert 1000 ergibt etwa 5 Millisekunden
}

void zeit88(void)
{
  unsigned int y;
  for(y=0;y<=12;y++);
  P2=~P2;
}

void zeit8(void)
{
  P2=~P2;
  P2=~P2;
}      */
Gast #508941
Lesenswert?
• ▲
▼
SBUF=0xAA;                //Ersten Kanal senden  ??
 //  P3=P3 + 0x02;
 //  zeit();
SBUF=0xCC;                //Zweiten Kanal senden ???


Sollte man nicht, bevor Daten ins Senderegister geschrieben werden, 
nachprüfen, ob das letzte Datum FERTIG gesendet wurde?
Gast #508950
Lesenswert?
• ▲
▼
hatte wie gesagt erst zeitschleifen dazwischen.

SBUF=0xAA;                //Ersten Kanal senden  ??
 //  P3=P3 + 0x02;
 //  zeit();
SBUF=0xCC;                //Zweiten Kanal senden ???

...ja, so hatte ich mir das vorgestellt...
Gast #508960
Lesenswert?
• ▲
▼
der µC müsste es doch irgendwie hinbekommen in 44µs (ein Startbit, 
8Datenbit, und zwei Stoppbit >> 11Bit a 4µs >>ges. also 44µs) den 
nächsten Kanal direkt im Anschluss zu senden.

Weiß halt, wie gesagt nicht wie...
Gast #508965
Lesenswert?
• ▲
▼
hey Joe,

werd das mal ausprobieren - Danke.
Ich möchte natürlich auch allen anderen Danken, darunter dem Mathias, 
meinen Eltern, den Müllmännern, dem Tankwart und ganz besonders Jürgen.

(wer Jürgen ist? -Davon in kürze mehr)

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.