Anda di halaman 1dari 12

http://www.qsl.net/eb7cjo/eb7cjo/serie.

txt

Cmo funciona el puerto Serie En este artculo, ofrezco una explicacin detallada del funcionamiento del puerto serie RS-232 y las diversas formas en que lo utilizan las TNCs y modems para packet-radio. - El est ndar RS-232C El puerto serie RS-232C, presente en todos los ordenadores actuales, es la forma m s comnmente usada para realizar transmisiones de datos entre ordenadores. El RS-232C es un est ndar que constituye la tercera revisin de la antigua norma RS-232, propuesta por la EIA (Asociacin de Industrias Electrnicas), realiz ndose posteriormente un versin internacional por el CCITT, conocida como V.24. Las diferencias entre ambas son mnimas, por lo que a veces se habla indistintamente de V.24 y de RS-232C (incluso sin el sufijo "C"), refirindose siempre al mismo est ndar. El RS-232C consiste en un conector tipo Sub-D de 25 pines, hembra, aunque es normal encontrar una versin de 9 pines, m s barato e incluso m s extendido para cierto tipo de perifricos (como el ratn serie del PC). En cualquier caso, los PCs no suelen emplear m s de 9 pines en el conector DB-25. Las seales que puede manejar este puerto serie son digitales, de +12V (0 lgico) -12V (1 lgico), para la entrada y salida de datos, y a la inversa en las seales de control. El estado de reposo en la entrada y salida de datos es -12V. Dependiendo de la velocidad de transmisin empleada, es posible tener cables de hasta 15 metros. Cada pin puede ser de entrada o de salida, teniendo una funcin especfica cada uno de ellos. Las m s importantes son: TXD RXD DTR DSR RTS CTS DCD (Transmitir Datos) (Recibir Datos) (Terminal de Datos Listo) (Equipo de Datos Listo) (Solicitud de Envo) (Libre para Envo) (Deteccin de Portadora)

Las seales TXD, DTR y RTS son de salida, mientras que RXD, DSR, CTS y DCD son de entrada. La masa de referencia para todas las seales es SG (Tierra de Seal). Finalmente, existen otras seales como RI (Indicador de Llamada), y otras poco comunes que no se explican en este artculo por rebasar el alcance del mismo. -------------------------------------------------------------N Pin Seal Descripcin E/S -------------------------------------------------------------DB-25 <--> DB-9 -----------------1 Chassis Ground 2 <--> 3 TxD Transmit Data S 3 <--> 2 RxD Receive Data E 4 <--> 7 RTS Request To Send S 5 <--> 8 CTS Clear To Send E 6 <--> 6 DSR Data Set Ready E 7 <--> 5 SG Signal Ground 8 <--> 1 CD/DCD (Data) Carrier Detect E 15 TxC Transmit Clock (*) S 17 RxC Receive Clock (*) E 20 <--> 4 DTR Data Terminal Ready S 22 <--> 9 RI Ring Indicator E 24 RTxC Transmit/Receive Clock (*) S (*) = Normalmente no conectada en el DB-25 -------------------------------------------------------------Diagrama de Seales del RS-232 YO5BYV y EB7CJO - El puerto serie en el PC El ordenador controla el puerto serie mediante un circuito integrado especfico, llamado UART (Transmisor-Receptor Asncrono Universal). Normalmente se utilizan los siguientes modelos de este chip: 8250 (bastante antiguo, con fallos, slo llega a 9600 baudios), 16450 (versin corregida del 8250, llega hasta 115.200 baudios) y 16550A (con buffers de E/S). Los port tiles suelen llevar otros chips: 82510 (con buffer especial, emula al 16450) el 8251 (no es compatible). Hay que tener en cuenta que en los sistemas operativos multitarea, es necesario tener una UART 16550A o superior para sobrepasar los 9600 baudios sin que se produzcan prdidas ocasionales de caracteres. Para controlar al puerto serie, la CPU emplea direcciones de puertos de E/S y lneas de interrupcin (IRQ). En el AT-286 se eligieron las direcciones

