Vous êtes sur la page 1sur 14

Instituto Tecnolgico de Durango Ingeniera en Sistemas Computacionales Unidad IV Programacin de Dispositivos

Lenguajes de Interfaz Ing. Jos Lauro Sols Gallegos

Introduccin Un puerto es una forma genrica de denominar a una interfaz a travs de la cual los diferentes tipos de datos se pueden enviar y recibir. Dicha interfaz puede ser de tipo fsico, o puede ser a nivel de software (por ejemplo, los puertos que permiten la transmisin de datos entre diferentes computadoras, en cuyo caso se usa frecuentemente el trmino puerto lgico).

Puerto Lgico Se denomina as a una zona, o localizacin de la memoria de una computadora que se asocia con un puerto fsico o con un canal de comunicacin, y que proporciona un espacio para el almacenamiento temporal de la informacin que se va a transferir entre la localizacin de memoria y el canal de comunicacin. En el mbito de Internet, un puerto es el valor o nmero que se usa en el modelo de la capa de transporte, para distinguir entre las mltiples aplicaciones que se pueden conectar al mismo host, puesto o computadora. Por ejemplo, por el puerto nmero 80 se manda el servicio del protocolo HTTP (servicio de www), y por el puerto 21 se manda el servicio del protocolo FTP (servicio de transferencia de grandes archivos). Puerto Fsico Un puerto fsico, es aquella interfaz, o conexin entre dispositivos, que permite conectar fsicamente distintos tipos de dispositivos como monitores, impresoras, escneres, discos duros externos, cmaras digitales, memorias pendrive USB, etc. Estas conexiones tienen denominaciones particulares como, por ejemplo, los puertos "serie", "paralelo", Ethernet, USB o SATA de una computadora.

Puerto serie (o serial) Un puerto serie o puerto serial es una interfaz de comunicaciones de datos digitales, frecuentemente utilizado por computadoras y perifricos, en donde la informacin es transmitida bit a bit enviando un solo bit a la vez, en contraste con el puerto paralelo que enva varios bits simultneamente. La comparacin entre la transmisin en serie y en paralelo se puede explicar usando una analoga con las carreteras. Una carretera tradicional de un slo carril por sentido sera como la transmisin en serie y una autopista con varios carriles por sentido sera la transmisin en paralelo, siendo los vehculos los bits que circulan por el cable.

Puerto serie de conector DB9 A lo largo de la mayor parte de la historia de las computadoras, la transferencia de datos a travs de los puertos serie ha sido generalizada. Se ha usado y sigue usndose para conectar las computadoras a dispositivos como terminales o mdems. Los mouses, teclados, y otros perifricos tambin se conectaban de esta forma. Mientras que otras interfaces como Ethernet, FireWire y USB mandaban datos como un flujo en serie, el trmino "puerto serie" normalmente identifica el hardware conforme al estndar RS-232, diseado para interactuar con un mdem o con un dispositivo de comunicacin similar. Actualmente en la mayora de los perifricos serie, la interfaz USB ha reemplazado al puerto serie puesto que es ms rpida. La mayor parte de las computadoras estn conectadas a dispositivos externos a travs de USB y, a menudo, ni siquiera llegan a tener un puerto serie de conector DB9. El puerto serie se elimina para reducir los costes y se considera que es un puerto heredado y obsoleto. Sin embargo, los puertos serie todava se encuentran en sistemas de automatizacin industrial y algunos productos industriales y de consumo (caones de proyeccin, televisores tipo LCD, cajas registradoras, dispositivos especializados en interconectividad y redes, etc.). Los dispositivos de redes, como los enrutadores y conmutadores, a menudo tienen puertos serie para modificar su configuracin. Los puertos serie se usan frecuentemente en estas reas porque son sencillos, baratos y permiten la interoperabilidad entre dispositivos. La desventaja es que la configuracin de las conexiones serie requiere, en la mayora de los casos, un conocimiento avanzado por parte del usuario y el uso de comandos complejos si la implementacin no es adecuada.

