Baudrate exakt einstellen

Gast #33195
Lesenswert?
• ▲
▼
Hallo,
Ich arbeite für die Schule an einem Projekt, wo unter anderem Daten vom 
Microcontroller (AT89S8252) über die serielle Schnittstelle an den PC 
übertragen werden (eigene PC-Software [C++], bzw. Hyperterminal zum 
testen).
folgendes Problem:
Ich programmiere den MC mit Keil uVision mit assembler. Der Debugger 
dort zeigt mir bei gesetztem BD eine Baudrate von 8012 an. Da man am PC 
nicht so wirklich solche krummen Raten einstellen kann, führt dies zu 
einer verfälschung bei der Datenübertragung.
Frage: wie kann ich jetzt die Baudrate am Microcontroller so genau 
einstellen, damit ich gängige Werte erreichen kann (9600, 4800, ...)

Vielen Dank schonmal für die antworten
Gast #33196
Lesenswert?
• ▲
▼
geht nur exakt, wenn du auch den passenden Quarz verwendest. Die 
Baudrate wird aus der Quarzfrequenz über (einstellbare) Teiler erzeugt, 
und das geht nunmal nur mit ganzen Zahlen.
Bist du an die Quarzfrequenz gebunden, hilft nur: runter mit der 
Baudrate, da findet man dann meist einen passenden Teilerwert. Schreib 
mal, welchen Quarz du hast.
Gast #33198
Lesenswert?
• ▲
▼
4800 baud bekommt man mit dem 12MHz-Quarz noch gut hin (TH1=-13)-> 
Baudrate=Quarz/16/12/13=4807) das passt. Ansonsten einen 11.094MHz-Quarz 
verwenden, dann kannst du alle gängigen Baudraten benutzen.
Gast #33200
Lesenswert?
• ▲
▼
ok gut, und wie programmier ich das dann?

einfaches beispiel: (sendet '1' über serielle schnittstelle)
---------------------------------------------------
$nomod51
$include(reg515.inc)


start:     mov SCON,#01000000b  ;Serielle Schnittstelle auf Mode 1 
setzen

    setb BD

bla:    mov A,#31H
    clr TI
    mov SBUF,A
    jnb TI,$

end
------------------------------------------------------
Gast #33201
Lesenswert?
• ▲
▼
oh, lange nichts mehr mit 51er in Assembler gemacht, es fehlt aber noch 
die Baudrateneinstellung.
Laufzeitmässig ist es aber besser, das TI-Flag vor dem Schreiben nach 
SBUF zu prüfen. Mit deinem Programm wartest du die ganze Zeit, bis das 
Zeichen auch raus ist.
also:
jnb TI, §
clr TI
mov SBUF, A
Damit kannst du die Zeit, während die UART sendet, für andere Aufgaben 
nutzen.

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.