Está en la página 1de 14

Instituto Tecnolgico de Durango

Ingeniera en Sistemas Computacionales

Lenguajes de Interfaz
Ing. Jos Lauro Sols Gallegos

Unidad IV Programacin de Dispositivos


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.

También podría gustarte