Puerto serie asincrnico A travs de este tipo de puerto la comunicacin se establece usando un protocolo de transmisin asncrono. En este caso, se enva en primer lugar una seal inicial anterior a cada byte, carcter o palabra codificada. Una vez enviado el cdigo correspondiente se enva inmediatamente una seal de stop despus de cada palabra codificada. La seal de inicio sirve para preparar al mecanismo de recepcin, o receptor, la llegada, y registro de un smbolo, y la seal de stop sirve para predisponer al mecanismo de recepcin para que tome un descanso y se prepare para la recepcin del nuevo smbolo. La tpica transmisin start-stop es la que se usa en la transmisin de cdigos ASCII a travs del puerto RS-232, como la que se establece en las operaciones con los llamados teletipos.

Puerto serie sincrnico El puerto serie RS-232 (tambin conocido como COM) es del tipo sincrnico en el protocolo a bajo nivel, utiliza cableado simple desde 3 hilos hasta 25 y conecta computadoras o microcontroladores a todo tipo de perifricos, desde terminales a impresoras y mdems, pasando por mouses. El trmino sincrnico se refiere al uso de un reloj que sincronice al receptor y transmisor para el envo de informacin, generalmente esto se configura en la inicializacin del puerto medida en bps (bits por segundo). La interfaz entre el RS-232 y el microprocesador generalmente se realiza mediante una UART 8250 (computadoras de 8 y 16 bits, PC XT) o 16550 (IBM Personal Computer/AT y posteriores). El RS-232 original tena un conector tipo DB-25, sin embargo la mayora de dichos pines no se utilizaban, por lo que IBM estandariz con su gama IBM Personal System/2 el uso del conector DB-9 (ya introducido en el modelo AT) que se usaba, de manera mayoritaria en computadoras. Sin embargo, a excepcin del mouse el resto de perifricos solan presentar el conector tipo DB-25. La norma RS-422, similar al RS-232, es un estndar utilizado en el mbito industrial. Puertos serie modernos Uno de los defectos de los puertos serie iniciales era su lentitud en comparacin con los puertos paralelos hablamos de 19.2 kbits por segundo- sin embargo, con el paso del tiempo, estuvieron apareciendo multitud de puertos serie de alta velocidad que los hacan muy interesantes, ya que presentaban las ventajas del menor cableado y solucin al problema de la baja de velocidad, con un mayor apantallamiento y ms baratos, usando la tcnica del par trenzado. Por ello, el puerto RS-232, e incluso multitud de puertos paralelos, se sustituyeron y reemplazaron por los nuevos puertos serie como el USB, el FireWire (IEEE1394) o el Serial ATA (SATA). El puerto serie puede transmitir por hardware hasta 9600 bps, y con sistemas de compresin por software hasta ms de 900000 bps (casi 1 megabit).

Tipos de comunicacin en serie Simplex: En este caso el emisor y el receptor estn perfectamente definidos y la comunicacin es unidireccional. Este tipo de comunicaciones se emplean, usualmente, en redes de radiodifusin, donde los receptores no necesitan enviar ningn tipo de dato al transmisor. Duplex, half duplex o semi-duplex: En este caso ambos extremos del sistema de comunicacin cumplen funciones de transmisor y receptor y los datos se desplazan en ambos sentidos pero no de manera simultnea. Este tipo de comunicacin se utiliza habitualmente en la interaccin entre terminales y una computadora central. Full Duplex: El sistema es similar al duplex, pero los datos se desplazan en ambos sentidos simultneamente. Para que sea posible ambos emisores poseen diferentes frecuencias de transmisin o dos caminos de comunicacin separados, mientras que la comunicacin semi-duplex necesita normalmente uno solo. Para el intercambio de datos entre computadores este tipo de comunicaciones son ms eficientes que las transmisiones semi-dplex. 4.1 El buffer de video en modo texto ;Programa 1.- Despliegue de caracter con atributos usando memoria de video org 0100h mov di,0002h mov ax,0B800h mov es,ax mov ah,0A1h mov al,'T' mov word ptr es:[di],ax mov ah,07h ;Valores pares para apuntar a 16 bits ;0B800h=Direccion de inicio de desplazamiento para video ;Pasar la direccin al registro de uso con apuntadores ;Color de Fondo, Color de Caracter ;Poner en AL el ASCII del caracter ;Instruccin de uso de apuntadores directos

