23
TOPICOS SELECTOS DE PROGRAMACION “Unidad 6 Programacion de Puertos ” ALEJANDRA FLORES CHAVEZ OSCAR GARCIA ROJAS VERONICA AIDE GONZALES ZAMORA SUSANA IBETH GRANADOS RUIZ

TOPICOS SELECTOS DE PROGRAMACION.doc

Embed Size (px)

Citation preview

Page 1: TOPICOS SELECTOS DE PROGRAMACION.doc

TOPICOS SELECTOS DE PROGRAMACION

“Unidad 6 Programacion de Puertos ”

ALEJANDRA FLORES CHAVEZOSCAR GARCIA ROJAS

VERONICA AIDE GONZALES ZAMORA SUSANA IBETH GRANADOS RUIZ

PROGRAMACIÓN DE PUERTOS

Page 2: TOPICOS SELECTOS DE PROGRAMACION.doc

La programación del puerto paralelo se está haciendo cada día más común y necesario para aquellos que cursan estudios superiores relacionados a la electrónica, el control y la automatización.

Por lo que espero facilitar la información necesaria para la comprensión de los aspectos básicos de la programación del puerto paralelo y ofrecer un medio didáctico de ayuda para aquellos sin o con poca experiencia en la programación del LPT1.

Para aprender a programar el puerto paralelo hay que:

1. Tener conocimientos básicos de la electrónica digital. 2. Tener conocimientos básicos del lenguaje de programación a trabajar. 3. Comprender y conocer la estructura del puerto (todos sus aspectos:

físico, lógico y eléctrico). 4. Conocer los métodos para trabajar los datos binarios. 5. Aprender a utilizar las herramientas de control del puerto para cada

lenguaje.

GENERALIDADES DE PUERTOS

Canales: Grupos de cables a través de los cuales viaja la información entre los componentes del sistema. Tienen 8, 16 o 32 cables y este número indica la cantidad de bits de información que puede transmitir al mismo tiempo. Los canales más anchos pueden transmitir información con más rapidez que los canales angostos. Ranuras de expansión: Se conectan al bus eléctrico común. Algunos canales están conectados a ellas en la caja del computador. Los usuarios pueden personalizar sus máquinas insertando tarjetas de circuitos (o tarjetas) de propósito especial en estas ranuras. Existen tarjetas de expansión de RAM, adaptadores de color y de gráficos, fax módem, puertos, coprocesadores (procesadores adicionales que incrementan la capacidad o velocidad de procesamiento del sistema), etc.  Puertos: Son puntos de conexión en la parte exterior del chasis de la computadora a los que se conectan algunos canales. El puerto permite una conexión directa con el bus eléctrico común de la PC los puertos pueden ser:  Puertos series: Permiten la transmisión en serie de datos, un bit a la vez. Este tipo de puertos permiten una interfaz con impresoras y módems de baja velocidad.

Page 3: TOPICOS SELECTOS DE PROGRAMACION.doc

 Puertos paralelos: Permiten la transmisión paralela de datos, es decir que se transmiten varios bits simultáneamente. Permiten la interfaz con dispositivos tales como impresoras de alta velocidad, unidades de cinta magnética de respaldo y otras computadoras. Las ranuras de expansión y los puertos simplifican la adición de dispositivos externos o periféricos.

PUERTO SERIAL Y VARIANTES

