Frage zur Initialisierung der COM Schnittstelle in C

Hallo,

Es geht um die beiden Programme RS232_lx.c und RS232_win.c in Softwareentwicklung, LM2, s. 53, und zwar um das Beschreiben der Baudratenregister: In der Zeile
Code:
outb(divisor&225, com);
verstehe ich die Bitmaske 225 nicht. Wieso muss der Teilerwert überhaupt maskiert werden?
In der nächsten Zeile
Code:
outb(divisor>>8, com+1);
ist mir der Effekt glaube ich schon klar, allerdings verstehe ich nicht, warum hier ein Schiebe-Operator verwendet wird, um das High-Byte auf 0 zu setzen.

Ich hätte einfach geschreiben:
Code:
outb(divisor, com);
outb(0, com+1)
Hat da jemand eine Erklärung?
 
AW: Frage zur Initialisierung der COM Schnittstelle in C

Ich glaube, es jetzt kapiert zu haben:

Man kann ja Teiler größer als 255 angeben, wenn man die Schnittstelle mit weniger als 450 Baud betreiben will (450 * 256 = 115200). Die Zahl 256 hat die Binärdarstellung 0000 0001 | 0000 0000. Mit der Zeile
Code:
[FONT=monospace]outb(divisor>>8, com+1);[/FONT]
werden die letzten 8 Stellen der Binärzahl abgeschnitten und die entstandene Binärzahl in das High-Byte des Teilers geschrieben.

Die Zeile
Code:
[FONT=monospace]outb(divisor&225, com);[/FONT]
ist ein Schreibfehler und muss eigentlich heißen
Code:
[FONT=monospace]outb(divisor&255, com);[/FONT]
Damit werden die oberen 8 Bits des Teilers auf 0 gesetzt und nur die letzten 8 Bits bleiben nach der Maskierung übrig. Diese werden dann in das Teiler-Low-Byte geschrieben.

Ist zwar eine gewagte These, aber wenn das so stimmen solte, ist es wieder einer der Momente, in denen man sich fragt, ob jemand die Skripte vor dem Druck eigentlich mal gegengelesen hat .... :D
 
Top