Gast
#452486
Hallo, ich habe angefangen, mich mit dem Programmieren von Mikrocontrollern zu beschäftigen und habe wohl ein Problem mit dem Verständnis der Baudratengenerierung und hoffe, dass mir hier jemand einen kleinen Denkanstoß geben kann. Verwendet wird ein AT89C51CC03 der mit 20 MHz getaktet wird. Per FLIP kann ich diesen mit 38400 Baud ansprechen und auch programmieren. Ich habe das Beispielprogramm von Atmel für die serielle Schnittstelle genommen und auf den verwendeten Quarz angepasst, so dass ich mit 9600 Baud arbeiten kann. Laut dem Baudratenrechner (Atmel Excel-Sheet) muss X2=0, SMOD1=0 und das Reloadregister des Timer1 auf Dez. 245 eingestellt werden. Die Terminalprogramme, die ich zum testen verwende (Hercules Setup, Tera Term) sind auf 8N1 eingestellt. Es kommt aber egal bei welcher Einstellung immer nur Datenmüll zurück. Um sicher zu gehen, habe ich dann mal den Quarz gegen einen mit 11.0592 MHz ausgetauscht und das unveränderte Beispielprogramm darauf losgelassen. Bei diesem ist der Timer1 (8-bit Auto-reload) so eingestellt, dass bei dem 11er Quarz eine Baudrate von 9600 Baud erzielt wird. Und siehe da, es funktioniert, nur nicht mit 9600, sondern mit 38400 Baud (Faktor 4). Habe mir darauf hin das CKCON Register ausgeben lassen, aber das war auch ==0, also kein X2 Mode, was ja eigentlich auch nur zu einer Verdopplung der Baudrate führen sollte. Spaßeshalber hab ich dann einfach mal den 20 MHz Quarz wieder eingelötet und mit dem gleichen Programm wie für den 11er Quarz laufen lassen. Komischer Weise funktioniert der auch mit 38400 Baud einwandfrei, allerdings bei gleichen Einstellungen, wie für 11.0592 MHz. Warum ist das so? Was kann ich falsch gemacht haben? Schönen Dank im voraus Gruß, Thomas