Cómo cambiar COM1 o COM2 parámetros While puerto está abierto

Declinación de responsabilidades del contenido retirado de KB

Este artículo trataba sobre los productos para los cuales Microsoft ya no ofrece soporte técnico. Por lo tanto, este artículo se ofrece "tal cual" y ya no se actualizará más.

Resumen

Al utilizar los puertos de comunicaciones en Basic, una vez que se abre el puerto COM (con una instrucción OPEN "COM1:..." o OPEN "COM2:..."), la configuración del puerto normalmente no se puede cambiar por cualquier instrucción básica sin cerrar y volver a abrir el puerto COM. Sin embargo, los parámetros para el puerto COM (la velocidad en baudios, paridad, bits de parada, bits de datos, etc.) pueden cambiarse al comunicarse directamente con el UART mediante Basic OUT e instrucciones de INP. El UART (Universal Asynchronous Receiver Transmitter) en el PC de IBM es el elemento de comunicaciones asincrónicas en 8250, un chip de microprocesador dedicado.


Este artículo contiene información del programador avanzado y debe ser utilizado sólo por programadores avanzados que están muy familiarizados con las operaciones de los puertos de comunicaciones. Esta información se aplica a las versiones de Microsoft QuickBasic 4.00, 4.00b y 4.50; para las versiones de Microsoft Basic Compiler 6,00 y 6.00b para MS-DOS; y para Microsoft Basic Professional desarrollo sistema (PDS) versiones 7.00 y 7.10 para MS-DOS.

Más información

Para cambiar los parámetros de comunicaciones para un puerto COM, primero debe deshabilitar las interrupciones de comunicaciones. Puede hacerlo mediante la configuración del bit 4 (para COM1) o bit 3 (para COM2) de que el registro de máscara de interrupción (IMR, puerto de E/S & H21) (cuando bits se numeran empezando en bits cero; es decir, 0, 1, 2, etc..). Tenga en cuenta que al hacerlo, los demás bits de ese registro deben permanecer sin cambios, por lo que debería "o" el valor actual con el valor de bits necesarios y colocar el nuevo valor nuevo en el registro. Por ejemplo, el siguiente deshabilita el COM1:

   OUT &H21, INP(&H21) OR 16
El siguiente deshabilita COM2:

   OUT &H21, INP(&H21) OR 8
Una vez que la interrupción de COM está deshabilitada, puede modificar los parámetros de comunicaciones. El primero de los parámetros que puede cambiar es la velocidad en baudios. Para ello, primero debe configurar el registro de control de línea para permitir un cambio en la velocidad en baudios enviando un & H80 al puerto & H3FB, el control de línea registrar para COM1 o puerto & H2FB, el control line Inscríbase COM2. A continuación, enviar el correspondiente byte menos significativo (LSB) y el byte más significativo (MSB) de la velocidad en baudios deseado a puertos & H3F8 y & H3F9, respectivamente, para COM1 o a puertos & H2F8 y & H2F9, respectivamente, para COM2. En la siguiente tabla, se muestran los bytes LSB y MSB para las velocidades en baudios:

   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

Ahora que se ha cambiado la velocidad en baudios, debe establecerse el resto de parámetros (por ejemplo, el tipo de paridad, bits de parada, bits de datos, etc.). Estos parámetros se establecen mediante el envío el byte correspondiente para el registro de control de línea (puerto & H3FB para COM1, o puerto & H2FB para COM2). El byte a enviar se establece mediante el establecimiento de los bits correspondientes según el siguiente esquema:
                          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

(En esta tabla se toma de la página 180 "programación en lenguaje ensamblador 8088: el IBM PC, Second Edition" por Willen y Krantz [Howard W. Sams & Company, Inc., 1988]. Por favor lea el capítulo 7, "Comunicaciones serie," para obtener más información.)


Después de configurar estos otros parámetros, se puede volver a habilitar la interrupción COM estableciendo el bit del puerto COM a 0 en la revisión médica independiente. Como antes, debe tener cuidado para no perturbar cualquiera de los demás bits en este registro, por lo que para enmascarar el particular bit 0, lógicamente "AND" el valor actual del registro con 255 menos el valor de bit. Por ejemplo:
   OUT &H21, INP(&H21) AND 239    'enables COM1 (255 - 16 = 239)   OUT &H21, INP(&H21) AND 247    'enables COM2 (255 - 8 = 247)

Una vez hecho este paso, puede reanudar la comunicación en la nueva configuración de la comunicación. A continuación es un ejemplo de código el listado ese cambia la velocidad en baudios y los parámetros de COM1 a 9600, N, 8, 1.


El libro siguiente contiene más información acerca de las direcciones de hardware:
"Del programador PC Sourcebook," por Thom Hogan (Microsoft Press, 1988)
El siguiente es un ejemplo de código:
     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!

Propiedades

Id. de artículo: 39255 - Última revisión: 17/01/2017 - Revisión: 1

Comentarios