Captura de datos desde puerto serie


En aplicaciones de telemetría o de monitoreo recibir información del exterior es una actividad indispensable. Es por ello que presentamos aquí el código necesario para leer un puerto serie (COM1 o COM2) permitiendo capturar información. Con simples cambios se pueden lograr maravillas en este sistema. 

#include <conio.h>
#include <stdio.h>
#include <dos.h>
#include <math.h>
#include <bios.h>

int puerto,k,j,dato,config;
char lectura[1],dato1[2];

char leer()
  {
  do{
    dato=bioscom(2,0x83,puerto);
    } while (!kbhit());
  return(dato);
  }

void main(void)
  {
  clrscr();
  printf("Ingrese puerto COM a usar: ");
  scanf("%d", &puerto);
  while(puerto<1 || puerto>4)
    {
    clrscr();
    printf("ERROR... Debe ingresar 1, 2, 3 o 4 !!!\n\n");
    printf("Ingrese puerto COM a usar: ");
    scanf("%d", &puerto);
    }

  puerto--;
  config=0x83;
  bioscom(0,config,puerto);

  clrscr();
  gotoxy(14,4);
  printf("RECEPCION DE DATOS VIA SERIE");
  gotoxy(8,6);
  printf("Config --> COM %d \\ 1200 bps \\ 8N1", puerto+1);
  gotoxy(29,8);
  printf("Escape --> Salir");
  gotoxy(23,10);
  printf("MONITOR DE RECEPCION: ");

  do{
    if(!kbhit()) dato1[0]=leer();
    if(!kbhit())
      {
      gotoxy(40,12);
      printf("%1s ",dato1);
      }

    }while(!kbhit());

  }

DESCRIPCION:
La función Leer() retorna un caracter con el dato obtenido del puerto serie.  El proceso de recepción puede ser interrumpido presionando cualquier tecla.

En el cuerpo principal del programa las primeras lineas se encargan de obtener el puerto serie a emplear, con una pequeña rutina de validación.

La sentencia puerto-- resta una unidad al puerto seleccionado ya que el sistema los identifica de 0 a 7 y el usuario los conoce de 1 a 8. La variable config se carga con los parámetros de velocidad, bits de datos y paridad de la comunicación. Por último la función bioscom se encarga de configurar el puerto serie.

La siguientes sentencias dibujan una precaria interface en pantalla.

El ciclo do while se encarga de leer repetitivamente el puerto de comunicaciones y escribir el resultado en pantalla en tanto no se presione tecla alguna. Es por ello que está plagado de sentencias !kbhit().