Unidad IV.- Lenguajes de Interfaz
Short Description
Download Unidad IV.- Lenguajes de Interfaz...
Description
Instituto Tecnológico de Durango
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz Ing. José Lauro Solís Gallegos
Unidad IV Programación de Dispositivos
Introducción Un puerto es una forma genérica de denominar a una interfaz a través de la cual los diferentes tipos de datos se pueden enviar y recibir. Dicha interfaz puede ser de tipo físico, o puede ser a nivel de software (por ejemplo, los puertos que permiten la transmisión de datos entre diferentes computadoras, en cuyo caso se usa frecuentemente el término puerto lógico).
Puerto Lógico Se denomina así a una zona, o localización de la memoria de una computadora que se asocia con un puerto físico o con un canal de comunicación, y que proporciona un espacio para el almacenamiento temporal de la información que se va a transferir entre la localización de memoria y el canal de comunicación. En el ámbito de Internet, un puerto es el valor o número que se usa en el modelo de la capa de transporte, para distinguir entre las múltiples aplicaciones que se pueden conectar al mismo host, puesto o computadora. Por ejemplo, por el puerto número 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 Físico Un puerto físico, es aquella interfaz, o conexión entre dispositivos, que permite conectar físicamente distintos tipos de dispositivos como monitores, impresoras, escáneres, discos duros externos, cámaras 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 periféricos, en donde la información es transmitida bit a bit enviando un solo bit a la vez, en contraste con el puerto paralelo que envía varios bits simultáneamente. La comparación entre la transmisión en serie y en paralelo se puede explicar usando una analogía con las carreteras. Una carretera tradicional de un sólo carril por sentido sería como la transmisión en serie y una autopista con varios carriles por sentido sería la transmisión en paralelo, siendo los vehículos 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 través de los puertos serie ha sido generalizada. Se ha usado y sigue usándose para conectar las computadoras a dispositivos como terminales o módems. Los “mouses”, teclados, y otros periféricos también se conectaban de esta forma. Mientras que otras interfaces como Ethernet, FireWire y USB mandaban datos como un flujo en serie, el término "puerto serie" normalmente identifica el hardware conforme al estándar RS-232, diseñado para interactuar con un módem o con un dispositivo de comunicación similar. Actualmente en la mayoría de los periféricos serie, la interfaz USB ha reemplazado al puerto serie puesto que es más rápida. La mayor parte de las computadoras están conectadas a dispositivos externos a través 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 todavía se encuentran en sistemas de automatización industrial y algunos productos industriales y de consumo (cañones de proyección, 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 configuración. Los puertos serie se usan frecuentemente en estas áreas porque son sencillos, baratos y permiten la interoperabilidad entre dispositivos. La desventaja es que la configuración de las conexiones serie requiere, en la mayoría de los casos, un conocimiento avanzado por parte del usuario y el uso de comandos complejos si la implementación no es adecuada.
Puerto serie asincrónico A través de este tipo de puerto la comunicación se establece usando un protocolo de transmisión asíncrono. En este caso, se envía en primer lugar una señal inicial anterior a cada byte, carácter o palabra codificada. Una vez enviado el código correspondiente se envía inmediatamente una señal de stop después de cada palabra codificada. La señal de inicio sirve para preparar al mecanismo de recepción, o receptor, la llegada, y registro de un símbolo, y la señal de “stop” sirve para predisponer al mecanismo de recepción para que tome un descanso y se prepare para la recepción del nuevo símbolo. La típica transmisión “start-stop” es la que se usa en la transmisión de códigos ASCII a través del puerto RS-232, como la que se establece en las operaciones con los llamados teletipos.
Puerto serie sincrónico El puerto serie RS-232 (también conocido como COM) es del tipo sincrónico en el protocolo a bajo nivel, utiliza cableado simple desde 3 hilos hasta 25 y conecta computadoras o microcontroladores a todo tipo de periféricos, desde terminales a impresoras y módems, pasando por “mouses”. El término sincrónico se refiere al uso de un reloj que sincronice al receptor y transmisor para el envío de información, generalmente esto se configura en la inicialización 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 tenía un conector tipo DB-25, sin embargo la mayoría 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 excepción del mouse el resto de periféricos solían presentar el conector tipo DB-25. La norma RS-422, similar al RS-232, es un estándar utilizado en el ámbito industrial. Puertos serie modernos Uno de los defectos de los puertos serie iniciales era su lentitud en comparación 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 hacían muy interesantes, ya que presentaban las ventajas del menor cableado y solución al problema de la baja de velocidad, con un mayor apantallamiento y más baratos, usando la técnica 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 compresión por software hasta más de 900000 bps (casi 1 megabit).
Tipos de comunicación en serie Simplex: En este caso el emisor y el receptor están perfectamente definidos y la comunicación es unidireccional. Este tipo de comunicaciones se emplean, usualmente, en redes de radiodifusión, donde los receptores no necesitan enviar ningún tipo de dato al transmisor. Duplex, half duplex o semi-duplex: En este caso ambos extremos del sistema de comunicación cumplen funciones de transmisor y receptor y los datos se desplazan en ambos sentidos pero no de manera simultánea. Este tipo de comunicación se utiliza habitualmente en la interacción entre terminales y una computadora central. Full Duplex: El sistema es similar al duplex, pero los datos se desplazan en ambos sentidos simultáneamente. Para que sea posible ambos emisores poseen diferentes frecuencias de transmisión o dos caminos de comunicación separados, mientras que la comunicación semi-duplex necesita normalmente uno solo. Para el intercambio de datos entre computadores este tipo de comunicaciones son más eficientes que las transmisiones semi-dúplex. 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 dirección al registro de uso con apuntadores ;Color de Fondo, Color de Caracter ;Poner en AL el ASCII del caracter ;Instrucción 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 ensam blador El sistema de almacenamiento en disco constituye el soporte externo de la información. Los datos se registran sobre la superficie del disco en una serie de circunferencias concéntricas 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 básica de almacenamiento en disco. El tamaño de un sector se mide en bytes, y depende de las características del disco. Interrupciones que hacen uso del acceso a discos: INT 0EH, INT 25H, INT 26H, función 36H de la INT 21H, algunas funciones de la INT 13H. Manejo de Disco s
Para almacenar información permanente en grandes cantidades, las computadoras cuentan con dispositivos especiales, llamados memoria secundaria o externa, generalmente son dispositivos que almacenan información magnética. Un disco es una superficie plana, magnética dividida en círculos concéntricos a los cuales se les llama “Tracks“ (pistas), además de tener 2 lados, cabe mencionar que los primeros discos únicamente tenían 1 sola cara. Cada track está dividido en sectores, los cuales almacenan un determinado número 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 operación 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 número de tracks y lados en un disco depende del hardware del disco, y de la unidad que lo maneja, pero el número de sectores y el tamaño 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 más bien en bloques de bytes, debido a que el acceso a disco implica movimientos mecánicos además de que el acceso se da por sectores; en este proceso no interviene el CPU, puesto que solo envía los comandos a la interface que maneja la unidad de disco y ésta es la que se encarga de leer o escribir información 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 información en el área de DMA, después envía un comando de escritura a la interface. La interface lee la información de la memoria (DMA) y la escribe en el sector deseado, después informa al CPU si terminó la operación o si se produjo un error (INT 0Eh). Cuando se requiere leer información del disco entonces el CPU envía un comando de lectura a la interface, ésta localiza el sector deseado, lee la información y la deposita en el área de DMA, avisa al CPU que terminó o bien si hay error. Después de esto el CPU puede leer la información para procesarla. Para el manejo de disco desde BIOS se hace uso de la INT 13h, y con servicios de la misma interrupción. 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 físicos de un disco en sectores lógicos, y divide el disco en 4 áreas básicas de información: a) Boot record: Contiene la información acerca del formato del disco, tal como número de sectores, número de tracks, número de lados, etc. Además contiene un pequeño 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 localización 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 información acerca de los archivos en el disco (nombre, extensión, tamaño, fecha y hora de última actualización, atributos y un apuntador a su correspondiente en el FAT). d) Archivos (área de datos): Es donde se guarda la información 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 tamaño de 128 bytes. Cuando se crea un archivo en el directorio se guarda el nombre y la extensión, 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 información importante para el acceso a archivo, por ejemplo: FCB DB 36 DUP (0) El formato para el FCB es el siguiente: Byte Contenido: 0
1 – 8 9 – 0Bh 0Ch – 0Dh 0Eh – 0Fh 10h – 13h 14h – 15h 16h – 17h
18h – 1Fh 20h 21h – 24h
Número 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. Extensión en ASCII Número de bloque corriente. Tamaño de los registros, por default 80h. Tamaño del archivo. Fecha de la última actualización. Hora de la última actualización. segundos minutos horas Reservados por el sistema. Número de registro corriente relativo al inicio del bloque corriente. Número 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 extensión; los demás bytes se ponen en cero y son actualizados por el sistema.
4.3 Programación del puerto serial El MS-DOS soporta el uso de impresoras, plotters, modems y otros dispositivos de impresión o comunicaciones a través de “ drivers” (manejadores) para los puertos paralelo y serial. Los puertos paralelos reciben este nombre, porque transfieren la información (8 bits) en paralelo a través de cables independientes. Los puertos seriales transfieren la información serialmente (1 bit a la vez) a través de un única conexión física. 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 comunicación bidireccional con la computadora y a mayores distancias (hasta 1 kilómetro). El interfaz más común para puertos seriales es el llamado RS-232. Este estándar especifica una conexión de 25 cables con ciertas características eléctricas, el uso de ciertas señales de control (handshaking) y un conector estándar DB-25. El MS-DOS incorpora manejadores para varios adaptadores paralelos y dos seriales. Los nombres lógicos de estos adaptadores son LPT1, LPT2, etc. para los puertos paralelos, y COM1, COM2 para los puertos seriales. El dispositivo estándar de impresión (PRN1) y dispositivo estándar auxiliar (AUX) están 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 puer tos 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, además del uso de las instrucciones IN y OUT para el puerto paralelo. 4.4 Programación del puerto paralelo Ejemplo del uso de Puerto Paralelo
El siguiente ejemplo nos va a mostrar cómo se envía información al puerto paralelo de la computadora utilizando instrucciones del lenguaje ensamblador. El Puerto paralelo, en la mayoría de las computadoras personales compatibles con IBM - PC, es una salida de propósito general de 8 bits utilizada para manejar una amplia gama de impresoras, trazadores y otros dispositivos externos. Las líneas de datos del interfaz responden a un tipo de instrucción de E/S en ensamblador: out, y podemos usar los datos de estas líneas 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 instrucción out. Las señales 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 través de las terminales (conector DB25) del pin 2 al 9 y representan las líneas de datos DO a D7. Iluminación de un LED
El ejemplo es un programa que hace dos llamadas a rutinas en lenguaje ensamblador insertadas (Ensamblador Híbrido). La primera limpia la pantalla y la segunda envía un valor de 8 bits al puerto paralelo. Puesto que el potencial del puerto es compatible TTL (el 1 lógico corresponde con 5 V y el cero con 0.5 V), puede manejar directamente pequeños 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 electrónicas, algún alambre de conexión 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 electrónicos será del tipo que permita que los circuitos integrados DIP sean insertados y retirados fácilmente. Este material se puede encontrar en cualquier tienda de repuestos electrónicos. Si se adquieren conectores que se anclan en el enchufe de conexión 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 dañar la computadora debido a una conexión errónea. N o obstante, recordemos que estamos realizando conexiones “en vivo” a la computadora. Hay que tener mucho cuidado de no conectar ningún
dispositivo externo donde se presenten potenciales desconocidos. El siguiente código en C contiene la rutina de limpieza de pantalla, y la rutina para acceder al puerto paralelo: /* * * * */
Programa en C que muestra cómo usar el lenguaje ensamblador en línea para limpiar la pantalla y acceder al puerto paralelo. Este programa irá iluminando secuencialmente 8 L.E.D. conectados a las líneas de datos D0 a D7 del puerto 956 (LPT1).
#pragma inline #include #include #include 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 interrupción del BIOS*/ int 10H /*llamada a la interrupción*/ } for (i=0;i
View more...
Comments