Как да промените COM1 или COM2 параметри време порт е отворен

Отказ от отговорност за оттеглено съдържание на БЗ

Тази статия е написана за продукти, за които Microsoft вече не предлага поддръжка. Ето защо тази статия се предлага „както е“ и вече няма да бъде актуализирана.

Резюме

Когато използвате комуникационни портове в Basic, след като COM порт е отворена (с отворен декларация за "COM1:..." или ОТВАРЯНЕ "COM2:..."), порт конфигурация обикновено не може да променя всеки основен отчет без затваряне и след възобновяване на COM порта. Въпреки това параметрите на COM порта (скорост, четност, стоп-бита, бита данни и т.н.) може да се промени от директно общуване с UART използват Basic и INP отчети. UART (универсална асинхронни приемник трансмитер) в Компютъра IBM е 8250 Асинхронна комуникация елемент, специализиран микропроцесор чипове.


Тази статия съдържа информация за напреднал програмист и трябва да се използва само от напреднали програма, които са добре запознати с работата на комуникационни портове. Тази информация се отнася за версии на Microsoft QuickBasic 4,00 4.00b и 4.50; за версии на Microsoft Basic компилатор 6.00 и 6.00b за MS-DOS; и до Microsoft основни професионално развитие система (PDS) версии 7.00 и 7,10 за MS-DOS.

Допълнителна информация

За да промените параметрите на съобщенията за COM порт, трябва първо да забраните съобщения прекъсвания. Можете да направите това чрез задаване на малко 4 (за COM1) или малко 3 (COM2) на прекъсване маска регистър (IMR, / и порт и H21) (където бита са номерирани, започвайки от нула; малко, 0, 1, 2, и т.н.). Обърнете внимание, че при това други битове на регистъра трябва да остане непроменена, така трябва "или" текущата стойност с битова стойност изисква и място новата стойност обратно в регистъра. Например следните забранява COM1:

   OUT &H21, INP(&H21) OR 16
Следните забранява COM2:

   OUT &H21, INP(&H21) OR 8
След като COM прекъсване е забранена, можете да промените параметрите на съобщенията. Първият от параметрите, които можете да промените е скорост. За да направите това, трябва първо да зададете ред контрол регистър да позволява промяна в скорост чрез изпращане на H80 порт и H3FB, контролата линия регистър COM1 или да пренесете и H2FB, контролата линия регистър за COM2. След това изпраща подходящо най маловажният бит (LSB) и най маловажният бит (MSB) на желаната скорост портове и H3F8 и & H3F9, съответно, COM1 или портове и H2F8 и & H2F9, съответно за COM2. LSB и MSB байта за скорости са показани в следната таблица:

   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

Сега, скорост е променен, останалите ще трябва да се определи (например четност тип, стоп-бита, бита данни, и т.н.). Тези параметри са зададени чрез изпращане на съответния байт линия контрол регистъра (порт и H3FB COM1, или порт и H2FB за COM2). Байт да изпратите се установява чрез задаване подходящи bits по следната схема:
                          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

(Тази таблица е взето от страницата с 180 "8088 асемблер език за програмиране: IBM PC, Second Edition" Willen и Кранц [Хауърд у само & Company, Inc., 1988]. Моля, прочетете глава 7 "Серийни комуникации" за по-подробна техническа информация.)


След създаването на тези други параметри, COM прекъсване може да бъде включен чрез поставяне на бита за COM порт обратно до 0 IMR. Както преди, трябва да внимавате да не наруши някоя от други битове в регистъра, така че да маска специално малко 0, логично "И" текущата стойност на регистъра с 255 минус битова стойност. Например:
   OUT &H21, INP(&H21) AND 239    'enables COM1 (255 - 16 = 239)   OUT &H21, INP(&H21) AND 247    'enables COM2 (255 - 8 = 247)

В последствие тази стъпка е съобщение да възобновите в новите настройки за комуникация. По-долу е пример за код списък изменения скорост и параметри на COM1 до 9600, N 8, 1.


Следните книга съдържа повече информация за хардуерни адреси:
"Програмист компютър Sourcebook," от Том Хоган (Microsoft Press, 1988)
По-долу е пример за код:
     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!

Свойства

ИД на статията: 39255 – Последен преглед: 16.01.2017 г. – Редакция: 1

Обратна връзка