int 21h int 20h ;Programa 2.- Despliega cadena en pantalla con atributos org 0100h jmp eti0 cad0 db 'Tecnologico' eti0: mov bp,offset cad0 mov cl,[bp-1] ;CL=Longitud de la cadena mov ch,00h ;CX=Longitud de la Cadena CAD0 mov ah,13h ;AH=Funcion 13H de la INT 10h mov al,1d ;AL=Modo de escritura, 0=Usando el Cursor, 1=Atributos de Cadena mov bh,0h ;BH=Pagina de despliegue mov bl,11111100b ;BL=Atributos de la cadena (Fondo y Caracteres) mov dl,10d ;DL=Columna mov dh,10d ;DH=Renglon int 10h mov ah,07h int 21h int 20h 4.2 Acceso a discos en lenguaje ensamblador El sistema de almacenamiento en disco constituye el soporte externo de la informacin. Los datos se registran sobre la superficie del disco en una serie de circunferencias concntricas llamadas pistas (track). Varias pistas, una por cada cara del disco (generalmente 2), componen un cluster. Cada pista est dividida en porciones iguales llamadas sectores. Un sector es la unidad bsica de almacenamiento en disco. El tamao de un sector se mide en bytes, y depende de las caractersticas del disco. Interrupciones que hacen uso del acceso a discos: INT 0EH, INT 25H, INT 26H, funcin 36H de la INT 21H, algunas funciones de la INT 13H. Manejo de Discos Para almacenar informacin permanente en grandes cantidades, las computadoras cuentan con dispositivos especiales, llamados memoria secundaria o externa, generalmente son dispositivos que almacenan informacin magntica. Un disco es una superficie plana, magntica dividida en crculos concntricos a los cuales se les llama Tracks (pistas), adems de tener 2 lados, cabe mencionar que los primeros discos nicamente tenan 1 sola cara. Cada track est dividido en sectores, los cuales almacenan un determinado nmero de bytes. Las unidades de disco, son dispositivos capaces de leer o escribir en un disco, y para eso tienen una cabeza lectora quien realiza una operacin de moverse al track deseado (Seek Time), y luego esperar por el sector seleccionado (Latency Time). Hay un transmisor y un receptor para ver donde inician los sectores.

Seek Time: Tiempo en que se tarda en posicionar la cabeza lectora en moverse a un track. El nmero de tracks y lados en un disco depende del hardware del disco, y de la unidad que lo maneja, pero el nmero de sectores y el tamao de los mismos se determina en el momento de formatear el disco (depende del software).

Acceso al disco Para leer o escribir en un disco, no se realiza byte a byte, sino ms bien en bloques de bytes, debido a que el acceso a disco implica movimientos mecnicos adems de que el acceso se da por sectores; en este proceso no interviene el CPU, puesto que solo enva los comandos a la interface que maneja la unidad de disco y sta es la que se encarga de leer o escribir informacin de un rea especial de memoria, llamada DMA; este proceso es conocido como acceso directo a memoria.

Cuando se escribe en disco, el CPU coloca la informacin en el rea de DMA, despus enva un comando de escritura a la interface. La interface lee la informacin de la memoria (DMA) y la escribe en el sector deseado, despus informa al CPU si termin la operacin o si se produjo un error (INT 0Eh). Cuando se requiere leer informacin del disco entonces el CPU enva un comando de lectura a la interface, sta localiza el sector deseado, lee la informacin y la deposita en el rea de DMA, avisa al CPU que termin o bien si hay error. Despus de esto el CPU puede leer la informacin para procesarla. Para el manejo de disco desde BIOS se hace uso de la INT 13h, y con servicios de la misma interrupcin. Para el manejo de disco desde el sistema DOS, se utilizan los discos a los cuales se le haya aplicado el comando format, el cual realiza un formato a nivel de BIOS (INT 13h), es decir mapea todos los sectores fsicos de un disco en sectores lgicos, y divide el disco en 4 reas bsicas de informacin: a) Boot record: Contiene la informacin acerca del formato del disco, tal como nmero de sectores, nmero de tracks, nmero de lados, etc. Adems contiene un pequeo programa que se encargar de bajar el sistema operativo (boot del sistema). Boot Strap: Lee el primer sector del disco (boot record) y le transfiere el control. Boot del sistema: Pasa a memoria los archivos del sistema operativo, les transfiere el control para que aparezca el prompt del sistema. b) Tabla de localizacin de archivos (FAT): En esta tabla se guarda una lista de los sectores ocupados por cada archivo contenido en el disco. c) Directorio: Se guarda informacin acerca de los archivos en el disco (nombre, extensin, tamao, fecha y hora de ltima actualizacin, atributos y un apuntador a su correspondiente en el FAT). d) Archivos (rea de datos): Es donde se guarda la informacin contenida en los archivos. Los pasos a seguir para trabajar con archivos son los siguientes: 1.- Identificar el archivo (nombre.ext). 2.- Si el archivo no existe, entonces crearlo si hay que escribir, sino marcar error. 3.- Localizar el archivo en el directorio. 4.- Abrir el archivo. 5.- Acceder el archivo (leer o escribir registros). 6.- Cerrar el archivo. La forma de acceder a un archivo es mediante registros, es decir, se lee un registro o se escribe un registro de memoria a disco. Al rea destinada para la transferencia de registros se le conoce como DTA (rea de transferencia de datos) y puede estar localizada en cualquier parte del segmento de datos. El DTA tiene un tamao de 128 bytes. Cuando se crea un archivo en el directorio se guarda el nombre y la extensin, se busca

