Control de los Puertos en Lenguaje C
 

 
 
 
 
 
 
 
  
 
Comunicaciones seriales en Lenguaje C.  
En lenguaje C, existe una instrucción especial para manejar las comunicaciones seriales. Esta instrucción posee la siguiente sintaxis: 
 
int bioscom (int cmd, char abyte, int port); 
 
En realidad, esta instrucción acude a la interrupción 14H para permitir la comunicación serial sobre un puerto. Para este caso, cada uno de los parámetros tiene el siguiente significado: 
 
cmd Especifica la operación a realizar 
abyte es un caracter que se enviará por el puerto serial
port es la identificación del puerto serial (desde 0 para COM1 hasta 3 para COM4)
 
El parámetro cmd puede tener los siguientes valores y significados: 
    0   Inicializa el puerto port con los valores dados por abyte 
    1   Envía el caracter abyte por el puerto port 
    2   Lee el caracter recibido por el puerto port 
    3   Retorna el estado del puerto port 
Para la inicialización del puerto, el caracter abyte tiene las interpretaciones que se muestran en la siguiente Tabla. 
 
0x02  
0x03
7 bits de datos 
8 bits de datos
0x00  
0x04
1 bits de parada 
2 bits de parada
0x00  
0x08  
0x18
Sin paridad 
Paridad impar 
Paridad par
0x00  
0x20  
0x40  
0x60  
0x80  
0xA0  
0xC0  
0xE0
 110 baudios 
 150 baudios 
 300 baudios 
 600 baudios 
1200 baudios 
2400 baudios 
4800 baudios 
9600 baudios
 
Para configurar el puerto con algunos parámetros, bastará con realizar una operación OR con los deseados, por ejemplo, para 1200 baudios, sin bit de paridad, sin bit de parada y 8 bits, bastará con seleccïonar la palabra dada por: 
   
abyte = 0x80 | 0x00 | 0x00 | 0x03 
 
o lo que es equivalente, 
   
abyte = 0x83 
 
Para la lectura de un caracter que se haya recibido o del estado del puerto, se deben utilizar variables en las cuales se almacenarán los valores de retorno; en ambos caso se obtienen valores de 16 bits. Para la lectura de un dato recibido, los 8 bits menos significativos corresponden al dato y los 8 más significativos al estado del puerto; si alguno de estos últimos está en "1 ", un error ocurrió; si todos están en "0", el dato fue recibido sin error. 

Cuando el comando es 2 ó 3 (leer el caracter o el estado del puerto), el argumento abyte no se tiene en cuenta. Para configurar el puerto COM1 con los parámetros del ejemplo dado anteriormente, bastará con la instrucción: 
   

bioscom (0,0x83,0); /*(inicializar, parámetros, COM1)*/ 
 
La utilización de los comandos y las instrucciones para la configuración de los puertos aquí expuestos sólo tendrán sentido en la medida en que utilicemos el puerto serial para establecer una comunicación bien con otros computadores o bien con dispositivos electrónicos como microcontroladores. 

Comunicación con el puerto paralelo en Lenguaje C.  
El lenguaje C permite tanto la lectura como la escritura de los puertos paralelo. Para leer el puerto existen las instrucciones inport e inportb, mientras que para escribir están las instrucciones outport y outportb. La sintaxis de estas instrucciones es la siguiente: 

    unsigned          inport  (unsigned portid); 
    unsigned char   inportb (unsigned portid); 
    void                 outport (unsigned portid, unsigned      value); 
    void                 outportb (unsigned portid, unsigned char value);
Ejemplo: 
    Palabra = inport(puerto); 
    outport (puerto,Palabra); 
    Byte = inportb (puerto); 
    outportb (puerto,Byte);
Las instrucciones que terminan en b ese refieren a la lectura o escritura de un byte, mientras que las que no terminan en esta letra se refieren a una palabra(dos byte). La variable puerto debe contener la dirección de memoria del puerto paralelo, este valor puede ser 378h, 3BCh ó 278h. Por ultimo no hay que olvidar colocar la siguiente directiva del preprocesador que le indica al C que se usarán las funciones inport, outport, inportb u outportb, declaradas en el archivo dos.h. 
    #include <dos.h>
El siguiente programa consulta la dirección del primer puerto paralelo disponible: 
 
    #include <conio.h> 
    #include <dos.h> 
    void main(void) 
    { 
       int puerto;
       clrscr(); 
       puerto=peekb(0x40,0x8); 
       printf("Dirección: %Xh",puerto); 
       getch(); 
    }
Como verán la utilización del puerto paralelo es mucho más sencillo que la serial. 

Referencias utilizadas: 
1.- Naranjo C. , Jhon Jairo. Electronica & Computadores."Interface serial RS-232".  Año I Nº10. Pag. 71-76 
2.- Naranjo C. , Jhon Jairo. Electronica & Computadores."Kinder de programación en C".  Año I Nº9. Pag. 71-76 

Otros Articulos 

 
henryg@ing.ula.ve