|
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.
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
|