3F8h ( 0x3f8) e IRQ 4 para el COM1, y 2F8h e IRQ 3 para el COM2. El est ndar del PC llega hasta aqu, por lo que al aadir posteriormente otros puertos serie, se eligieros las direcciones 3E8 y 2E8 para COM3-COM4, pero las IRQ no est n especificadas. Cada usuario debe elegirlas de acuerdo a las que tenga libres o el uso que vaya a hacer de los puertos serie (por ejemplo, no importa compartir una misma IRQ en dos puertos siempre que no se usen conjuntamente, ya que en caso contrario puede haber problemas). Es por ello que ltimamente, con el auge de las comunicaciones, los fabricantes de PCs incluyan un puerto especial PS/2 para el ratn, dejando as libre al puerto serie. Mediante los puertos de E/S se pueden intercambiar datos, mientras que las IRQ producen una interrupcin para indicar a la CPU que ha ocurrido un evento (por ejemplo, que ha llegado un dato, o que ha cambiado el estado de algunas seales de entrada). La CPU debe responder a estas interrupciones lo m s r pido posible, para que d tiempo a recoger el dato antes que de el siguiente lo "machaque". Sin embargo, las UART 16550A incluyen unos buffers de tipo FIFO, dos de 16 bytes (para recepcin y transmisin), donde se pueden guardar varios datos antes de que la CPU los recoja. Esto tambin disminuye el nmero de interrupciones por segundo generadas por el puerto serie. - Cmo funcionan las TNCs Una TNC es algo muy parecido a un mdem telefnico, en el sentido de cmo se comunica con el ordenador. Emplea el "protocolo asncrono del RS-232" para transmitir los datos. Este protocolo es asncrono porque cada dato puede llegar en cualquier instante de tiempo. Debido a esta naturaleza asncrona, hay que delimitar al dato para saber dnde empieza y termina, lo que se hace con los bits de START y STOP. Un bit de Start consiste en un bit 1, que precede inmediatamente a los datos, mientras que el de Stop es un bit 0. El RS-232 puede transmitir los datos en grupos de 5, 6, 7 u 8 bits, a unas velocidades determinadas (normalmente, 9600 bits por segundo o m s). Despus de la transmisin de los datos, le sigue un bit opcional de paridad (indica si el nmero de bits transmitidos es par o impar, para detectar fallos), y despus 1 2 bits de Stop. Normalmente, el protocolo utilizado ser 8N1 (que significa, 8 bits de datos, sin paridad y con 1 bit de Stop).

Una vez que ha comenzado la transmisin de un dato, los bits tienen que llegar uno detr s de otro a una velocidad constante y en determinados instantes de tiempo. Por eso se dice que el RS-232 es asncrono por caracter y sncrono por bit. Los pines que portan los datos son RXD y TXD. Las dem s se encargan de otros trabajos: DTR indica que el ordenador est encendido, DSR que la TNC est encendida, RTS que el ordenador puede recibir datos (porque no est ocupado), CTS que la TNC puede recibir datos, y DCD que la TNC est conectada a otra estacin. Estas funciones pueden variar de un modelo a otro de TNC, por ejemplo DCD puede indicar presencia de datos en el canal, y DTR/DSR pueden usarse de igual forma que RTS/CTS (es decir, para controlar el flujo de datos). Tanto la TNC como el ordenador (o el programa terminal) tienen que usar el mismo protocolo serie para comunicarse entre s. Puesto que el est ndar RS-232 no permite indicar en qu modo se est trabajando, es el usuario quien tiene que decidirlo y configurar ambas partes. Como ya se ha visto, los par metros que hay que configurar son: protocolo serie (8N1), velocidad del puerto serie, y protocolo de control de flujo. Este ltimo puede ser por hardware (el que ya hemos visto, el handshaking RTS/CTS) o bien por software (XON/XOFF, el cual no es muy recomendable ya que no se pueden realizar transferencias binarias). La velocidad del puerto serie no tiene por qu ser la misma que la de transmisin de los datos, de hecho debe ser superior. Por ejemplo, para transmisiones de 1200 baudios es recomendable usar 9600, y para 9600 baudios se pueden usar 38400 ( 19200). --------------------------------------------------------------Emisor Receptor --------------------------------------------------------------_______________________________________ | | CTS <| | <- RTS _| |_ _ TXD -> ___ ___ _______ _____ | | | | | | | | | | 1 | 0 0 | 1 | 0 | 1 1 | 0 | -> RXD |___| |_______| |___| |___|

START STOP --------------------------------------------------------------Diagrama de transmisin de un dato con formato 8N1. El receptor indica al emisor que puede enviarle datos activando la salida RTS. El emisor envia un bit de START (nivel alto) antes de los datos, y un bit de STOP (nivel bajo) al final de estos.

