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
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?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.