espacio en el disco y se guarda, por lo que no siempre son secuenciales los sectores de los archivos, es por eso que en la FAT se guardan las direcciones de los sectores. Un archivo se puede acceder de dos formas: acceso secuencial; en este caso se sigue un orden en la lectura/escritura de registros, acceso aleatorio; en esta caso no se sigue un orden establecido y se puede leer/escribir en cualquier registro. En DOS, para trabajar con archivos se necesitan dos estructuras de datos: 1.- Un rea de memoria para el DTA, donde se van a escribir los registros, por ejemplo: DTA DB 128 DUP (0) 2.- Un rea para el bloque de control de archivos (FCB) en donde se guarda informacin importante para el acceso a archivo, por ejemplo: FCB DB 36 DUP (0) El formato para el FCB es el siguiente: Byte Contenido: 0

18 9 0Bh 0Ch 0Dh 0Eh 0Fh 10h 13h 14h 15h 16h 17h

18h 1Fh 20h 21h 24h

Nmero de unidad donde se encuentra el archivo: 0 = Unidad corriente 1=A 2 = B ... Nombre del archivo en ASCII, los espacios que no se ocupen se llenan con espacios en blanco. Extensin en ASCII Nmero de bloque corriente. Tamao de los registros, por default 80h. Tamao del archivo. Fecha de la ltima actualizacin. Hora de la ltima actualizacin. <0 ... 4> segundos <5 ... 11> minutos <12 ... 15> horas Reservados por el sistema. Nmero de registro corriente relativo al inicio del bloque corriente. Nmero de registro corriente relativo al inicio del archivo.

Un bloque de archivo consta de 80h registros de 80h bytes cada uno. Al iniciar el manejo de un archivo los nicos campos del FCB que se inicializan son el de la unidad, el nombre y la extensin; los dems bytes se ponen en cero y son actualizados por el sistema.

4.3 Programacin del puerto serial El MS-DOS soporta el uso de impresoras, plotters, modems y otros dispositivos de impresin o comunicaciones a travs de drivers (manejadores) para los puertos paralelo y serial. Los puertos paralelos reciben este nombre, porque transfieren la informacin (8 bits) en paralelo a travs de cables independientes. Los puertos seriales transfieren la informacin serialmente (1 bit a la vez) a travs de un nica conexin fsica. Los puertos paralelos se emplean generalmente para dispositivos de salida de alta velocidad, como impresoras, a una distancia corta. Los puertos seriales son empleados para dispositivos lentos, como modems y terminales, que requieren comunicacin bidireccional con la computadora y a mayores distancias (hasta 1 kilmetro). El interfaz ms comn para puertos seriales es el llamado RS-232. Este estndar especifica una conexin de 25 cables con ciertas caractersticas elctricas, el uso de ciertas seales de control (handshaking) y un conector estndar DB-25. El MS-DOS incorpora manejadores para varios adaptadores paralelos y dos seriales. Los nombres lgicos de estos adaptadores son LPT1, LPT2, etc. para los puertos paralelos, y COM1, COM2 para los puertos seriales. El dispositivo estndar de impresin (PRN1) y dispositivo estndar auxiliar (AUX) estn generalmente asociados a LPT1 y COM1 respectivamente.

