Jak lze změnit port COM1 nebo COM2 parametry při Port je otevřen

Prohlášení o odmítnutí odpovědnosti pro už nepodporovaný obsah KB

Tento článek byl napsán pro produkty, ke kterým již Microsoft nadále nenabízí podporu. Článek je tedy poskytován „tak, jak je“ a nebude už nadále aktualizován.

Souhrn

Při použití komunikačních portů v Basic, po otevření portu COM (příkazem OPEN "COM1:..." nebo OPEN "COM2:..."), konfigurace daného portu obvykle nemůže změnit základní prohlášení bez ukončit a znovu spustit COM port. Parametry k portu COM (přenosovou rychlost, parita, počet stop-bitů, datových bitů atd.) však lze změnit tak, že komunikuje přímo s UART pomocí příkazy INP a Basic. UART (Universal Asynchronous Receiver Transmitter) v IBM PC je 8250 asynchronní komunikace prvek, čip vyhrazené mikroprocesoru.


Tento článek obsahuje informace o rozšířené programátora a by měla být použita pouze pokročilé programátory, kteří jsou dobře obeznámeni s operací komunikační porty. Tyto informace platí pro Microsoft QuickBasic verze 4.00, 4.00b a 4.50; Chcete-li Microsoft Basic Compiler verze 6.00 a 6.00b pro systém MS-DOS; a k Microsoft základní Professional rozvoj systému (PDS) verze 7.00 a 7.10 pro MS-DOS.

Další informace

Chcete-li změnit parametry komunikace pro COM port, je třeba nejdříve zakázat přerušení komunikace. Můžete provést nastavení bit 4 (pro COM1) nebo bit masce registru přerušení 3 (pro COM2) (IMR, vstupně-výstupní port & H21) (kde bity jsou číslovány od bit 0; 0, 1, 2, atd.). Všimněte si, že když to uděláte, bitů tento registr by mělo zůstat beze změny, tak byste měli "nebo" aktuální hodnotu bit hodnotu potřeby a místo nové hodnoty zpět do registru. Například následující zakáže COM1:

   OUT &H21, INP(&H21) OR 16
Následující zakáže port COM2:

   OUT &H21, INP(&H21) OR 8
Po přerušení COM je zakázán, můžete změnit parametry komunikace. Prvním z parametrů, které mohou změnit je přenosová rychlost. Chcete-li to provést, musíte nejprve nastavit ovládací prvek řádek registru Chcete-li povolit změnu odesláním přenosovou rychlost & H80 port & H3FB zaregistrovat ovládací prvek řádek pro COM1 nebo port & H2FB, zaregistrovat ovládací prvek řádek pro port COM2. Potom odeslat odpovídající nejméně významným bajtem (LSB) a většina významný bajt (MSB) požadovanou přenosovou rychlost portů & H3F8 a & H3F9 pro port COM1 nebo porty & H2F8 a & H2F9, pro port COM2. LSB a MSB bajtů pro přenosové rychlosti jsou uvedeny v následující tabulce:

   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

Teď byla změněna přenosová rychlost, nastavte další parametry (pro příklad, typ parita, počet stop-bitů, datových bitů atd.). Tyto parametry jsou nastaveny odesláním příslušné byte rejstříku řízení čar (port & H3FB u portu COM1, nebo & H2FB pro COM2). Bajt odeslat usazen nastavením odpovídajících bitů podle následujícího diagramu:
                          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

(Tato tabulka byla převzata ze stránky 180 "8088 programovací jazyk Assembler: IBM PC, druhé vydání" Willen a Krantz [Howard W. Edice nakladatelství Sams & společnost, Inc., 1988]. Přečtěte si kapitoly 7 "Sériové komunikace" Další technické podrobnosti.)


Po nastavení těchto dalších parametrů, můžete opětovně povolena přerušení COM nastavením bitu pro port COM. zpět na 0 v IMR. Jako dříve, musí být pozor, abyste narušit všechny bity v tomto žurnálu, tak pro maskování zvláště logicky bit 0, "A" aktuální hodnotu registru s 255 minus hodnota bit. Například:
   OUT &H21, INP(&H21) AND 239    'enables COM1 (255 - 16 = 239)   OUT &H21, INP(&H21) AND 247    'enables COM2 (255 - 8 = 247)

Po dokončení tohoto kroku komunikace lze obnovit na nové nastavení komunikace. Níže je příklad výpisu této změny přenosovou rychlost a parametry COM1 9600, N, 8, 1.


Následující seznam obsahuje další informace o hardwarové adresy:
"Programmer's PC Sourcebook," podle Thom Hogan (Microsoft Press, 1988)
Následuje příklad kódu:
     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!

Vlastnosti

ID článku: 39255 - Poslední kontrola: 16. 1. 2017 - Revize: 1

Váš názor