Forum: Mikrocontroller und Digitale Elektronik UART mit 250kBaud


von Stefan (Gast)


Lesenswert?

Hi Leute,

ich hab heut den ganzen lieben langen Tag alles versucht um bei meinem
AT89C51RC eine Baudrate von 250k über die UART raus zu bekommen, bei 
einer Fosc von 16MHz.
und ich bin kläglich gescheitert.
Ich hab so ziemlich alles versucht, hab mich durch atmel.com gewühlt hab 
datenblätter studiert hab dieses forum durchwühlt hab google gefragt 
alles was mir eingefallen ist hab ich versucht; OHNE ERFOLG
ich bin grad echt am verzweifeln.

mein vorgehen war bisher so dass ich versuche mit Timer1 die Baudrate zu 
definieren. aber der höchste Wert den ich bisher geschafft habe waren 
83kBaud
(gemessene 12us pro Bit)
und ich brauche 4us pro Bit

meine UART INIT sieht folgendermaßen aus:

void InitSerial(void)
{
  ET1 = 0;    /* TIMER1 INT DISABLE */
  TMOD = 0x20;
  PCON |= 0x80;           /* Double UART Frequenzy*/

  TH1 = 0xFF;    /* X2(SMOD=1) at 16 MHZ */

  TR1 = 1;    /* START THE TIMER1 */
  SCON = 0x52;    /* SERIAL MODE 1, REN=1, TI=1, RI=0 */

  /* Interrupt */
  ES   = 0;     /* Serial interrupt disable */
  RI   = 0;
  TI   = 0;
  while(TI && RI);
}

außerde setzte ich das X2 Bit für die doppelte Systemtaktrate
CKCON = 0x01;     // X2 Mode



Is wirklich nicht mehr drin oder mach ich einfach was grundlegendes 
falsch??
es wäre echt super toll wenn mir wer sagen könnte wo mein fehler ist 
oder mir einfach mal ne RICHTIGE Init zeigen könnte^.^

schon jetzt danke für eure Mühen
Stefan

von Peter D. (peda)


Lesenswert?

Du mußt T2 nehmen.


Peter

von Stefan (Gast)


Lesenswert?

Des hab ich heut schon mehrfach vermutet, aber ich kann mir nicht 
erklären warum es mit Timer2 gehen soll.
Hat Timer 2 keinen Fosc Prescaler so wie Timer 1?

von die ??? (Gast)


Lesenswert?

Und dann noch Faktor 3....

von Stefan (Gast)


Lesenswert?

Danke für die schnellen Antworten,
hab mich jetzt nochmal 1,5h hingesetzt und des ganze in Ruhe mal mit 
Timer 2 am Papier entwickelt. und ich glaube auf eine brauchbare lösung 
gekommen zu sein.
sollte alles stimmen und ich es zum laufen bringen werd ich meine 
UART_init() posten für alle die das dann noch wissen wollen g

dankeschön

Stefan

von Michael W. (michelw)


Lesenswert?

Hallo,
willst Du DMX empfangen oder senden?

SERINIT:
  MOV SCON,#10011000B  ;MODUS 2 9BIT-UART TB8=1
  MOV PCON,#64    ;TEILER DURCH 64 FUER 250K-BAUD
  SETB ES      ;SERIELLEN INT FREIGEBEN

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.