Al igual que en el caso de manejo de teclado y video, existen tres niveles de manejo para los puertos paralelo y serial: - Funciones del MS-DOS orientadas a manejador (handle). - Funciones tradicionales del MS-DOS. - Funciones del BIOS. Interrupciones que hacen uso del puerto serial y paralelo: INT 14H y 17H respectivamente, adems del uso de las instrucciones IN y OUT para el puerto paralelo. 4.4 Programacin del puerto paralelo Ejemplo del uso de Puerto Paralelo El siguiente ejemplo nos va a mostrar cmo se enva informacin al puerto paralelo de la computadora utilizando instrucciones del lenguaje ensamblador. El Puerto paralelo, en la mayora de las computadoras personales compatibles con IBM - PC, es una salida de propsito general de 8 bits utilizada para manejar una amplia gama de impresoras, trazadores y otros dispositivos externos. Las lneas de datos del interfaz responden a un tipo de instruccin de E/S en ensamblador: out, y podemos usar los datos de estas lneas para controlar el hardware que elijamos. El puerto paralelo es un puerto de 8 bits de datos, lo cual significa que se pueden enviar hasta 8 bits a la vez. El tipo de dato de 8 bits en lenguaje ensamblador es el byte, mientras que en lenguaje C el tipo corresponde a char o unsigned char. Los datos se escriben en las terminales de salida al ejecutar una instruccin out. Las seales de salida del puerto llevan una corriente de 20 mA. El voltaje alto de salida es de 5 V de corriente continua mientras que el potencial bajo es de 0.5 V. Los datos circulan a travs de las terminales (conector DB25) del pin 2 al 9 y representan las lneas de datos DO a D7. Iluminacin de un LED El ejemplo es un programa que hace dos llamadas a rutinas en lenguaje ensamblador insertadas (Ensamblador Hbrido). La primera limpia la pantalla y la segunda enva un valor de 8 bits al puerto paralelo. Puesto que el potencial del puerto es compatible TTL (el 1 lgico corresponde con 5 V y el cero con 0.5 V), puede manejar directamente pequeos diodos emisores de luz (LED). Para conectar 8 LED al puerto paralelo se necesita solamente un cable que conecte el puerto paralelo a un tablero de prototipos electrnicas, algn alambre de conexin y 8 LEDs. Este ejemplo usa un conector D de 25 terminales para conectar el puerto a un cable acabado en un enchufe macho de 24 terminales. Se descarta el terminal #13 del conector D. El tablero de prototipos electrnicos ser del tipo que permita que los circuitos integrados DIP sean insertados y retirados fcilmente. Este material se puede encontrar en cualquier tienda de repuestos electrnicos. Si se adquieren conectores que se anclan en el enchufe de conexin no ser necesaria la soldadura. Los potenciales presentes en un puerto paralelo son muy bajos por lo que no representan peligro alguno. Asimismo, es casi imposible daar la computadora debido a una conexin errnea. No obstante, recordemos que estamos realizando conexiones en vivo a la computadora. Hay que tener mucho cuidado de no conectar ningn dispositivo externo donde se presenten potenciales desconocidos. El siguiente cdigo en C contiene la rutina de limpieza de pantalla, y la rutina para acceder al puerto paralelo: /* * * * */

Programa en C que muestra cmo usar el lenguaje ensamblador en lnea para limpiar la pantalla y acceder al puerto paralelo. Este programa ir iluminando secuencialmente 8 L.E.D. conectados a las lneas de datos D0 a D7 del puerto 956 (LPT1).

#pragma inline #include <dos.h> #include <stdio.h> #include <math.h> main() { int i,temp; int puerto=965;

/*Borra la ventana de texto*/ asm{ mov cx,0 /*esquina superior izquierda*/ mov dx,2479H /*esquina inferior de la ventana*/ mov bh,7 /*atributo normal de pantalla*/ mov ax,0600H /*valor de la interrupcin del BIOS*/ int 10H /*llamada a la interrupcin*/ } for (i=0;i<9;i++) { temp=(int) pow(2.0,(double) y); /*accediendo al puerto paralelo*/ asm{ mov dx,puerto /*pone el nmero en el puerto*/ mov ax,temp /*valor enviado al puerto*/ out dx,al /*enviando solo los 8 bits ms bajos*/ } printf(&d\n,temp); delay(1000); } return (0); } En este programa se realiza algo ms interesante que imprimir nmeros en la pantalla: mantiene una secuencia de valores de 8 bits a travs del puerto paralelo. Con una secuencia temporal adecuada, podemos crear un conjunto de pilotos luminosos que se persiguen. Si cada bit de datos en el puerto paralelo corresponde a una potencia entera de 2, con la funcin pow se generarn los nmeros 1,2,4,8,16,32,64, y 128 siendo enviados al puerto (realmente, se genera tambin 256 que provoca el final de la secuencia y del programa).

