ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Ejemplo De Programacion Entre Puertos Y Dispositivos


Enviado por   •  2 de Agosto de 2011  •  980 Palabras (4 Páginas)  •  1.077 Visitas

Página 1 de 4

6.7 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 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.).

Ejemplo:

1. include <stdio.h>

2. include <sys/io.h>

3. 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)

{

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);}

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 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:

1. include <dos.h>

2. include <stdio.h>

3. include <conio.h>

4. include <bios.h>

5. 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

...

Descargar como (para miembros actualizados)  txt (6.4 Kb)  
Leer 3 páginas más »
Disponible sólo en Clubensayos.com