- Cmo funciona el modem Baycom Este popular modem para packet-radio, que normalmente funciona a 1200 baudios, emplea una forma bastante distinta para comunicarse con el PC que las TNCs normales. Ello es debido a que su circuitera es demasiado sencilla. Cuando los del Baycom-Team disearon el modem, buscaban una forma barata de pasar los datos que llegaban por la radio al ordenador. Todas las TNC tienen que convertir los paquetes de datos que llegan por la radio en el protocolo asncrono del RS-232. Para ello emplean unos circuitos bastante complejos como el Z-80 SIO (para las CPU Z-80). El problema consiste en que los datos que llegan por la radio, que son bits modulados en frecuencia (FSK), no contienen los bits START/STOP cada 8 bits que necesita el RS-232. Esto es as ya que sera una prdida importante de ancho de banda, ya bajo de por s. Adem s, una vez que comienza un paquete AX.25, no paran de llegar los bits hasta que termina, o sea, la transmisin es sncrona e ininterrumpida. Por tanto, hace falta que la TNC tenga un buffer bastante grande donde guardar el paquete completo y luego transmitirlo al ordenador en grupos de 8 bits. Obviamente, el modem Baycom no tiene nada de esto. Lo nico que hace es demodular las seales FSK, transform ndolas en bits de datos, y entregarlas al puerto serie directamente. No aade bits de START/STOP, por lo que esta transmisin no se puede realizar por los pines TXD/RXD. As que la nica forma que queda para mandar estos datos al ordenador es a travs de las seales de control DSR, CTS DCD, que son las de entrada. El modem Baycom slo necesita CTS para entrada de datos al ordenador, y DTR para salida. Otro pin que se usa es RTS, para conmutar el PTT de la emisora. Adicionalmente TXD se mantiene a +12V para suministrar la alimentacin, que por cierto no es muy recomendable emplearla para evitar sobrecarga de la controladora y su eventual avera. La UART no puede agrupar estos bits que llegan de 8 en 8 bits para mandarlos a la CPU, por lo que el programa debe interrogar continuamente el estado de las seales y, adicionalmente, determinar cu ndo llegan datos v lidos (ya que normalmente no hay forma de indicar presencia de portadora). Cada bit que llega produce una interrupcin, lo que origina una gran sobrecarga del sistema y hace necesaria una respuesta inmediata por parte de la CPU. Si esta respuesta a la interrupcin no es lo suficientemente r pida, se corre el peligro de que un prximo bit "machaque" al anterior, con lo que se perderan datos. Todo esto hace que sea muy difcil controlar uno de estos modems en entornos multitarea, como Windows u OS/2. Obviamente, se precisa de drivers (controladores) especficos y muy optimizados, no vale con

emplear los del MS-DOS. Puede ser que alguien, empleando un ordenador potente y bajo ciertas condiciones, haya logrado recibir algo usando estos drivers pero no es ni mucho menos la mejor forma de emplearlos, ya que tarde o temprano se perder n bits. - Cmo funciona el modem de OE5DXL Hace poco tiempo, OE5DXL dise otro sencillo modem para packet-radio, con la peculiaridad de que funciona a 9600 baudios (aunque se puede modificar para trabajar a 1200). Este modem tiene muchas ventajas sobre el modem Baycom, no slo en la velocidad de operacin, sino en la forma que emplea para comunicarse con el ordenador. OE5DXL se busc la forma de enviar los datos que llegan sncronamente por la radio hacia el puerto serie empleando el protocolo asncrono, pero sin usar los costosos circuitos de las TNC, sino slo unos pocos componentes. Esta "magia" consiste en lo siguiente: los datos llegan a 9600 baudios y son transmitidos al ordenados a 38400 baudios. Esto es necesario para "tener sitio" para aadir los bits de START/STOP. Cada vez que el ordenador desea recibir datos, enva una secuencia de unos por la patilla TXD, lo cual origina, mediante la circuitera del modem, un bit de START en la patilla RXD. Cuando termina este bit de START se copia el bit que est llegando en ese momento hacia el pin RXD. Aunque parezca extrao, esta misma circuitera se emplea tambin para transmitir los datos, lo cual hace imposible la operacin en Full-Duplex con este mdem. Gracias a este ingenioso diseo de OE5DXL, se est empleando la UART para descargar de parte del trabajo a la CPU, lo que hace que sea factible hacer drivers para sistemas operativos multitarea para este modem. Eso s, aunque se emplee el protocolo asncrono, los datos siguen llegando de forma sncrona, lo cual hace que el tiempo de respuesta sea tambin bastante ajustado. Slo es cuestin de tiempo que nos veamos con la posibilidad de trabajar en sistemas operativos multitarea con un sencillo (y barato) modem para packet-radio. Sin embargo las TNC, aunque m s caras, tienen muchas m s posibilidades de ampliacin, y pueden trabajar a m s velocidad. Adem s, todo hay que decirlo, en su versin actual el modem de OE5DXL est un poco "sordo", ya que a veces pierde paquetes de datos, lo cual seguramente debe ser a causa del driver, que todava se encuentra en fase "beta". El usuario avanzado debera usar una TNC, mientras que el principiante (o el que no tiene mucho dinero) tiene la posibilidad de adentrarse en el mundo del packet a 9600 baudios mediante este ingenioso modem de OE5DXL. Quienes quieran obtener este modem, pueden hacerlo a travs de Internet:

http://home.pages.de/~dl9rdz Esta es la p gina Web de DL9RDZ, el traductor de la documentacin al ingls. Las direcciones de packet son las siguientes: OE5DXL @ OE5XBL.AUT.EU DL9RDZ @ DB0WGS.#BAY.DE.EU. 73 - Jos Carlos, EB7CJO @ EA7RKC.EACA.ESP.EU Internet: cramirez@arrakis.es cramirez@hercules.uca.es eb7cjo@digigrup.es (gateway Internet-Packet)

http://articulos.conclase.net/serie/

Generalidades:
En Windows no es posible acceder a los dispositvos fsicos directamente, a travs de las direcciones de sus puertos. Por el contrario, todos los accesos (salvo que estemos programando un driver) deben hacerse a travs de funciones del API. Los puertos serie, por tratarse de dispositivos incluidos como parte de los PC desde sus comienzos, estn muy bien integrados en el API de Windows, por lo tanto, tenemos un amplio repertorio de funciones para manejarlos. El presente artculo no pretende estudiar en profundidad todas las funciones y opciones del API de Windows con referencia al puerto serie, slo intentar que aquellos que necesiten usar estos puertos en sus programas tengan unas nociones ms precisas sobre como lograrlo. Windows trata los puertos serie (y tambin el paralelo), como si se tratase de un fichero de entrada y salida ms. La nica peculiaridad es que su comportamiento es asncrono, y esta caracterstica influye mucho en el modo en que tenemos que programar nuestras aplicaciones cuando usen uno de estos puertos. El comportamiento asncrono se debe a varias caractersticas de este tipo de comunicacin, para empezar, los datos se envan secuencialmente, a una velocidad relativamente baja. El

sistema tiene que estar preparado para recibir los datos en el momento en que estn disponibles, ya que si no acta as, se perdern irremisiblemente. En los ficheros normales, somos nosotros los que decidimos cundo y cmo leemos o escribimos los datos. Y como la velocidad de respuesta de estos ficheros es bastante buena, generalmenten no notamos que el programa se para mientras se procesan estas rdenes de lectura y escritura. Esto no pasa cuando se lee o se escribe de un puerto serie. Los datos que se reciben por uno de estos canales hay que leerlos cuando llegan, casi nunca sabremos cundo el dispositivo que tenemos conectado al otro extremo del cable va a decidir enviarnos datos. En cuanto a la escritura, pasa algo parecido, no podemos preveer con precisin si el dispositivo al que enviamos los datos los va a procesar con la velocidad a la que se los enviamos, o si est o no preparado para recibirlos. Aunque el sistema operativo dispone de un buffer para almacenar los datos que se reciben, ese buffer es finito, y si nuestro programa no retira esos datos con cierta frecuencia, los perder. En cuanto a las transmisiones hacia afuera, pasa algo parecido. El dispositivo receptor puede tener una capacidad limitada para procesar los datos, de modo que el sistema debe estar preparado para esperar mientras el receptor procesa los datos y nos avisa de que est preparado para recibir ms. Estas caractersticas hacen que nuestro programa se complique un poco ms de lo que en principio pudiramos esperar. Pero como veremos, tampoco es para tanto.

Abrir un canal asociado a un puerto serie