PIN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

Funcin Strobe BIT 1 BIT 2 BIT 3 BIT 4 BIT 5 BIT 6 BIT 7 BIT 8 Acknowledge Busy Paper OUT Select OUT Autofeed Error Printer Reset Select IN Tierra Tierra Tierra Tierra Tierra

23 24 25

Tierra Tierra Tierra

4.5 Programacin hbrida Mientras que muchos programadores prefieren escribir aplicaciones completamente en lenguaje ensamblador, otros reservan para este ltimo slo aquellas labores de muy bajo nivel o que exigen un muy alto rendimiento. Existen incluso otros, que prefieren escribir sus programas principalmente en ensamblador, aprovechando ocasionalmente las ventajas que proporcionan las libreras y construcciones de lenguajes de alto nivel. Interfaz con PASCAL El Turbo Assembler proporciona facilidades extensas y poderosas para la adicin de rutinas en lenguaje ensamblador a programas escritos en Turbo PASCAL. Por qu usar rutinas en lenguaje ensamblador en programas escritos en PASCAL?. Aunque la mayora de las aplicaciones sern escritas slo en PASCAL, existen ocasiones en las cuales este no provea alguna facilidad especfica o se requiera de una gran velocidad de ejecucin, slo alcanzable con lenguaje ensamblador. Interfaz con lenguaje C y C++ Tradicionalmente el C++ y el lenguaje ensamblador han sido mezclados escribiendo mdulos separados completamente en C++ o completamente en ensamblador, compilando los mdulo en C++ y ensamblando los mdulos en ensamblador, y finalmente enlazando los mdulos objeto. Esta es una solucin muy recomendable, pero tiene un inconveniente: el programador de ensamblador debe atender a las reglas de interfaz con C++. Reglas para mezclar programas en C++ y lenguaje ensamblador Para enlazar programas en C++ con programas en lenguaje ensamblador es necesario observar dos cosas: 1.- El mdulo en lenguaje ensamblador debe emplear un esquema de segmentos compatible con C++. 2.- Los mdulos en C++ y ensamblador deben compartir variables y funciones en una forma aceptable para el compilador de C++. Enlace de mdulos en C++ con mdulos en lenguaje ensamblador El enlace es un concepto importante en C++. El compilador y el enlazador deben trabajar en conjunto para asegurar que las invocaciones a funciones contienen los argumentos correctos. Un proceso llamado namemangling proporciona la informacin necesaria referente a los tipos de argumentos. Este proceso modifica el nombre de la funcin para indicar los argumentos que ella toma. Cuando el programa es escrito completamente en C++, la modificacin de los nombres de las funciones ocurre automticamente y de una manera transparente al programador. Sin embargo, al escribir rutinas en ensamblador que van a ser enlazadas con programas en C++, es necesario asegurarse de que las funciones contengan los nombres modificados. 4.6 Programacin de puerto usb Introduccin Velocidades y comparativas Funciones tpicas del puerto USB Caractersticas generales del puerto USB Facilidad de uso para los usuarios Flexibilidad Ancho de banda iscrono Aplicaciones y carga de trabajo Robustez Implementacin de bajo costo Topologa del bus USB Estructura de capas Capa Fsica Capa Lgica Flujo de datos del bus USB Puntos finales y direcciones de dispositivos Tuberas Stream Mensaje Frames y Microframes Tipos de transferencia De Control Iscronas De interrupcin