Definición:  Un puerto es el lugar donde el CPU se comunica con otros dispositivos, existen de varios tipos, hay puertos de entrada, de salida y ambos. Además estos pueden ser seriales o paralelos.  Puertos de entrada: Estos puertos recogen datos de algún dispositivo externo, externo se refiere a estar fuera del CPU, no del gabinete. Existen muchos dispositivos periféricos que se conectan a un puerto de entrada, por ejemplo tenemos al teclado y al mouse, también están los lápices ópticos, los lectores de código se barras, etc.  Puertos de salida:  Son todos aquellos por donde el CPU envía datos a otros dispositivos, por ejemplo están la salida de video y de sonido.  Puertos de entrada / salida:  Estos son una clase de puertos por donde el CPU puede enviar y recibir información. Son muy importantes, ya que entre estos se encuentran las memorias del CPU como son la RAM, ROM, los floppys y discos duros. Estos puertos pueden ser usados para controlar dispositivos, tales como las impresoras y los quemadores externos, por ejemplo.  Nosotros vamos a hablar acerca de los puertos que se encuentran fuera del gabinete, hablaremos de los puertos de teclado, mouse, impresoras, etc. La computadora por si misma no sería capaz de realizar operaciones útiles para nosotros si no podemos comunicarnos con ella, necesita dispositivos

Page 4: TOPICOS SELECTOS DE PROGRAMACION.doc

periféricos por donde pueda darnos mensajes y nosotros podamos enviarle órdenes. Ahora bien, existen infinidad de dispositivos que sirven de extensión a la computadora, muchos son para fines muy específicos y no se pueden abarcar, entre los dispositivos que son de uso común se encuentra la impresora, el teclado, el mouse y el monitor.  Puerto serial:  El puerto serial es aquel que envía y recibe los datos BIT por BIT, entre los puertos seriales se puede mencionar el puerto de teclado, o el puerto del MODEM.  Puerto paralelo:  Este tipo de puerto transmite la información byte por byte, o sea que transmite ocho bits al mismo tiempo, de forma paralela. Un puerto paralelo por excelencia pues es el puerto para impresora  Se puede observar que un puerto de entrada puede ser paralelo o serial, lo mismo que un puerto de entrada / salida.  A cada puerto la bios le asigna una dirección de memoria para que pueda trabajar, dependiendo de que clase de puerto sea se le asigna un determinado espacio exclusivo para él. Por medio de estas localidades de memoria el sistema puede enviarles o recibir información, es una especie de memoria de intercambio para la transmisión de dados de un lugar a otro. A esto se le llama espacio de localidades de memoria y se realiza dentro del primer kilo bite de la memoria principal. Existen otras asignaciones de memoria en otras capas superiores de memoria pero estas son hechas por el sistema operativo y por los demás programas, pero estas asignaciones son para fines específicos de los demás programas.  Los puertos no solo se limitan a recibir la información, o enviarla, según sea el caso. El puerto provee la corriente eléctrica necesaria para el funcionamiento del dispositivo y revisa el estado de este.

PUERTOS USB

Conectores USB

Page 5: TOPICOS SELECTOS DE PROGRAMACION.doc

Su sistema contiene dos conectores USB (Universal Serial Bus [bus serie universal]) para conectar dispositivos compatibles con la norma USB. Los dispositivos USA por lo general son dispositivos periféricos de baja velocidad, como teclados, mouse, impresoras y altavoces para equipos PC.

Figura 10. Números de patas de los conectores USB

Si reconfigura su hardware, es posible que necesite información sobre las asignaciones de patas y las señales de los conectores USB. La Figura 10 ilustra los números de patas de los conectores USB y la Tabla 8 enumera y define las asignaciones de patas y las señales de interfaz de los conectores USB.

Tabla 8. Asignaciones de patas y señales de interfaz para los conectores USB

Pata Señal E/S Definición

1 Vcc No disponible Voltaje de alimentación

2 DATA E Entrada de datos

3 +DATA S Salida de datos

4 GND No disponible Tierra de señal

Permite conectar hasta 127 dispositivos y ya es un estándar en los ordenadores de última generación, que incluyen al menos dos puertos USB 1.1, o puertos USB 2.0 en los más modernos.

