Frage zur Initialisierung der COM Schnittstelle in C

Dieses Thema im Forum "Informatik" wurde erstellt von Kosekans, 26 Dez. 2012.

  1. 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?
     
  2. 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
     

Diese Seite empfehlen