De Bultos Capas de protocolo Formato de los campos Identificador de paquete De direccin EndPoint Nmero de frame De datos Formato de los paquetes De tipo Token Inicio de Frame De datos HandShake Transacciones IN Mediante conmutacin de Bits OUT Setup Split Protocolo y Transferencias Transferencia de bulto Transferencia de control Transferencia de Interrupcin Transferencias iscronas La Elctrica Identificacin de velocidad del dispositivo Codificacin de datos Relleno de bits Sync End of Packet (EOP) La Mecnica Cable standard (quita-pon) Cable fijo de velocidad alta y media Cable fijo de baja velocidad Programacin de Puertos seriales (forma Hbrida en C, C++) Un protocolo de comunicacin define las reglas de la comunicacin entre dos puntos (transmisor y receptor), por lo tanto es posible crear protocolos que realicen una sincronizacin entre el equipo que desea transmitir informacin y el que la debe recibir. La programacin de un protocolo se puede realizar prcticamente con cualquier lenguaje de programacin que permita el manejo de dispositivos hardware de comunicacin de una computadora (puertos series, USBs, paralelos, tarjeta de red ethernet, firewire, etc.) o dispositivos externos dedicados a la misma tarea (mdems, concentradores, switches etc.). Ejemplo de los lenguajes que permiten la creacin de protocolos a nivel bsico son el Lenguaje C y el Lenguaje Ensamblador, aunque existen otros que se pueden utilizar para dicho fin (Java, Visual Basic, Delphi, etc.), estos ya aplican una tcnica mucho ms moderna que los puertos seriales, llamada sockets. En ocasiones es necesario hacer una mezcla entre dos lenguajes para utilizar los privilegios de programacin que cada lenguaje puede tener, tal es el caso de usar la programacin hbrida con Lenguaje C y Lenguaje Ensamblador. A continuacin se describen algunas funciones hechas en lenguaje C con ensamblador para realizar comunicaciones del tipo serial sincrnico. Serial: Transmitir un bit o byte uno detrs de otro, nunca dos al mismo tiempo. Sncrono: Se toma como referencia al tiempo para definir exactamente (sincronizar) cuando se debe transmitir un bit o byte. La forma ms sencilla de comunicacin es usando los puertos seriales, entonces para este tema, se utilizarn estos puertos de la computadora (el ms comn: DB9) y la comunicacin deber ser sincronizada de la misma manera en las dos computadoras que participen en la comunicacin.

Funciones hbridas (usando Lenguaje Ensamblador) en lenguaje C, C++ (Compilador Borland 3.1 1993). Funcin para la INICIALIZACIN de un puerto de comunicaciones. void inicializa(int port) { asm{ mov ah,00h mov al,11100011b mov dx,port int 14h } } La interrupcin 14 hexadecimal de lenguaje ensamblador es la encargada de manejar y controlar el puerto serial de comunicaciones de una computadora (conector DB9, estndar IEEE RS232), el cual puede lograr comunicaciones seriales sncronas a una velocidad de 9600 Baudios o bits por segundo (modo hardware). En el caso de esta funcin llamada INICIALIZA, se utiliza el servicio 00 hexadecimal (mov ah,00h) de la interrupcin 14 hexadecimal (int 14h) para indicar que lo que se va a hacer es inicializar o preparar el puerto de comunicaciones seriales. Se pueden tener en una computadora ms de un puerto serial (posiblemente 2), entonces se debe especificar cul de los puertos es el que se va a inicializar, cosa que se define con el valor que se almacena en el registro DX, y que a travs de la variable port se pasa a dicho registro (mov dx,port). El valor de PORT deber ser un nmero entre 0 y 3, que indicar si se inicializa el puerto serie 0 (COM0), o el 1 (COM1), o el 2 (COM2), etc. Generalmente el puerto serie ms utilizado es donde se conecta el mouse tipo DB9, este puerto corresponde casi siempre al valor de 0. Por ltimo, es muy importante el definir los parmetros de inicializacin del puerto, donde se indican entre otras cosas: la velocidad de transmisin, paridades, bits de inicio y parada, etc. Dichos valores definirn la forma exacta en que se transmitirn los bytes entre una computadora y otra, una inicializacin estndar es la que se da en la instruccin mov al,11100011b , en donde se est definiendo entre otras cosas una velocidad mxima de transmisin de 9600 Baudios o bits por segundo. Funcin que ENVIA un carcter (byte) de una mquina a otra. void envia(char car,int port) { asm{ mov ah,01h mov dx,port mov al,car int 14h } } En el caso de la funcin ENVIA, se solicita el uso del servicio 01h de la int 14h, que es el encargado de enviar un carcter (byte) de un puerto serial a otro, en dx deber estar el nmero de puerto por donde se enviar el carcter, en el registro al el cdigo ASCII del carcter a enviar (por ejemplo 97 decimal para la letra a), y llamar por ltimo a la int 14h. Funcin que LEE o recibe un carcter del puerto serial. char lee(int port) { char temp; asm{ mov ah,02h mov dx,port int 14h mov temp,al } return temp; }