Pero ¿qué otras ventajas ofrece este puerto? Es totalmente Plug & Play, es decir, con sólo conectar el dispositivo y en caliente (con el ordenador encendido), el dispositivo es reconocido e instalado de manera inmediata. Sólo es necesario que el Sistema Operativo lleve incluido el correspondiente controlador o driver, hecho ya posible para la mayoría de ellos sobre todo si se dispone de un Sistema Operativo como por ejemplo Windows XP, de lo contrario el driver le será solicitado al usuario.

Posee una alta velocidad en comparación con otro tipo de puertos, USB 1.1 alcanza los 12 Mb/s y hasta los 480 Mb/s (60 MB/s) para USB 2.0, mientras un puerto serie o paralelo tiene una velocidad de transferencia inferior a 1 Mb/s. El puerto USB 2.0 es compatible con los dispositivos USB 1.1

El cable USB permite también alimentar dispositivos externos a través de él, el consumo máximo de este controlador es de 5 voltios. Los dispositivos se pueden dividir en dispositivos de bajo consumo (hasta 100 mA) y dispositivos de alto consumo (hasta 500

Page 6: TOPICOS SELECTOS DE PROGRAMACION.doc

mA) para dispositivos de más de 500 mA será necesario alimentación externa. Debemos tener en cuenta también que si utilizamos un concentrador y éste está alimentado, no será necesario realizar consumo del bus. Hay que tener en cuenta que la longitud del cable no debe superar los 5 m y que éste debe cumplir las especificaciones del Standard USB iguales para la 1.1 y la 2.0

PUERTOS INFRARROJO