Lo primero que necesitamos es un fichero asociado a nuestro puerto serie. Para eso usaremos la funcin del API CreateFile. CreateFile es una funcin con muchas opciones y que sirve para muchas cosas, pero ahora nos centraremos en el puerto serie. Veremos ahora los valores posibles de los siete parmetros que necesita esta funcin:
1. LPCTSTR lpFileName: nombre del fichero. Se trata de una cadena que contiene el nombre del puerto que queremos abrir. Los valores posibles son "COM1", "COM2", "COM3" y "COM4". 2. DWORD dwDesiredAccess: tipo de acceso. En general querremos leer y escribir en el puerto, por lo tanto especificaremos los valores GENERIC_READ | GENERIC_WRITE. 3. DWORD dwShareMode: modo en que se comparte el fichero. En nuestro caso, un puerto serie no puede ser compartido, de modo que usaremos 0 para este parmetro. 4. LPSECURITY_ATTRIBUTES lpSecurityAttributes: atributos de seguridad, especifican el modo en que el fichero se puede heredar por procesos hijos. En nuestro caso no queremos que eso ocurra, de modo que usamos el valor NULL.

5. DWORD dwCreationDistribution: modo de creacin. Los puertos serie son dispositivos fsicos, por lo tanto, existen. El modo de creacin ser OPEN_EXISTING. 6. DWORD dwFlagsAndAttributes: atributos del fichero. Por ahora no nos interesa ninguno de estos atributos, usaremos el valor 0. 7. HANDLE hTemplateFile: plantilla de fichero. Se puede especificar un fichero existente del cual se copirarn los atributos. En nuestro caso no usaremos esta opcin, y usaremos el valor NULL para este parmetro.
idComDev = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

Modificar los parmetros de transmisin


En general, necesitaremos establecer los parmetros de la lnea serie que vamos a usar. Tendremos que fijar la velocidad de transmisin, el nmero de bits de datos, la paridad, y los bits de stop. Y a veces algunos parmetros ms. Para hacer esto, primero recuperaremos los parmetros del canal que acabamos de abrir, los modificaremos y actualizaremos la coniguracin del canal. Para recuperar los parmetros usaremos la funcin GetCommState. Esta funcin nos devuelve una estructura DCB, que contiene la configuracin actual del puerto serie.
fSuccess = GetCommState(idComDev, &dcb);

De todos los valores que incluye la estructura DCB, de momento slo nos preocuparemos por unos pocos:
1. DWORD BaudRate: velocidad en baudios. Este parmetro puede tener los siguientes valores: CBR_110, CBR_300, CBR_600, CBR_1200, CBR_2400, CBR_4800, CBR_9600, CBR_14400, CBR_19200, CBR_38400, CBR_56000, CBR_57600, CBR_115200, CBR_128000 y CBR_256000. 2. BYTE ByteSize: tamao de los datos en bits. Tradicionalmente 7 u 8. 3. BYTE Parity: valor de paridad. Se admiten los valores EVENPARITY, para paridad par; MARKPARITY; NOPARITY, para no paridad y ODDPARITY, para paridad impar. 4. BYTE StopBits: Bits de stop. Admite los valores ONESTOPBIT, 1 bit de stop; ONE5STOPBITS, 1.5 bits de stop y TWOSTOPBITS, 2 bits de stop.

Una vez que hemos actualizado la estructura de datos podemos configurar el puerto envindosela mediante la funcin: GetCommState.
SetCommState(idComDev, &dcb);

Monitorizacin de eventos
Podemos especificar qu eventos de los que se pueden producir en el puerto serie nos interesa procesar o monitorizar. De este modo, el sistema operativo nos avisar cada vez

que se produzca uno de esos eventos. El modo de especificar los eventos de inters es mediante una mscara, y para hacerlo usaremos la funcin SetCommMask. Se pueden especificar varios eventos, pero generalmente nos interesararn slo dos de ellos, al menos en la aplicaciones normales:
1. EV_RXCHAR: se ha recibido un carcter y se a colocado en el buffer de entrada. 2. EV_TXEMPTY: de ha enviado el ltimo carcter del buffer de salida.

Para nuestro ejemplo slo monitorizaremos el evento EV_RXCHAR.


SetCommMask(idComDev, EV_RXCHAR);

Ahora ya tenemos el puerto serie en condiciones de transmitir o recibir informacin.

Escribir en el puerto serie


