Hallo,
ich habe schon im ganzen Forum vergeblich nach einer simplen Antwort auf
meine Frage gesucht.
Hoffe ihr könnt mir auf diesem Wege weiterhelfen.
1 | /*Set baud rate */
|
2 | UBRR0H = (unsigned char)(ubrr>>8);
|
3 | UBRR0L = (unsigned char)ubrr;
|
Wenn ich das richtig verstanden habe, dann ist das UBRR0-Register ein
16-Bit-Register, das in zwei 8-Bit-Register geteilt ist. Zum Einen das
UBRR0H für das High-Byte bzw. die 4 Most significant bits und zum
Anderen das UBRR0L für das Low-Byte bzw. die 8 least significant bits.
Es werden also nur 12 von den 16Bit für den Taktteilungswert, um auf die
gewünschte Baudrate zu kommen, benötigt.
Warum werden nun immer 8 Bit nach rechts geschoben???
Nach meiner Logik, die sicherlich falsch ist, komme ich drauf, dass ich
das High-Byte doch nur um 4 Bits nach rechts schieben muss. Dann fallen
doch die unteren 4 Bit des High-Bytes raus und die vier höchstwertigen
stehen ganz rechts. Die freigewordenen, vier Stellen werden dann
automatisch mit Nullen aufgefüllt und gut ist.
Könnt ihr mir bitte bei meinem Denkfehler auf die Sprünge helfen??
MfG
Martin