El nombre de infrarrojo, que significa por debajo del rojo, proviene de que fue observada por primera vez al dividir la luz solar en diferentes colores por medio de un prisma que separaba la luz en su espectro de manera que a ambos extremos aparecen visibles las componentes del rojo al violeta (en ambos extremos Su longitud de onda, entre 700 nanómetros y un milímetro, es la siguiente en longitud al rojo, el color de longitud de onda más larga de la luz visible. Los infrarrojos se categorizan en: • infrarrojo cercano (0,8–2,5 µm) • infrarrojo medio (2,5–50 µm) • infrarrojo lejano (50–1000 µm) Las comunicaciones infrarrojas están basadas en el principio de la luz infrarroja, que es una radiación electromagnética cuya frecuencia la hace invisible al ojo humano, La luz visible viaja en ases de luz que van desde los 400 ángstroms, violeta oscuro, a 700 ángstroms, rojo oscuro. Las frecuencias del infrarrojo es de 700 a 1,000 ángstroms. Conforme a los estándares del IrDA la mayoría de las computadoras personales y equipo de comunicaciones se mantienen entre los 850 y 900 ángstroms Velocidad de conexión

PUERTOS FIRE WIRE

El IEEE 1394 (conocido como FireWire por Apple Inc. y como i.Link por Sony) es un estándar multiplataforma para entrada/salida de datos en serie a gran velocidad. Suele utilizarse para la interconexión de dispositivos digitales como cámaras digitales y videocámaras a computadoras.

Historia

El Firewire fue desarrollado por Apple Computer a mediados de los 90, para luego convertirse en el estándar multiplataforma IEEE 1394. A principios de este siglo fue adoptado por los fabricantes de periféricos digitales hasta convertirse en un estándar establecido. Sony utiliza el estándar IEEE 1394 bajo la denominación i.Link, y Texas Instruments bajo la denominación Lynx.

Versiones

Page 7: TOPICOS SELECTOS DE PROGRAMACION.doc

Su velocidad hace que sea la interfaz más utilizada para audio y vídeo digital. Así, se usa mucho en cámaras de vídeo, discos duros, impresoras, reproductores de vídeo digital, sistemas domésticos para el ocio, sintetizadores de música y escáneres.

EXISTEN TRES VERSIONES:

FireWire 400 (IEEE 1394-1995)

Lanzado en 1995. Tiene un ancho de banda de 400 Mbit/s, 30 veces mayor que el USB 1.1 (12 Mbps) y similar a la del USB 2.0 (480 Mbps), aunque en pruebas realizadas, en transferencias de lectura de 5000 ficheros con un total de 300 Mb, FireWire completó el proceso con un 33% más de velocidad que USB 2.0, debido a su arquitectura peer-to-peer mientras USB utiliza arquitectura slave-master [1]. La longitud máxima permitida con un único cable es de 4,5 metros, pudiendo utilizarse hasta 16 repetidores para prolongar la longitud (no pudiendo sobrepasar nunca la distancia de 72 metros). Su conector está dotado de 6 pines, dos de ellos destinados a la alimentación del dispositivo (excepto en la versión distribuida por sony, iLink, que carece de estos dos pines de alimentación) ofreciendo un consumo de unos 7 u 8 W por puerto a 25 V (nominalmente).

Revisión IEEE 1394a-1995

En 2000 se implementó una revisión de IEEE 1394-1995, añadiéndole características como difusión asíncrona, una reconfiguración de bus más rápida, concatenación de paquetes, y ahorro de energía en modo suspensión.

FireWire 800 (IEEE 1394b-2000)

Lanzado en 2000. Duplica aproximadamente la velocidad del FireWire 400, hasta 786.5 Mbps con tecnología full-duplex, cubriendo distancias de hasta 100 metros por cable. Firewire 800 reduce los retrasos en la negociación, utilizando para ello 8b10b (código que codifica 8 bits en 10 bits, que fue desarrollado por IBM y permite suficientes transiciones de reloj, la codificación de señales de control y detección de errores. El código 8b10b es similar a 4B/5B de FDDI (que no fue adoptado debido al pobre equilibrio de corriente continua), que reduce la distorsión de señal y aumenta la velocidad de transferencia. Así, para usos que requieran la transferencia de grandes volúmenes de información, resulta muy superior al USB 2.0. Posee compatibilidad retroactiva con Firewire 400 utilizando cables híbridos que permiten la conexión en los conectores de Firewire400 de 6 pines y los conectores de Firewire800, dotados de 9 pines. No fue hasta 2003 cuando Apple lanzó el primer usao comercial de Firewire800.

FireWire s1600 y s3200 (IEEE 1394-2008)

Anunciado en Diciembre de 2007. Permiten un ancho de banda de 1'6 y 3'2 Gbit/s, cuadruplicando la velocidad del Firewire 800, utilizando el mismo conector de 9 pines de Firewire800

Page 8: TOPICOS SELECTOS DE PROGRAMACION.doc

FireWire s800T (IEEE 1394c-2006)

Anunciado en Junio de 2007. Aporta mejoras técnicas que permite el uso de FireWire con puertos RJ45 sobre cable CAT 5, combinando así las ventajas de Ethernet con Firewire800.

Características generales

Soporta la conexión de hasta 63 dispositivos con cables de una longitud máxima de 425 cm con topología en árbol.

Soporte Plug-and-play. Soporta comunicación peer-to-peer que permite el enlace entre dispositivos sin

necesidad de usar la memoria del sistema o la CPU Soporta conexión en caliente. Todos los dispositivos Firewire son identificados por un identificador IEEE EUI-64

exclusivo (una extensión de las direcciones MAC Ethernet de 48-bit)

APLICACIONES DE FIREWIRE

Edición de vídeo digital

La edición de vídeo digital con FireWire ha permitido que tuviera lugar una revolución en la producción del vídeo con sistemas de escritorio. La incorporación de FireWire en cámaras de vídeo de bajo costo y elevada calidad permite la creación de vídeo profesional en Macintosh o PC. Atrás quedan las carísimas tarjetas de captura de vídeo y las estaciones de trabajo con dispositivos SCSI de alto rendimiento. FireWire permite la captura de vídeo directamente de las nuevas cámaras de vídeo digital con puertos FireWire incorporados y de sistemas analógicos mediante conversores de audio y vídeo a FireWire.

Redes IP sobre FireWire

Como explica Apple, "con este software instalado, se pueden utilizar entre computadoras Macintosh y periféricos los protocolos IP existentes, incluyendo AFP, HTTP, FTP, SSH, etcétera. En todos los casos, se puede utilizar Bonjour (Rendezvous) para su configuración, resolución de nombres y descubrimiento." Si unimos la posibilidad de usar las conexiones FireWire para crear redes TCP/IP a las prestaciones de FireWire 2 (FireWire 800), tenemos razones muy serias para que Apple recupere rápidamente la atención de los fabricantes de periféricos para satisfacer las necesidades de los usuarios de aplicaciones que requieren gran ancho de banda en redes locales, como todas las relacionadas con el vídeo digital. Por no hablar de introducirse en un posible mercado nuevo.

INTERRUPCIONES QUE INTERVIENEN EN CADA PUERTO

Page 9: TOPICOS SELECTOS DE PROGRAMACION.doc

El bit 4 del puerto de control se denomina IRQEN. Este bit habilita o permite que se produzca la interrupción asociada a la entrada ACK#. Cuando este bit está a 1 y la señal ACK# pasa del nivel lógico 1 al nivel 0 se produce una petición de interrupción, que es la IR Q7.  En el diseño original del PC, IBM reservó 8 interrupciones hardware, comenzando por la interrupción 08h, para expansión de interrupciones, que son comúnmente conocidas como IR Q0 a IR Q7. Así la IR Q0 se corresponde con la interrupción 08h, la IR Q1 con la 09h, etc. La IR Q7 se corresponde pues con la 0Fh, estando sus vectores a partir de la dirección 0000:003Ch.  Para que una petición de una IRQ llegue a la CPU, ésta debe estar permitida, no enmascarada. El puerto 021h está asociado con la máscara de interrupciones de las IRQ. Para habilitar una determinada interrupción se deberá escribir un cero en la posición correspondiente, sin modificar el resto. Así, si lo que se quiere es permitir la IR Q7 habrá que poner a cero el bit más significativo del puerto 021h, como muestra el código siguiente:  in al,021h ; lee la máscara de las IRQ  and al, 01111111b ; impone un 0 en el bit más significativo, IR Q7. No modifica el resto  out 021h, al ; escribe la máscara  Con estas operaciones quedará habilitada la IR Q7. Una vez atendida de la forma que se haya previsto, el programa debe indicar a la CPU que la interrupción ya ha sido procesada, para ello debe escribir un 1 en el bit 5 del puerto 020h, es decir:  mov al, 020h ; carga en al 0010 0000 b out 020h, al ; lo escribe en al puerto 020h   Finalmente, tan sólo queda por activar el bit que permite que la señal ACK# genere una petición de IR Q7. Para ello se deberá poner a 1 el bit 4 del puerto de control , sin modificar el resto. Cuando no se quiera que se produzca una IR Q7, basta con poner a cero este bit.

Page 10: TOPICOS SELECTOS DE PROGRAMACION.doc

Al finalizar el programa, no sólo se deben restablecer los vectores de interrupción modificados, sino que también se debe inhibir la IR Q7, dejando la máscara del puerto 021h como estaba.

DIRECCIONES BASES INTERRUPCIONES

Los ordenadores se comunican con el exterior por medio de los dispositivos de entrada y

salida. Estos dispositivos son normalmente lentos en comparación con la elevada velocidad

de la unidad central. Un ejemplo típico puede ser el teclado: entre las pulsaciones de cada

tecla hay un espacio de tiempo impredecible y dependiente del usuario. Una manera simple

de gestionar los dispositivos de E/S consiste en comprobar continuamente si alguno de ellos

tiene un dato disponible o lo está solicitando. Sin embargo, esto supone una importante

pérdida de tiempo para el microprocesador, que mientras tanto podría estar haciendo otras

cosas. En una máquina multitarea y/o multiusuario, resulta más interesante que los

periféricos puedan interrumpir al microprocesador para solicitarle una operación de entrada

o salida en el momento necesario, estando la CPU liberada de la misión de comprobar

cuándo llega ese momento. Cuando se produce la interrupción, el microprocesador ejecuta

la correspondiente rutina de servicio y después continúa con su tarea normal. Los

compatibles PC poseen un hardware orientado por completo a la multitarea (otra cosa es

que el 8086 y el DOS no la aprovechen) y la entrada/salida se gestiona casi por completo

mediante interrupciones en todas las máquinas. Por ejemplo, en las operaciones de disco,

cuando acaba la transferencia de datos se produce una interrupción de aviso y una rutina de

la BIOS activa una variable que lo indica, en el segmento de memoria 40h. Las propias

funciones de la BIOS para acceder al disco se limitan a chequear continuamente esa

variable hasta que cambie, lo que significa un evidente desaprovechamiento de las

posibilidades que la gestión por interrupciones pone a nuestra disposición.

Las interrupciones añaden cierta complejidad al diseño del hardware: en principio, es

necesario jerarquizarlas de alguna manera para decidir cuál se atiende en el caso de que se

produzcan dos simultáneamente. También es importante el control de prioridad para el caso

de que se produzca una interrupción mientras se está procesando otra: sólo se la atenderá si

es de mayor prioridad. En este capítulo sólo consideraremos las interrupciones hardware,

no las de software ni las excepciones del procesador.

REGISTROS E INTERRUPCIONES

Page 11: TOPICOS SELECTOS DE PROGRAMACION.doc

Un registro (record) es un tipo de datos estructurado denominado (dato record) que consta de un conjunto de elementos que pueden ser del mismo tipo o de tipos diferentes. Formato  Type Tipo - dato = record Lista de identificador 1 : tipo 1;Lista de identificador 2 : tipo 2 ;.Lista de identificador n : tipo n;End; Tipo – dato: nombre de la estructura o dato registro Lista de identificador: lista de uno o más nombres de campos separados por comasTipo: puede ser cualquier tipo de dato estándarDeclaración de un registro cuyos campos son: nombre, edad, domicilio, salario.  

Variables de Tipo Registro

Tras utilizar la declaración tupe se ha creado un tipo de dato registro, pero no se ha creado una variable de ese tipo. Esto se consigue con la designación Var.

Formato

Var

Nombrereg : Nombretipo

Nombretipo : Es el mismo que el utilizado en la correspondiente declaración type

Nombrereg: Nombre de una variable en particular del registro

Campos

Los componentes de un registro se denominan campos. Cada campo tiene un nombre llamado identificador de Campo, que es algún identificador elegido por el programador cuando se declara el tipo de registro y algún tipo que se especifica cuando se declara el tipo de dato record.

Acceso a los campos de registro

Page 12: TOPICOS SELECTOS DE PROGRAMACION.doc

Se puede acceder a cada campo de registro directamente utilizando un asignador o selector de campo de la forma

ENVIO Y RECEPCION DE DATOS PUERTOS

El envio y recepcion de datos es solamente le programación de cómo se va a transmitir la información y a travez de que puertos por ejemplo el USB.

Este puerto ha supuesto un importante avance cuando se trata de conectar varios dispositivos externos, ya que mejora el número de ellos que es posible conectar de manera simultánea, y con una importante velocidad de transferencia. USB (Universal Serial Bus) permite conectar hasta 127 dispositivos y ya es un estándar en los ordenadores de última generación, que incluyen al menos dos puertos USB 1.1, o puertos USB 2.0 en los más modernos. Pero ¿qué otras ventajas ofrece este puerto? Es totalmente Plug & Play, es decir, con sólo conectar el dispositivo y en caliente (con el ordenador encendido), el dispositivo es reconocido e instalado de manera inmediata. Sólo es necesario que el Sistema Operativo lleve incluido el correspondiente controlador o driver, hecho ya posible para la mayoría de ellos sobre todo si se dispone de un Sistema Operativo como por ejemplo Windows XP, de lo contrario el driver le será solicitado al usuario. Posee una alta velocidad en comparación con otro tipo de puertos, USB 1.1 alcanza los 12 Mb/s y hasta los 480 Mb/s (60 MB/s) para USB 2.0, mientras un puerto serie o paralelo tiene una velocidad de transferencia inferior a 1 Mb/s. El puerto USB 2.0 es compatible con los dispositivos USB 1.1 El cable USB permite también alimentar dispositivos externos a través de él, el consumo máximo de este controlador es de 5 voltios.Los dispositivos se pueden dividir en dispositivos de bajo consumo (hasta 100 mA) y dispositivos de alto consumo (hasta 500 mA) para dispositivos de mas de 500 mA será necesario alimentación externa.Debemos tener en cuenta también que si utilizamos un concentrador y éste está alimentado, no será necesario realizar consumo del bus.Hay que tener en cuenta que la longitud del cable no debe superar los 5 mts. y que éste debe cumplir las especificaciones del Standard USB iguales para la 1.1 y la 2.0 Y ¿cómo se conectan varios dispositivos?

Page 13: TOPICOS SELECTOS DE PROGRAMACION.doc

Para conectar varios dispositivos USB es necesario un concentrador o HUB, de tal forma que será el concentrador quién se conecte al puerto USB del PC y alrededor del Hub se conecten los dispositivos. Estos dispositivos a su vez pueden actuar como HUB para otros dispositivos. También es posible conectar al HUB otros HUB consiguiendo así una topología de ESTRELLA de varios niveles o TIERED STAR, siendo el número total de HUB que es posible conectar de 5, que se corresponde con 7 niveles.Ni que decir tiene que los dispositivos USB 2.0 sólo pueden ser conectados a puertos USB 2.0 aunque los dispositivos USB 1.1 sí pueden ser conectados a puertos USB 2.0 además del propio USB 1.1 Debemos tener claro el siguiente concepto, el puerto USB del que partimos, pertenece a un controlador físico que puede estar en la propia placa base o en una tarjeta de expansión, a este conector se le denomina concentrador raíz. Este controlador suele disponer de dos conectores. Esto es importante, ya que no es lo mismo conectar dos dispositivos al mismo controlador que cada uno de ellos a un controlador distinto: en el primer caso deben compartir el ancho de banda y en el segundo caso no, es decir, tanto el ancho de banda como la alimentación deben ser repartidas entre todos los dispositivos conectados a un mismo bus.

EJEMPLOS PROGRAMACION ENTRE PUERTOS Y DISPOSITIVOS

EJEMPLOS DE PROGRAMACION ENTRE PUERTOS Y DISPOSITIVOS

El objetivo básico de una interrupción es ejecutar una función que responda a la petición de

un dispositivo de hardware. Un vector interrupción contiene la dirección de esta función.

En un sistema basado en el 8086 el primer Kbyte de memoria (desde 00000H a 003FFH) es

utilizado como una tabla de vectores de interrupción. Para apuntar a qualquier direccion del

mapa de memoria son necesarios cuatro bytes. 16 bits para el desplazamiento y 16 bits para

el el segmento. Luego, un Kbyte de memoria permite almacenar 256 vectores de

interrupción. Algunos de los 256 vectores de interrupción son utilizados por el sistema,

otros estan libres para ser usados por los programas de usuario. Para instalar una rutina de

interrupción de usuario es posible utilizar un programa como el del ejemplo.

El programa instala una rutina de interrupción en el canal de interrupción IRQ1, que es el

reloj de sistema. Este timer genera una interrupcion 18.2 veces por segundo. En la rutina de

Page 14: TOPICOS SELECTOS DE PROGRAMACION.doc

servicio de la interrupción, se incrementa una variable global. Cuando esta variable es igual

a 18 se presenta en la pantalla. Luego obtendremos un contador de segundos (aprox.).

EL PRIMER EJEMPLO ES:

#include <dos.h>

#include <stdio.h>

#include <conio.h>

#include <bios.h>

#define IMR 0×21

int _key=1;

int global=0;

void interrupt (*_old_int_function)();

char _old_mask;

char _interrupt_mask(int IRQn)

{

char p=1;

p=p< return ~p;

}

void _install_int_function(int IRQn, void interrupt (*_new_int_function)())

{

int inter = IRQn + 8;

_disable(); //disable interrupts

_old_int_function=_dos_getvect(inter); //save the old interrupt vector

_dos_setvect(inter,_new_int_function); //install the new interrupt vector

_old_mask=inportb(IMR); //save the state of the 8259A IMR register

outportb(IMR,_old_mask&_interrupt_mask(IRQn)); //Set new value for IMR register

_enable(); //enable interrupts

}

void _end_interrupt(void)

{

outportb(0×20,0×20);

}

void _Unistall_new_int_function(int IRQn)

{

int inter = IRQn + 8;

_disable(); //disable interrupts

_dos_setvect(inter,_old_int_function); //restore the old interrupt service function

Page 15: TOPICOS SELECTOS DE PROGRAMACION.doc

outportb(IMR,_old_mask); //restore the IMR

_enable(); //enable interrupts again

}

void interrupt _new_int_function()

{

_disable(); //disable interrupts

global++; //global count the number of interrupts that the system has requested

_end_interrupt(); //to tell the system the interrupt service function has finished

_enable(); //enable interrupts again

}

/*********************************************************/

/*Read the keyboard. If “ESC” is pressed the program ends*/

/*********************************************************/

void _keyboard(void)

{

union u_type

{ int a;char b[3];

} keystroke;

char inkey=0;

if(bioskey(1)==0) return;

keystroke.a=bioskey(0);

inkey=keystroke.b[1];

switch (inkey)

{

case 1: _key=0;

return;

case 11: _key=39;

return;\\ /*_key 0*/

default: _key=15;

return;

}

}

void main(void)

{

int second=0;

clrscr();

cprintf(“Press ‘ESC’ to exit \n \n”);

_install_int_function(0,_new_int_function);

Page 16: TOPICOS SELECTOS DE PROGRAMACION.doc

do

{

_keyboard(); //read the keyboard

if (global >=18)

{

second++; //incremented each second

gotoxy(2,2);

cprintf(“Time: %d”,second);

global=0;

}

}

while(_key !=0);

_Unistall_new_int_function(0);

}

UN SEGUNDO EJEMPLO

Este segundo ejemplo es un poco mas complejo. El puerto paralelo, a parte de controlar

dispositivos estilo: impresoras, ZIP, etc … Tambien se puede usar para nuestro proposito

utilizando asi sus 8 señales de salidas para por ejemplo controlar 8 relés. Solo controlamos

8 leds haciendo asi un tester del puerto paralelo, para ello utilizamos un CI TTL 74245 de

intermediario para los datos de salida D0..D7

El segundo ejemplo es:

#include <stdio.h>

#include <sys/io.h>

#define K 0×378

int main()

{

unsigned char p=0×01;

int sentit=1,i;

if(ioperm(K,3,1))

{

perror(“ioperm”)

exit(1);

}

while(1)

{

Page 17: TOPICOS SELECTOS DE PROGRAMACION.doc

for(i=0;i<=7;i++) {

outb(p,K);

if(sentit) {

if(p<128)

p «= 1; // Desplazamos bits hacia la izquierda

} else {

if(p>1)

p »= 1; // Desplazamos bits hacia la derecha

}

usleep(950);

}

if(sentit) {

sentit=0;

} else

sentit=1;

}

if(ioperm(K,3,0)) {

perror(“ioperm”);

exit(1);

}

exit(0);

}