Para la funcin LEE, se solicita el uso del servicio 02h, que es el encargado de traer del puerto serial el carcter que ah se encuentre (en caso de no haber nada, se puede ocasionar un error), este servicio de leer un carcter del puerto debe ser utilizado en coordinacin con el servicio 03h que es el encargado de detectar el estado del puerto serial, de lo contrario se podrn ocasionar malos funcionamientos o sincronizaciones en los programas de comunicaciones. Observe que igual que en los otros servicios, el nmero de puerto de comunicaciones deber estar en el registro DX, lo importante aqu es que despus de la ejecucin de la int 14h, se tendr en el registro al el cdigo ASCII del carcter ledo del puerto, valor que es pasado a la variable temp para poder utilizarlo en alto nivel. Funcin ESTADO para detectar el estado del puerto. unsigned char estado(int port) { unsigned char temp; asm{ mov ah,03h mov dx,port int 14h and ah,00000001b mov temp,ah } return temp; } La funcin ESTADO es muy importante cuando deseamos recibir caracteres, esta funcin deber ser usada antes de la funcin LEE, debido a que primero se debe estar seguro de que en el puerto de comunicaciones existe un carcter por leer, cosa que detecta la funcin ESTADO, despus, si es afirmativo se utiliza la funcin LEE. En la funcin ESTADO se utiliza el servicio 03h, igual que antes en DX, debe estar el nmero de puerto, y por ltimo llamar a ejecucin a la instruccin de bajo nivel int 14h, la cual devolver como resultado un valor en el registro ah, en este se encuentra informacin respecto al estado del puerto (vase figura siguiente), entre otras cosas, es importante recalcar que el bit donde se encuentra la informacin de si existe o no un carcter por leer del puerto, es en el bit menos significativo (el del extremo derecho), si este bit es 1, quiere decir que si existe un carcter por leer (para leerlo se utiliza la funcin LEE), si es 0 no existe nada por leer. El filtro con la compuerta and se utiliza para que solo quede en el registro ah un 0 un 1, depende si existe o no carcter por leer, dicho valor es pasado a la variable temp para ser utilizado en alto nivel.

Estado de retorno del puerto serial Algoritmo de simulacin de protocolo Para el uso de las funciones anteriores se deber de contar con un algoritmo que nos permita lograr la comunicacin a travs de una buena sincronizacin lgica, pueden existir muchos algoritmos que nos permitan lograr el objetivo deseado, para despus codificarlos en cualquier lenguaje de programacin. A continuacin se presenta un algoritmo bsico de comunicacin para un programa de TRANSMISIN de caracteres (TX) y salida con la tecla ESC. Inicio Preguntar por el nmero de puerto de comunicaciones (PORT) Inicializar puerto de comunicaciones Repetir Preguntar por un carcter (CAR) Enviar CAR Si CAR es ESC no desplegarlo en pantalla Caso contrario si desplegarlo Mientras que CAR sea diferente de ESC

Ahora se presenta un algoritmo bsico de comunicacin para un programa de RECEPCIN de caracteres (RX) y salida con recepcin de la tecla ESC. Inicio Preguntar por el nmero puerto de comunicaciones (PORT) Inicializar puerto de comunicaciones Repetir Repetir Preguntar por el estado del puerto (EDO) Mientras EDO sea igual a 0 Leer carcter del puerto (CAR) Si CAR es ESC no desplegarlo en pantalla Caso contrario si desplegarlo Mientras que CAR sea diferente de ESC Los algoritmos antes descritos funcionan codificndolos en un lenguaje soportado por manejo de hardware, y dndoles la secuencia lgica que debe implementarse para lograr la comunicacin. Adems es importante mencionar que el canal de comunicacin utilizado entre una computadora y otra, es un cable tipo UTP de 8 hilos con conectores DB9 hembras en los extremos, y conectados elctricamente de la manera tipo MODEM nulo, que es una manera de simular en el puerto de una computadora que existe un mdem de comunicacin, y con esto lograr que se puedan enviar caracteres de una mquina a otra. La forma de conexin para el cable de mdem nulo se muestra a continuacin:

Relacin de conexiones:

1 2 3 4 5 6y9 7y8 Tierra

con con con con con con con con

7y8 3 2 6y9 5 4 1 Tierra

Debe entenderse que las conexiones se hacen de un extremo del cable al otro en los conectores DB9, adems, note los puentes que se deben hacer en cada extremo. Tierra se refiere al chasis metlico de cada conector.