Para enviar caracteres al puerto serie se usa la funcin WriteFile. Sin embargo, como ya hemos explicado, no basta con enviar los caracteres al puerto serie, el destinatario puede interrumpir la transmisin si no es capaz de procesar los datos a la misma velocidad que se los enviamos, de modo que los datos que intentamos enviar pueden no ser enviados por completo. Para estar seguros de que enviamos toda la informacin que queremos, usaremos uno de los parmetros que devuelve la funcin, y que nos dice cuntos caracteres se han enviado. Colocando la funcin WriteFile en un bucle, podemos enviar los caracteres que an estn pendientes hasta que todos hayan sido enviados. WriteFile puede retornar con valor false si se ha producido un error. Sin embargo, uno de los errores no es tal, el error ERROR_IO_PENDING en realidad slo nos informa de que no se ha completado la operacin de escritura. En caso de recibir ese error, debemos continuar enviado datos al puerto serie.
void EscribirSerie(char *buf) { char Buffer[1024]; DWORD n, l, p, err; strcpy(Buffer, buf); l = strlen(Buffer); // Longitud de los datos p = 0; // Posicin actual de los datos a enviar while(l) { if(!WriteFile(idComDev, &Buffer[p], 1, &n, NULL)) { err = GetLastError(); if(err != ERROR_IO_PENDING) { Comunicacion = false; return;

} } l -= n; p += n; } }

Esperar a que haya algo para leer


Por la misma naturaleza de las transmisiones, y debido a que nuestro ordenador normalmente ser muy rpido en comparacin con las velocidades de transmisin, la mayor parte del tiempo no estaremos recibiendo nada por el puerto serie. Ya hemos definido la mscara de eventos que queremos recibir del puerto serie. Para saber si se ha producido uno de esos eventos tenemos que llamar a la funcin WaitCommEvent. Pero, tal como hemos configurado el puerto serie, esta funcin no regresa mientras no se produzca uno de los eventos que hemos definido. Esto nos impide que nuestro programa realice otras tareas, como por ejemplo, enviar informacin al puerto. Necesitamos un mecanismo que avise a nuestro programa cuando existan datos para leer, pero no debemos bloquear el sistema preguntando constantemente si hay algo preparado. Ni siquiera debemos bloquear nuestro programa, a menudo hay otras cosas que hacer adems de esperar la llegada de nueva informacin. La mejor forma es introducir la funcin WaitCommEvent en un hilo distinto del de nuestro programa principal. Podemos hacer que ese hilo espere a que se produzca un evento, y cuando eso ocurra, que lo procese. En nuestro caso, slo se puede producir un evento, de modo que una funcin posible para procesarlo es:
// Hilo de escucha del puerto serie: DWORD Hilo(LPDWORD lpdwParam) { DWORD dwEvtMask; do { if(WaitCommEvent(idComDev, &dwEvtMask, NULL)) if(dwEvtMask & EV_RXCHAR) LeeSerie(); } while(true); return 0; }

Esta funcin coloca la funcin WaitCommEvent en un bucle infinito, y cuando detecta el evento EV_RXCHAR, hace una llamada a la funcin LeeSerie(), que procesa los datos recibidos.

Por supuesto, en algn lugar del programa, debemos lanzar el hilo, esto se hace con la funcin CreateThread.
hHilo = CreateThread(NULL, 0, Hilo, &param, 0, &id);

Leer desde el puerto serie


Lo primero que necesitamos saber es cuantos caracteres hay en el buffer de entrada. Para eso podemos usar la funcin ClearCommError. Esta funcin nos actualiza una estructura COMSTAT, uno de cuyos miembros es cbInQue, que nos dice cuantos caracteres hay en el buffer de entrada. Con ese dato podemos llamar a la funcin ReadFile, y leer todos los caracteres que haya en el buffer.
// Leer datos del puerto serie: void LeeSerie() { int i, j, k; DWORD x; COMSTAT cs; // Actualizar COMSTAT, sirve para // averiguar el nmero de bytes en el buffer de entrada: ClearCommError(idComDev, &x, &cs); // Leer cs.cbInQue caracteres: ReadFile(idComDev, cad, cs.cbInQue, &x, NULL); // Actualizar el fin de cadena: cad[x]=0; // Mostrar caracteres ledos: cout << cad; return; }

Programa de ejemplo
Con esto ya es suficiente para crear un programa de comunicaciones serie sencillo, pero que ilustra la mayor parte de los casos que necesiten comunicacin serie. El siguiente ejemplo es un monitor de comunicacin serie en modo texto. Pueden usarse dos programas en ordenadores diferentes, conectados con un cable serie, y es posible comunicarse entre ellos. Yo he probado este programa como terminar serie de un VAX, y salvo por las secuencias de escape propias de estos terminales, el programa funciona perfectamente.

Anda mungkin juga menyukai