COM1 | 0x3F8 |
COM2 | 0x2F8 |
COM3 | 0x3E8 |
COM4 | 0x2E8 |
Para modificar un solo bit de un registro, normalmente es aconsejable leer el valor anterior, modificar el bit, y re-escribir el resultado: Por ejemplo, para poner el bit DLAB en 1:
base = 0x3f8; outport(base + 3, inport(base + 3) | 0x80); ... modificar el divisor ... outport(base + 3, inport(base + 3) & 0x7f);
Sin embargo, cuando se utilizan computadoras que no disponen de los periféricos en forma nativa (por ejemplo, con un puerto serial simulado mediante un cable convertidor USB - Serial), este método puede causar problemas. En este caso es mejor no confiar en el valor leido del registro:
base = 0x3f8; conf = 0x03; // Corresponde a 8bits datos, 1bit stop, sin paridad outport(base + 3, conf | 0x80); ... modificar el divisor ... outport(base + 3, conf);
Nota: Pocos de las interfases USB/Serial contienen el software necesario para emular los puertos correctamente en DOS a nivel de registros. Los que sí lo tienen, a veces hay que habilitarlos en el 'Panel de control'.
Los registros están descritos en las tablas abajo. El procedimiento de uso de la interfase es como sigue:
115200 dividido por el (valor programado)
O sea, si programamos 1, la velocidad será de 115200 Bauds, 2 da 57600 Bauds, etc.
Una vez programada la velocidad tenemos que poner el bit DLAB nuevamente en 0 para volver al funcionamiento normal.
Antes de enviar tenemos que controlar el bit 'THR Empty' (THR es el registro de almacenamiento del transmisor, que tiene que estar vacio antes de poder recibir un valor nuevo). Si THR Empty está en 1, entonces podemos enviar el caracter siguiente.
(c) John Coppens ON6JC/LW3HAZ | correo |