Ändern von COM1 oder COM2 Parameter während Port ist geöffnet

Veralteter Haftungsausschluss für KB-Inhalte

Dieser Artikel wurde für Produkte geschrieben, für die Microsoft keinen Support mehr anbietet. Deshalb wird dieser Artikel im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.

Zusammenfassung

Bei der Kommunikationsanschlüsse in Basic COM-Anschluss (mit einer OPEN-Anweisung von "COM1:..." oder öffnen "COM2:...") geöffnet der Portkonfiguration normalerweise durch eine einfache Anweisung möglich ohne Schließen und erneutes Öffnen des COM-Anschluss. Die Parameter für den COM-Anschluss (die Baud-Rate, Parität, StopBits, Datenbits usw.) können jedoch durch direkte Kommunikation mit Basic, mit INP Anweisungen UART geändert werden. Der UART (Universal Asynchronous Receiver Transmitter) im IBM PC ist das 8250 asynchrone Kommunikation Element, dedizierten Mikroprozessor.


Dieser Artikel enthält Informationen für fortgeschrittene Programmierer und sollte nur durch erfahrene Programmierer, die mit Vorgängen Kommunikationsanschlüsse verwendet. Diese Informationen gelten für Microsoft QuickBasic Version 4.00, 4.00b und 4.50. für Microsoft Basic Compiler Version 6.00 und 6.00b für MS-DOS; und an Microsoft Basic Professional Development System (PDS) Versionen 7.00 und 7.10 für MS-DOS.

Weitere Informationen

Deaktivieren Sie Communications Interrupts, ändern Sie die Kommunikationsparameter für einen COM-Anschluss. Dafür festlegen Bit 4 (COM1) oder bit 3 (für COM2) des Interrupt Maske (IMR, e/a-Anschluss & H21) (wo Bits nummeriert sind, wobei Bit 0; d. h. 0, 1, 2, etc..). Beachten Sie, dass dabei, die Bits des Registers unverändert bleiben sollten, Sie sollten "oder" mit den Bitwert benötigt, und der aktuelle Wert der neue Wert in das Register zurück. Beispielsweise die folgenden deaktiviert COM1:

   OUT &H21, INP(&H21) OR 16
Die folgenden deaktiviert COM2:

   OUT &H21, INP(&H21) OR 8
Sobald der COM-Interrupt deaktiviert ist, können Sie die Kommunikationsparameter ändern. Die erste Parameter, die Sie ändern ist die Baudrate. Dazu müssen Sie zunächst festlegen Linie-Steuerelement Register zu einer Änderung in die Baudrate durch Senden einer & H80 Port & H3FB Linie-Steuerelement registrieren, COM1 oder port H2FB, dem Liniensteuerelement für COM2 registrieren. Dann entsprechende niedrigstwertigen Byte (LSB) und die meisten wertigen Byte (MSB) die gewünschte Baudrate Ports & H3F8 senden und & H3F9 für COM1 oder Anschlüsse und H2F8 und & H2F9, für COM2. LSB und MSB Bytes für die Baudraten werden in der folgenden Tabelle dargestellt:

   Baud Rate    MSB    LSB
--------- --- ---

300 01H 80H
600 00H C0H
1200 00H 60H
2400 00H 30H
3600 00H 20H
4800 00H 18H
9600 00H 0CH

Da die Baudrate geändert wurde, müssen der Parameter (zum Beispiel Typ Parität, Stoppbits, Datenbits usw.) festgelegt werden. Diese Parameter werden durch Senden des entsprechenden Bytes Linie-Steuerelement Register (Anschluss & H3FB für COM1 oder Port H2FB für COM2) festgelegt. Der zu sendenden Bytes wird durch Festlegen der entsprechenden Bits nach dem folgenden Schema eingerichtet:
                          THE LINE-CONTROL REGISTER

|-----|-----|-----|-----|-----|-----|-----|-----|
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|-----|-----|-----|-----|-----|-----|-----|-----|
| \ | | | | | | Character
| \ | | | | | | length
I/O Addressing < \ | | | | 0 + 0 = 5 bits
0 = Normal value \__| | | | 0 + 1 = 6 bits
1 = To address baud | | | | 1 + 0 = 7 bits
rate divisor | | | | 1 + 1 = 8 bits
registers | | | |
| | | > Stop bits
Set these bits to 0 < | | 0 = 1 stop bit
| | 1 = 1.5 stop bits if 5-bit
| | character length
| | 1 = 2 if 6-, 7-, or 8-bit
| | character length
Parity type < > Parity
0 = even 0 = No parity bit generated
1 = odd 1 = Parity bit generated

(Diese Tabelle entnommen auf 180 "8088 Assembler-Programmierung: IBM PC, Second Edition" Willen und Krantz [Howard W. Sams & GmbH, 1988]. Finden Sie in Kapitel 7, "Seriellen" für weitere Details.)


Nach dem Festlegen dieser Parameter, kann COM-Interrupt erneut aktiviert werden, indem das Bit für den COM-Port wieder auf 0 in der IMR. Wie zuvor, Sie sorgfältig die Bits in dieses Register, um das jeweilige bit 0 logisch Maske zu stören "Und" der aktuelle Wert des Registers mit 255 minus der Bitwert. Beispiel:
   OUT &H21, INP(&H21) AND 239    'enables COM1 (255 - 16 = 239)   OUT &H21, INP(&H21) AND 247    'enables COM2 (255 - 8 = 247)

Nach diesem Schritt kann Kommunikation bei der neuen Kommunikation fortsetzen. Unten ist ein Codebeispiel ändert die Baudrate und Parameter von COM1 bis 9600, N, 8, 1 aufgelistet.


Das folgende Buch enthält weitere Informationen über Hardware-Adressen:
"Des Programmierers PC Sourcebook," von Thom Hogan (Microsoft Press, 1988)
Folgendes ist ein Codebeispiel:
     x% = INP(&H21)                    'disable COM1...      x% = x% OR 16
OUT &H21, x%
OUT &H3FB, &H80 'set for BAUD change
REM OUT &H3F8, &H60 'BAUD-rate-divisor register; &H60 sets 1200 baud
OUT &H3F8, &H0C 'BAUD-rate-divisor register; &H0C sets 9600 baud
OUT &H3F9, &H0 'High byte of BAUD-rate-divisor register
OUT &H3FB, &H3 'N,8,1
x% = INP(&H21) 'reenable COM1...
x% = x% AND 239
OUT &H21, x% 'all done!

Eigenschaften

Artikelnummer: 39255 – Letzte Überarbeitung: 16.01.2017 – Revision: 1

Feedback