Wijzigen COM1 of COM2 Parameters tijdens poort Is geopend

Disclaimer voor KB-inhoud ingetrokken

Dit artikel gaat over producten waarvoor Microsoft niet langer ondersteuning biedt. Daarom wordt dit artikel aangeboden 'as is' en wordt het niet langer bijgewerkt.

Samenvatting

Worden wanneer u de communicatiepoorten in Basic, nadat de COM-poort is geopend (met een OPEN 'COM1:...' OPEN 'COM2:...' instructie of), de configuratie van de poort normaal kan niet gewijzigd door een eenvoudige instructie zonder te sluiten en opnieuw openen van de COM-poort. De parameters voor de COM-poort (de baud-rate, pariteit, stopbits, databits, enz.) kunnen echter worden gewijzigd door rechtstreeks communiceren met de UART met behulp van de Basic-OUT en INP-instructies. De UART (Universal Asynchronous Receiver Transmitter) in de IBM PC is het Element in 8250 asynchrone communicatie, een speciale microprocessorchip.


Dit artikel bevat informatie voor ervaren programmeurs en moet alleen worden gebruikt door gevorderde programmeurs die zeer bekend met de activiteiten van de communicatiepoorten zijn. Deze informatie is van toepassing op Microsoft QuickBasic versie 4.00, 4.00b en 4,50; Microsoft Basic Compiler versies 6,00 en 6.00b voor MS-DOS; en naar Microsoft Basic Professional Development systeem (PDS) versie 7.00 en 7.10 voor MS-DOS.

Meer informatie

Als u wilt wijzigen de communicatieparameters voor een COM-poort, moet u eerst de communicatie interrupts uitschakelen. U kunt dit doen door het instellen van bit 4 (voor COM1) of bit 3 (voor COM2) van de Interrupt masker Register (IMR, i/o-poort & H21) (wanneer bits worden genummerd vanaf nul; bit, 0, 1, 2, enz.). Houd er rekening mee dat wanneer dit gebeurt, de overige bits van dit register ongewijzigd, blijven moeten dus u moet 'of' de huidige waarde met de bitwaarde nodig is en plaats de nieuwe waarde terug in de kassa. Bijvoorbeeld de volgende schakelt COM1:

   OUT &H21, INP(&H21) OR 16
De volgende schakelt COM2:

   OUT &H21, INP(&H21) OR 8
Nadat u de COM-interrupt is uitgeschakeld, kunt u de communicatieparameters wijzigen. De eerste van de parameters die u kunt wijzigen, is de baud-rate. Hiertoe moet u eerst het besturingselement lijn registreren om een wijziging door te sturen in de baud-rate instellen een & H80 poort & H3FB, het besturingselement lijn voor COM1 of aan de poort registreren & H2FB, het besturingselement lijn registreren voor COM2. Vervolgens verzendt de juiste minst significante byte (LSB) en de meest significante byte (MSB) van de gewenste baudrate poorten & H3F8 en & H3F9, respectievelijk voor COM1 of poorten & H2F8 en & H2F9, respectievelijk voor COM2. De LSB en MSB bytes voor de baud-rates worden in de volgende tabel weergegeven:

   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

Nu dat de baud-rate is gewijzigd, moet u de andere parameters instellen (voor bijvoorbeeld type pariteit, stopbits, databits, enz.). Deze parameters worden ingesteld door de juiste byte te sturen naar de kassa van het besturingselement lijn (poort & H3FB voor COM1, of poort & H2FB voor COM2). De byte verzenden wordt vastgesteld door de juiste bits volgens het volgende schema:
                          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

(Deze tabel is afkomstig van de pagina 180 van "8088 Assembler taal programmeren: de IBM PC, tweede editie ' Willen en Krantz [Howard W. Sams & Company, Inc., 1988]. Lees hoofdstuk 7, "Seriële communicatie" voor meer technische details.)


Nadat deze andere parameters, kan de interrupt COM worden ingeschakeld door de bit voor de COM-poort weer op 0 in de IMR. Zoals voorheen, u oppassen moet niet te verstoren een van de andere bits in dit register, dus te maskeren de betreffende bit 0, logisch 'En' de huidige waarde van het register met 255 min de bitwaarde. Bijvoorbeeld:
   OUT &H21, INP(&H21) AND 239    'enables COM1 (255 - 16 = 239)   OUT &H21, INP(&H21) AND 247    'enables COM2 (255 - 8 = 247)

Als deze stap is voltooid, wordt communicatie kunt hervatten op de nieuwe communicatie-instellingen. Hieronder is een voorbeeld weergeven van die wijzigingen de baud-rate en de parameters van COM1 tot 9600, N, 8, 1.


In het volgende boek vindt u meer informatie over hardwareadressen:
"De Programmer's PC Sourcebook," door Thom Hogan (Microsoft Press, 1988)
Hier volgt een voorbeeld van code:
     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!

Eigenschappen

Artikel-id: 39255 - Laatst bijgewerkt: 14 feb. 2017 - Revisie: 1

Feedback