SlideShare una empresa de Scribd logo
1 de 12
INTERRUPCIONES
Las interrupciones son un metodo del que disponen los dispositivos e incluso los procesos
para hacer notar a la CPU la aparición de alguna circunstancia que requiera su
intervención. De este modo, los dispositivos pueden provocar que la CPU deje por el
momento la tarea que estaba realizando y atienda la interrupción. Una vez atendida,
seguira con su labor anterior.
Cuando no existían interrupciones, era el procesador el que tenía que estar
continuamente comprobando el estado del dispositivo cuando lo necesitaba.
Todo ese tiempo que el procesador estaba sondeando el estado de los dispositivos era
tiempo que no se podía dedicar a otros procesos, con lo que significa esto en cuanto a
rendimiento. Por todo ello se. pensó que lo mejor era que existiera una línea especial
entre el procesador y los dispositivos, por la que los dispositivos indicaban al procesador
que ya estaban listos. Cuando al procesador le llega una interrupción, la atiende
inmediatamente dejando de hacer lo que estuviera haciendo. Para poder atenderla de la
forma correcta, debe saber con anterioridad cómo tratarla. Por ello, las computadoras
tienen en un sitio. conocido de memoria las distintas rutinas de tratamiento para las
diferentes interrupciones. El procesador reconoce la interrupción de la que se trata y
busca en memoria la rutina correspondiente.
Una vez terminado el tratamiento de la interrupción, es muy importante que el
procesador siga con lo que estaba haciendo. Por eso es muy importante que antes de
tratar la interrupción se guarde de alguna forma el estado del computador, y al terminar
la rutina de tratamiento se restaure el estado.
Se pueden distinguir dos tipos de interrupciones: interrupciones software e interrupciones
hardware.
Interrupciones software
Las interrupciones software son provocadas por los programas usando una función
especial del lenguaje. Tienen como objetivo el que la CPU ejecute algún tipo de función. Al
terminar de ejecutarse esta función, se seguirá ejecutando el programa que provocó la
interrupción.
Este tipo de interrupciones es la forma mas importante que tendrán los programas de
ejecutar funciones especiales del DOS (Disk OperatingSystem) o del BIOS (Basic Input
Output System). Estas funciones tienen un número de interrupción software asociada.
Cuando un programa lanza una interrupción de este tipo, la CPU ejecuta su función de
tratamiento asociada. Por debemos saber que es lo que hace cada interrupción para
conseguir el efecto deseado. Metodología de Programación, Programación en C,
Aplicaciones electrónicas 2 / 10
Técnicas de Programación 3ª Parte: Programación de interrupciones y del Ratón
Las funciones que se ejecutan con cada interrupción software son un estándar en el
mundo PC.
En nuestro caso, algunas de las interrupciones que nos van a ser mas útilesserán:
· Interrupción 14h: Acceso al puerto serie por la BIOS.
· Interrupción 21h: Funciones del DOS.
· Interrupción 17h: Servicios de acceso a la impresora de la
BIOS.
Cada interrupción tiene asociadas varias funciones. Para usar cada una de las funciones de
la interrupción que nos interese se debe:
- Escribir en un registro el número de interrupción.
- Escribir en otro registro en número de función deseada.
- Escribir en otro/s registro/s los parámetros asociados con la función.
- Lanzar la interrupción.
El lenguaje C nos proporciona una serie de estructuras en la librería dos. h que nos
permiten escribir en los registros de la CPU. Estas son:
struct WORDREGS {
unsignedint ax;
unsignedintbx;
unsignedint cx;
unsignedint dx;
unsignedintsi;
unsignedint di;
unsignedintcflag;
unsignedint flags;
}
struct BYTEREGS {
unsigned char al;
unsigned char ah;
unsigned char bl;
unsigned char bh;
unsigned char cl;
unsigned char ch;
unsignedcha.r d1;
unsignedcha.rdh; Metodología de Programación, Programación en C, Aplicaciones
electrónicas 3 / 10
Técnicas de Programación 3ª Parte: Programación de interrupciones y del Ratón
union REGS {
struct WORDREGS x;
struct BYTEREGS h;
}
Los registros WORDREGS son registros de 16 bits. Los registros
BYTEREGS son registros de 8 bits, que además coinciden con la parte alta y baja de los
WORDREGS. Por ejemplo, escribir OxFF11 en el registro ax es 10 mismo que escribir en el
registro ah OxFF y en el al Ox11.
Una unión es un tipo de dato definible por el programador, como las estructuras, en la
que se pueden almacenar datos de diferentes tipos en cada ocasión, es decir, en cada
instante solo podra hacerse referencia a uno de los datos componentes de la unión. La
palabra clave para definir y para declarar variables de tipo unión es union y, tanto las
variables de tipo unión como sus miembros, o elementos, son tratados de igual forma que
en el caso de las estructuras.
Cuando se declara una variable de tipo unión, se asigna una porción de memoria que es
compartida por variables diferentes en distintos momentos.
UniónNombre Unión {
tipo1 elemento1;
tipo2 elemento2;
tipo3 elemento3;
..... .......
} variables; donde Nombre_Union es el identificador del nuevo tipo de unión. La cantidad
de memoria ocupada por una unión será la necesaria para almacenar el miembro de la
unión que mas memoria necesite (en definitiva , el tipo de dato que más ocupe)
Ejemplo:
union talla{
int numero; // 42,46,50
char letra; // p, m, g
char siglas[4]; // L, XL, XXL
}camisetas;
En la variable camisetas se puede almacenar la talla en cualquiera de los formatos
mostrados en el ejemplo y, según el que se haya elegido, así habrá de ser considerado
tanto en las lecturas de la variable como en las escrituras, debiendo ser el programador
quien se encargue de conocer, en todo momento, el modo en el que ha almacenado la
talla. Metodología de Programación, Programación en C, Aplicaciones electrónicas 4 / 10
Técnicas de Programación 3ª Parte: Programación de interrupciones y del Ratón
Ese ejemplo se completaría si la variable camisetas perteneciese a un tipo de estructura
de una base de datos de control de stocks de un almacén o tienda de confección. Las
uniones son, en todo, similares a las estructuras, con la salvedad de que en cada instante
solo uno de los elementos puede estar presente, debe ser el propio programa el que
decida el tipo de dato que hay en cada momento. Igual que en las estructuras, el acceso a
los elementos de una unión se realiza también con el operador punto «.», Por ejemplo,
con la unión declarada anteriormente, cualquiera de las siguientes líneasserá valida para
almacenar un valor en las posiciones de memoria asignadas a la variable camisetas:
scanf("%d", &camisetas.numero);
camisetas.letra = getchar() ;
gets(camisetas.siglas);
Retomando la composición e implementación de los diferentes registros del procesador,
para escribir un dato en la unión de los registros (REGS) :
Ejemplo:
Escribir en el registro ax el valor OxFF11. Solución:
Definimos una variable de tipo unión REGS
unión REGS registros;
Y escribimos en ella:
registros.x.ax=0xFF11;
Para lanzar la interrupción, usaremos la función de la librería dos.h int86, que se define
en Turbo C como:
int int86 (intnumero_interrupcion, unión REGS *registros_entrada, unión REGS
*registros_salida);Metodología de Programación, Programación en C, Aplicaciones
electrónicas 5 / 10
Técnicas de Programación 3ª Parte: Programación de interrupciones y del Ratón
MANEJO DEL RATON
Uno de los dispositivos másútiles y populares del PC es el ratón. Los ratones llevan
existiendo mucho tiempo, pero su popularidad masiva surgió a partir del uso de entornos
gráficos tipo Windows, cuyo manejo requiere el uso de un ratón.
La posición que ocupa el ratón en la pantalla se define siempre en coordenadas graficas,
aunque se esté trabajando en modo texto, considerando tantos puntos en la pantalla
como permita la tarjeta grafica (actualmente, en VGA la resolución de la pantalla suele ser
de 640 x 480 pixels).
La interrupción 33 h
Como ocurre casi siempre que se quiere acceder directamente al hardware, la forma mas
cómoda de hacerlo es usar las funciones que nos proporcionan las interrupciones
software. En este caso, la interrupción que se encarga de controlar, el ratón es la numero
33h. Esta interrupción nos proporciona nada menos que 53 funciones distintas, que
seleccionaremos poniendo su numero en el registro ax.
Si la función requiriera parámetros extra, usaríamos otros registros del procesador. De
entre todas las funciones que se nos ofrecen, usaremos las siguientes:
Función Tarea Llamada Retorno
00h Reset del ratón ax=0 ax>0 si hay raton
ax=0 si no hay
01h Mostrar el cursor del ax=1 ......
ratón
02h Apagar el cursor del ax=2 ......
ratón
03h Leer el estado de los ax=3 bx=0 si no pulso botón
botones y la posición bx=1 botonIzqdodel cursor bx=2 botonDcho
bx=4 boton Centro
cx=posición columna (H)
dx=posición fila (V)
04h Establecer la posición ax=4
del cursor cx= columna
dx= fila
07h Rango desplazHoriz. ax=7
cx=H minima
dx=H máxima
08h Rango desplazVert. ax=8
cx=V minima
dx=V máximaMetodología de Programación, Programación en C, Aplicaciones electrónicas
6 / 10
Técnicas de Programación 3ª Parte: Programación de interrupciones y del Ratón
Antes de pasar a mostrar cómo trabajar con estas funciones, es importante destacar que
la zona sobre la que trabaja el ratón no coincide con la pantalla real.
EI ratón se mueve sobre una pantalla virtual, que depende del modo de vídeo en el que
se esté trabajando, es decir, de la resolución. En las funciones básicas de manejo de1
ratón, referidas a pantalla de texto se hace necesario traducir estas coordenadas virtuales
a coordenadas de texto. Esto se consigue dividiendo entre ocho las coordenadas graficas,
pues cada caracterocupa ocho pixels de pantalla, labor que realizaremos antes de llamar
a las funciones.
Reset del ratón: función 00h
Lo primero que debe hacer cualquier programa antes de usar el ratón es prepararlo
reinicializarlo o resetearlo. Con esto conseguimos dejar al ratón en el centro de la pantalla
con el cursor apagado. Para seleccionar esa función, ponemos su numero en el registro ax
y lanzamos la interrupción 33h. Como resultado de la operación, la función nos devuelve
el estado del ratón, es decir, si hay o no ratón instalado. Ese resu1tado lo deja de nuevo
en el registro ax.
Un -1 en dicho registro nos indica que no hay ratón instalado.
Ejemplo:
/* Reinicializar el ratón. Devuelve -1 si no hay ratón instalado * /
intResetRaton (void)
{ union REGS registros;
registros.x.ax = 0; /* elegimos la función correspondiente * /
int86 (0x33, &registros, &registros);
if ((int) registros.x.ax = = -1)
{printf ( " No hay un ratón instalado” );
return -1 ;
}
return 1;
}
Metodología de Programación, Programación en C, Aplicaciones electrónicas 7 / 10
Técnicas de Programación 3ª Parte: Programación de interrupciones y del Ratón
Mostrar y ocultar el ratón: funciones 01h y 02h
Como ya hemos dicho, al reinicializar el ratón, su cursor queda en el centro de la pantalla
y apagado, es decir, aunque esta ahí, no podemos verlo. La forma de hacerlo visible es
usar la función 01h. Esta función no tiene valores de retorno.
Ejemplo:
/* Mostrar el cursor del ratón */
voidMostrarCursor (void)
{ union REGS registros;
registros.x.ax = 1;
int86 (0x33, &registros, &registros);
}
/* Apagar el cursor del ratón * /
voidApagarCursor (void)
{ union REGS registros;
registros.x.ax = 2;
int86 (0x33, &registros, &registros);
}
Leer el estado de los botones y la posición del cursor, función 03h
La función 03h nos permite conocer el estado de los botones del ratón, información que
almacena en el registro bx de la siguiente forma:
Bit 1: Botón derecho ( 1 = presionado ).
Bit 0: Botón izquierdo ( 1 = presionado ).
Además, esta función deja en el registro cx la coordenada X y en el registro dx la
coordenada Y.Metodología de Programación, Programación en C, Aplicaciones
electrónicas 8 / 10
Técnicas de Programación 3ª Parte: Programación de interrupciones y del Ratón
Ejemplo:
/* Botón derecho del ratón presionado * /
intBotonDerecho (void)
{ union REGS registros;
registros.x.ax = 3;
int86 (0x33, &registros, &registros);
return (registros.x.bx& 2); /* Devuelve 1 si esta presionado */
/* Botón izquierdo del ratón presionado * /
intBotonIzquierdo (void)
{ union REGS registros;
registros.x.ax = 3;
int86 (0x33, &registros, &registros);
return (registros.x.bx& 1);
/* Devolver la posición del ratón * /
intPosicionRraton (int *x, int *y)
{ union REGS registros;
registros.x.ax = 3;
int86 (0x33, &registros, &registros);
*x = registros.x.cx;
*y = registros.x.dx;
}
Establecer la posición del ratón: función 04h
Para colocar el cursor del ratón en una posición determinada, contamos con la función
04h. A esta función se le debe pasar la coordenada horizontal en el registro cx, y la
vertical en el dx.
Cuando se trabaja en modo texto hay que tener en cuenta, que las coordenadas hay que
multiplicarlas por 8 antes de pasarlas a la función.Metodología de Programación,
Programación en C, Aplicaciones electrónicas 9 / 10
Técnicas de Programación 3ª Parte: Programación de interrupciones y del Ratón
Ejemplo:
/* Colocar el ratón en la posición deseada * /
voidColocarRaton (int x, int y)
{ union REGS registros;
registros.x.ax = 4;
registros.x.cx = x;
registros.x.dx = y;
int86 (0x33, &registros, &registros);
}
Ratón en Modo Gráfico
Recordemos que la posición que ocupa el ratón en la pantalla se define siempre en
coordenadas graficas, aunque se esté trabajando en modo texto, considerando tantos
puntos en la pantalla como permita la tarjeta grafica
(Actualmente, en VGA la resolución de la pantalla suele ser de 640x480 pixels).
El desplazamiento del cursor se realiza mediante una unidad de movimiento del ratón que
recibe el nombre de mickey y equivale a 1/200 pulgadas.
Cuando se mueve el ratón, el controlador del ratón ( el programa driver) mueve el cursor
horizontal y verticalmente un numero de pixels que depende de la sensibilidad del ratón.
Por defecto, cuando se instala el controlador del ratón, para conseguir un desplazamiento
de 8 pixels se precisan 8 mickeys en horizontal y 16 en vertical. EI control del ratón se
realizaba mediante la interrupción int 0x33.
A continuación se muestra, como ejemplo, un programa que activa el ratón y muestra las
coordenadas del cursor:
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
#include <graphics.h>
void main()
{ union REGS estado ;
int driver = DETECT, mode; /* para seleccionar el modo grafico */
clrscr() ;Metodología de Programación, Programación en C, Aplicaciones electrónicas 10
/ 10
Técnicas de Programación 3ª Parte: Programación de interrupciones y del Ratón
//Inicializa el modo grafico en la pantalla.
initgraph(&driver, &mode, "C:TCBGI") ; // Ruta de los drivers graficos
// Mira si hay ratóninstalado
estado.x.ax = 0;
int86 (0x33, &estado, &estado) ;
if ( !estado.x.ax) //si ax=0
®
no hay raton
printf ("n ERROR: no hay ratón.") ;
exit (1) ;
estado.x.ax = 1; /* Muestra el ratón */
int86 (0x33, &estado, &estado) ;
printf("Coordenadas del ratón: ");
printf("npulsa tecla para terminar ") ;
while (!kbhit())
{ gotoxy(24,1) ;
estado.x.ax = 3; /* Obtiene las coordenadas del ratón */
int86 (0x33, &estado, &estado) ;
printf ("%3d,%3dn" , estado.x.cx, estado.x.dx) ;
}
closegraph() ; /* cierra el modo grafico */
estado.x.ax = 2; /* Quita el cursor del ratón */
int86 (0x33, &estado, &estado);

Más contenido relacionado

La actualidad más candente

Análisis sintáctico
Análisis sintácticoAnálisis sintáctico
Análisis sintácticoRubnPilca
 
Lenguaje ensamblador basico
Lenguaje ensamblador basicoLenguaje ensamblador basico
Lenguaje ensamblador basicoGustavo Davila
 
Registros de la cpu
Registros de la cpuRegistros de la cpu
Registros de la cpujomapuga
 
capacidad de unidad de procesamiento, universidad santiago mariño
capacidad de unidad de procesamiento, universidad santiago mariño capacidad de unidad de procesamiento, universidad santiago mariño
capacidad de unidad de procesamiento, universidad santiago mariño MiguelSifontes6
 
Lenguaje Ensamblador
Lenguaje Ensamblador Lenguaje Ensamblador
Lenguaje Ensamblador irana piñero
 
Capacidad de la unidad de procesamiento
Capacidad de la unidad de procesamientoCapacidad de la unidad de procesamiento
Capacidad de la unidad de procesamientoRosannyGamardo
 
Introduccion al assembler
Introduccion al assemblerIntroduccion al assembler
Introduccion al assemblerangel
 
Conceptos básicos
Conceptos básicosConceptos básicos
Conceptos básicospablo
 
Capacidad de la unidad de procesamiento
Capacidad de la unidad de procesamientoCapacidad de la unidad de procesamiento
Capacidad de la unidad de procesamientoRosangelGarca
 
Microprocesadores: Registros Internos
Microprocesadores: Registros InternosMicroprocesadores: Registros Internos
Microprocesadores: Registros Internosverduguillo
 
Capacidad de la unidad de procesamiento por andres maica
Capacidad de la unidad de procesamiento por andres maicaCapacidad de la unidad de procesamiento por andres maica
Capacidad de la unidad de procesamiento por andres maicaAndresMaica28
 
5154 Tema3 Jose Rojas
5154 Tema3 Jose Rojas5154 Tema3 Jose Rojas
5154 Tema3 Jose RojasJose Rojas
 
Unidadi. lenguajes de interfaz
Unidadi.   lenguajes de interfazUnidadi.   lenguajes de interfaz
Unidadi. lenguajes de interfazLuiS YmAY
 
REGISTRO E INSTRUCCIONES DEL MICROPROCESADOR, MODOS DE DIRECCIONAMIENTO.
REGISTRO E INSTRUCCIONES DEL MICROPROCESADOR, MODOS DE DIRECCIONAMIENTO. REGISTRO E INSTRUCCIONES DEL MICROPROCESADOR, MODOS DE DIRECCIONAMIENTO.
REGISTRO E INSTRUCCIONES DEL MICROPROCESADOR, MODOS DE DIRECCIONAMIENTO. Michelle Diaz
 

La actualidad más candente (20)

Análisis sintáctico
Análisis sintácticoAnálisis sintáctico
Análisis sintáctico
 
1.2. El procesador y sus registros internos
1.2. El procesador y sus registros internos1.2. El procesador y sus registros internos
1.2. El procesador y sus registros internos
 
Lenguaje ensamblador basico
Lenguaje ensamblador basicoLenguaje ensamblador basico
Lenguaje ensamblador basico
 
Data segment
Data segmentData segment
Data segment
 
Registros de la cpu
Registros de la cpuRegistros de la cpu
Registros de la cpu
 
capacidad de unidad de procesamiento, universidad santiago mariño
capacidad de unidad de procesamiento, universidad santiago mariño capacidad de unidad de procesamiento, universidad santiago mariño
capacidad de unidad de procesamiento, universidad santiago mariño
 
Curso basico de pic 16 f877
Curso basico de pic 16 f877Curso basico de pic 16 f877
Curso basico de pic 16 f877
 
Lenguaje Ensamblador
Lenguaje Ensamblador Lenguaje Ensamblador
Lenguaje Ensamblador
 
Capacidad de la unidad de procesamiento
Capacidad de la unidad de procesamientoCapacidad de la unidad de procesamiento
Capacidad de la unidad de procesamiento
 
Introduccion al assembler
Introduccion al assemblerIntroduccion al assembler
Introduccion al assembler
 
Curso de-mcu-proteus
Curso de-mcu-proteusCurso de-mcu-proteus
Curso de-mcu-proteus
 
Registros del cpu
Registros del cpuRegistros del cpu
Registros del cpu
 
Conceptos básicos
Conceptos básicosConceptos básicos
Conceptos básicos
 
Estructura .COM
Estructura .COMEstructura .COM
Estructura .COM
 
Capacidad de la unidad de procesamiento
Capacidad de la unidad de procesamientoCapacidad de la unidad de procesamiento
Capacidad de la unidad de procesamiento
 
Microprocesadores: Registros Internos
Microprocesadores: Registros InternosMicroprocesadores: Registros Internos
Microprocesadores: Registros Internos
 
Capacidad de la unidad de procesamiento por andres maica
Capacidad de la unidad de procesamiento por andres maicaCapacidad de la unidad de procesamiento por andres maica
Capacidad de la unidad de procesamiento por andres maica
 
5154 Tema3 Jose Rojas
5154 Tema3 Jose Rojas5154 Tema3 Jose Rojas
5154 Tema3 Jose Rojas
 
Unidadi. lenguajes de interfaz
Unidadi.   lenguajes de interfazUnidadi.   lenguajes de interfaz
Unidadi. lenguajes de interfaz
 
REGISTRO E INSTRUCCIONES DEL MICROPROCESADOR, MODOS DE DIRECCIONAMIENTO.
REGISTRO E INSTRUCCIONES DEL MICROPROCESADOR, MODOS DE DIRECCIONAMIENTO. REGISTRO E INSTRUCCIONES DEL MICROPROCESADOR, MODOS DE DIRECCIONAMIENTO.
REGISTRO E INSTRUCCIONES DEL MICROPROCESADOR, MODOS DE DIRECCIONAMIENTO.
 

Similar a Interrupciones y manejo del ratón

Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensambladorjuan1993are
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensambladorjuan1993are
 
Formatos de instrucción
Formatos de instrucciónFormatos de instrucción
Formatos de instrucciónSantiago Rozo
 
Fundamentos de programación.pptx
Fundamentos de programación.pptxFundamentos de programación.pptx
Fundamentos de programación.pptxWaldirOzuna2
 
Práctica final tercer parcial
Práctica final  tercer parcialPráctica final  tercer parcial
Práctica final tercer parcialAnibal Ulibarri
 
03 Software Parte I
03  Software  Parte  I03  Software  Parte  I
03 Software Parte IRattlesnake
 
Trabajo COMPUTACION
Trabajo COMPUTACIONTrabajo COMPUTACION
Trabajo COMPUTACIONylastra
 
Capacidad de la unidad de procesamiento por andres maica
Capacidad de la unidad de procesamiento por andres maicaCapacidad de la unidad de procesamiento por andres maica
Capacidad de la unidad de procesamiento por andres maicaAndresMaica28
 
Arquitecturadeunmicroprocesador 160912013228
Arquitecturadeunmicroprocesador 160912013228Arquitecturadeunmicroprocesador 160912013228
Arquitecturadeunmicroprocesador 160912013228Heiner Malca Arevalo
 
1. introduccion a_los_sistemas_informaticos
1. introduccion a_los_sistemas_informaticos1. introduccion a_los_sistemas_informaticos
1. introduccion a_los_sistemas_informaticoslauriskzs
 
Capacidad de la unidad de procesamiento
Capacidad de la unidad de procesamientoCapacidad de la unidad de procesamiento
Capacidad de la unidad de procesamientoLucianoCabrera7
 
Aplicar los pricipios de programacion en la solucion de problemas 33
Aplicar los pricipios de programacion en la solucion de problemas 33Aplicar los pricipios de programacion en la solucion de problemas 33
Aplicar los pricipios de programacion en la solucion de problemas 33Jahir Sanchez Sdval
 
Arquitectura de un microprocesador
Arquitectura de un microprocesadorArquitectura de un microprocesador
Arquitectura de un microprocesadorDorvinEduardo
 
Introducción a la informática saia
Introducción a  la informática saiaIntroducción a  la informática saia
Introducción a la informática saiaoscarcordobasaia
 

Similar a Interrupciones y manejo del ratón (20)

Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
 
Formatos de instrucción
Formatos de instrucciónFormatos de instrucción
Formatos de instrucción
 
Fundamentos de programación.pptx
Fundamentos de programación.pptxFundamentos de programación.pptx
Fundamentos de programación.pptx
 
Programa
ProgramaPrograma
Programa
 
NASM
NASM NASM
NASM
 
Práctica final tercer parcial
Práctica final  tercer parcialPráctica final  tercer parcial
Práctica final tercer parcial
 
Tutorial ensamblador
Tutorial ensambladorTutorial ensamblador
Tutorial ensamblador
 
03 Software Parte I
03  Software  Parte  I03  Software  Parte  I
03 Software Parte I
 
Modos de direccionamiento.pdf
Modos de direccionamiento.pdfModos de direccionamiento.pdf
Modos de direccionamiento.pdf
 
Trabajo COMPUTACION
Trabajo COMPUTACIONTrabajo COMPUTACION
Trabajo COMPUTACION
 
Capacidad de la unidad de procesamiento por andres maica
Capacidad de la unidad de procesamiento por andres maicaCapacidad de la unidad de procesamiento por andres maica
Capacidad de la unidad de procesamiento por andres maica
 
Ec2
Ec2Ec2
Ec2
 
Arquitecturadeunmicroprocesador 160912013228
Arquitecturadeunmicroprocesador 160912013228Arquitecturadeunmicroprocesador 160912013228
Arquitecturadeunmicroprocesador 160912013228
 
1. introduccion a_los_sistemas_informaticos
1. introduccion a_los_sistemas_informaticos1. introduccion a_los_sistemas_informaticos
1. introduccion a_los_sistemas_informaticos
 
Capacidad de la unidad de procesamiento
Capacidad de la unidad de procesamientoCapacidad de la unidad de procesamiento
Capacidad de la unidad de procesamiento
 
M.c
M.cM.c
M.c
 
Aplicar los pricipios de programacion en la solucion de problemas 33
Aplicar los pricipios de programacion en la solucion de problemas 33Aplicar los pricipios de programacion en la solucion de problemas 33
Aplicar los pricipios de programacion en la solucion de problemas 33
 
Arquitectura de un microprocesador
Arquitectura de un microprocesadorArquitectura de un microprocesador
Arquitectura de un microprocesador
 
Introducción a la informática saia
Introducción a  la informática saiaIntroducción a  la informática saia
Introducción a la informática saia
 

Último

DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADOJosé Luis Palma
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para eventoDiegoMtsS
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuaDANNYISAACCARVAJALGA
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptELENA GALLARDO PAÚLS
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxlclcarmen
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arteRaquel Martín Contreras
 
celula, tipos, teoria celular, energia y dinamica
celula, tipos, teoria celular, energia y dinamicacelula, tipos, teoria celular, energia y dinamica
celula, tipos, teoria celular, energia y dinamicaFlor Idalia Espinoza Ortega
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticosisabeltrejoros
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAEl Fortí
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxAna Fernandez
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoFundación YOD YOD
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSjlorentemartos
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 

Último (20)

Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para evento
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahua
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
 
Sesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdfSesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdf
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arte
 
celula, tipos, teoria celular, energia y dinamica
celula, tipos, teoria celular, energia y dinamicacelula, tipos, teoria celular, energia y dinamica
celula, tipos, teoria celular, energia y dinamica
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticos
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docx
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativo
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 

Interrupciones y manejo del ratón

  • 1. INTERRUPCIONES Las interrupciones son un metodo del que disponen los dispositivos e incluso los procesos para hacer notar a la CPU la aparición de alguna circunstancia que requiera su intervención. De este modo, los dispositivos pueden provocar que la CPU deje por el momento la tarea que estaba realizando y atienda la interrupción. Una vez atendida, seguira con su labor anterior. Cuando no existían interrupciones, era el procesador el que tenía que estar continuamente comprobando el estado del dispositivo cuando lo necesitaba. Todo ese tiempo que el procesador estaba sondeando el estado de los dispositivos era tiempo que no se podía dedicar a otros procesos, con lo que significa esto en cuanto a rendimiento. Por todo ello se. pensó que lo mejor era que existiera una línea especial entre el procesador y los dispositivos, por la que los dispositivos indicaban al procesador que ya estaban listos. Cuando al procesador le llega una interrupción, la atiende inmediatamente dejando de hacer lo que estuviera haciendo. Para poder atenderla de la forma correcta, debe saber con anterioridad cómo tratarla. Por ello, las computadoras tienen en un sitio. conocido de memoria las distintas rutinas de tratamiento para las diferentes interrupciones. El procesador reconoce la interrupción de la que se trata y busca en memoria la rutina correspondiente. Una vez terminado el tratamiento de la interrupción, es muy importante que el procesador siga con lo que estaba haciendo. Por eso es muy importante que antes de tratar la interrupción se guarde de alguna forma el estado del computador, y al terminar la rutina de tratamiento se restaure el estado. Se pueden distinguir dos tipos de interrupciones: interrupciones software e interrupciones hardware. Interrupciones software Las interrupciones software son provocadas por los programas usando una función especial del lenguaje. Tienen como objetivo el que la CPU ejecute algún tipo de función. Al terminar de ejecutarse esta función, se seguirá ejecutando el programa que provocó la interrupción. Este tipo de interrupciones es la forma mas importante que tendrán los programas de ejecutar funciones especiales del DOS (Disk OperatingSystem) o del BIOS (Basic Input Output System). Estas funciones tienen un número de interrupción software asociada. Cuando un programa lanza una interrupción de este tipo, la CPU ejecuta su función de
  • 2. tratamiento asociada. Por debemos saber que es lo que hace cada interrupción para conseguir el efecto deseado. Metodología de Programación, Programación en C, Aplicaciones electrónicas 2 / 10 Técnicas de Programación 3ª Parte: Programación de interrupciones y del Ratón Las funciones que se ejecutan con cada interrupción software son un estándar en el mundo PC. En nuestro caso, algunas de las interrupciones que nos van a ser mas útilesserán: · Interrupción 14h: Acceso al puerto serie por la BIOS. · Interrupción 21h: Funciones del DOS. · Interrupción 17h: Servicios de acceso a la impresora de la BIOS. Cada interrupción tiene asociadas varias funciones. Para usar cada una de las funciones de la interrupción que nos interese se debe: - Escribir en un registro el número de interrupción. - Escribir en otro registro en número de función deseada. - Escribir en otro/s registro/s los parámetros asociados con la función. - Lanzar la interrupción. El lenguaje C nos proporciona una serie de estructuras en la librería dos. h que nos permiten escribir en los registros de la CPU. Estas son: struct WORDREGS { unsignedint ax; unsignedintbx; unsignedint cx; unsignedint dx; unsignedintsi; unsignedint di;
  • 3. unsignedintcflag; unsignedint flags; } struct BYTEREGS { unsigned char al; unsigned char ah; unsigned char bl; unsigned char bh; unsigned char cl; unsigned char ch; unsignedcha.r d1; unsignedcha.rdh; Metodología de Programación, Programación en C, Aplicaciones electrónicas 3 / 10 Técnicas de Programación 3ª Parte: Programación de interrupciones y del Ratón union REGS { struct WORDREGS x; struct BYTEREGS h; } Los registros WORDREGS son registros de 16 bits. Los registros BYTEREGS son registros de 8 bits, que además coinciden con la parte alta y baja de los WORDREGS. Por ejemplo, escribir OxFF11 en el registro ax es 10 mismo que escribir en el registro ah OxFF y en el al Ox11. Una unión es un tipo de dato definible por el programador, como las estructuras, en la que se pueden almacenar datos de diferentes tipos en cada ocasión, es decir, en cada instante solo podra hacerse referencia a uno de los datos componentes de la unión. La palabra clave para definir y para declarar variables de tipo unión es union y, tanto las
  • 4. variables de tipo unión como sus miembros, o elementos, son tratados de igual forma que en el caso de las estructuras. Cuando se declara una variable de tipo unión, se asigna una porción de memoria que es compartida por variables diferentes en distintos momentos. UniónNombre Unión { tipo1 elemento1; tipo2 elemento2; tipo3 elemento3; ..... ....... } variables; donde Nombre_Union es el identificador del nuevo tipo de unión. La cantidad de memoria ocupada por una unión será la necesaria para almacenar el miembro de la unión que mas memoria necesite (en definitiva , el tipo de dato que más ocupe) Ejemplo: union talla{ int numero; // 42,46,50 char letra; // p, m, g char siglas[4]; // L, XL, XXL }camisetas; En la variable camisetas se puede almacenar la talla en cualquiera de los formatos mostrados en el ejemplo y, según el que se haya elegido, así habrá de ser considerado tanto en las lecturas de la variable como en las escrituras, debiendo ser el programador quien se encargue de conocer, en todo momento, el modo en el que ha almacenado la talla. Metodología de Programación, Programación en C, Aplicaciones electrónicas 4 / 10 Técnicas de Programación 3ª Parte: Programación de interrupciones y del Ratón Ese ejemplo se completaría si la variable camisetas perteneciese a un tipo de estructura de una base de datos de control de stocks de un almacén o tienda de confección. Las uniones son, en todo, similares a las estructuras, con la salvedad de que en cada instante solo uno de los elementos puede estar presente, debe ser el propio programa el que decida el tipo de dato que hay en cada momento. Igual que en las estructuras, el acceso a
  • 5. los elementos de una unión se realiza también con el operador punto «.», Por ejemplo, con la unión declarada anteriormente, cualquiera de las siguientes líneasserá valida para almacenar un valor en las posiciones de memoria asignadas a la variable camisetas: scanf("%d", &camisetas.numero); camisetas.letra = getchar() ; gets(camisetas.siglas); Retomando la composición e implementación de los diferentes registros del procesador, para escribir un dato en la unión de los registros (REGS) : Ejemplo: Escribir en el registro ax el valor OxFF11. Solución: Definimos una variable de tipo unión REGS unión REGS registros; Y escribimos en ella: registros.x.ax=0xFF11; Para lanzar la interrupción, usaremos la función de la librería dos.h int86, que se define en Turbo C como: int int86 (intnumero_interrupcion, unión REGS *registros_entrada, unión REGS *registros_salida);Metodología de Programación, Programación en C, Aplicaciones electrónicas 5 / 10 Técnicas de Programación 3ª Parte: Programación de interrupciones y del Ratón MANEJO DEL RATON Uno de los dispositivos másútiles y populares del PC es el ratón. Los ratones llevan existiendo mucho tiempo, pero su popularidad masiva surgió a partir del uso de entornos gráficos tipo Windows, cuyo manejo requiere el uso de un ratón. La posición que ocupa el ratón en la pantalla se define siempre en coordenadas graficas, aunque se esté trabajando en modo texto, considerando tantos puntos en la pantalla como permita la tarjeta grafica (actualmente, en VGA la resolución de la pantalla suele ser de 640 x 480 pixels).
  • 6. La interrupción 33 h Como ocurre casi siempre que se quiere acceder directamente al hardware, la forma mas cómoda de hacerlo es usar las funciones que nos proporcionan las interrupciones software. En este caso, la interrupción que se encarga de controlar, el ratón es la numero 33h. Esta interrupción nos proporciona nada menos que 53 funciones distintas, que seleccionaremos poniendo su numero en el registro ax. Si la función requiriera parámetros extra, usaríamos otros registros del procesador. De entre todas las funciones que se nos ofrecen, usaremos las siguientes: Función Tarea Llamada Retorno 00h Reset del ratón ax=0 ax>0 si hay raton ax=0 si no hay 01h Mostrar el cursor del ax=1 ...... ratón 02h Apagar el cursor del ax=2 ...... ratón 03h Leer el estado de los ax=3 bx=0 si no pulso botón botones y la posición bx=1 botonIzqdodel cursor bx=2 botonDcho bx=4 boton Centro cx=posición columna (H) dx=posición fila (V) 04h Establecer la posición ax=4 del cursor cx= columna dx= fila 07h Rango desplazHoriz. ax=7 cx=H minima dx=H máxima
  • 7. 08h Rango desplazVert. ax=8 cx=V minima dx=V máximaMetodología de Programación, Programación en C, Aplicaciones electrónicas 6 / 10 Técnicas de Programación 3ª Parte: Programación de interrupciones y del Ratón Antes de pasar a mostrar cómo trabajar con estas funciones, es importante destacar que la zona sobre la que trabaja el ratón no coincide con la pantalla real. EI ratón se mueve sobre una pantalla virtual, que depende del modo de vídeo en el que se esté trabajando, es decir, de la resolución. En las funciones básicas de manejo de1 ratón, referidas a pantalla de texto se hace necesario traducir estas coordenadas virtuales a coordenadas de texto. Esto se consigue dividiendo entre ocho las coordenadas graficas, pues cada caracterocupa ocho pixels de pantalla, labor que realizaremos antes de llamar a las funciones. Reset del ratón: función 00h Lo primero que debe hacer cualquier programa antes de usar el ratón es prepararlo reinicializarlo o resetearlo. Con esto conseguimos dejar al ratón en el centro de la pantalla con el cursor apagado. Para seleccionar esa función, ponemos su numero en el registro ax y lanzamos la interrupción 33h. Como resultado de la operación, la función nos devuelve el estado del ratón, es decir, si hay o no ratón instalado. Ese resu1tado lo deja de nuevo en el registro ax. Un -1 en dicho registro nos indica que no hay ratón instalado. Ejemplo: /* Reinicializar el ratón. Devuelve -1 si no hay ratón instalado * / intResetRaton (void) { union REGS registros; registros.x.ax = 0; /* elegimos la función correspondiente * / int86 (0x33, &registros, &registros); if ((int) registros.x.ax = = -1) {printf ( " No hay un ratón instalado” );
  • 8. return -1 ; } return 1; } Metodología de Programación, Programación en C, Aplicaciones electrónicas 7 / 10 Técnicas de Programación 3ª Parte: Programación de interrupciones y del Ratón Mostrar y ocultar el ratón: funciones 01h y 02h Como ya hemos dicho, al reinicializar el ratón, su cursor queda en el centro de la pantalla y apagado, es decir, aunque esta ahí, no podemos verlo. La forma de hacerlo visible es usar la función 01h. Esta función no tiene valores de retorno. Ejemplo: /* Mostrar el cursor del ratón */ voidMostrarCursor (void) { union REGS registros; registros.x.ax = 1; int86 (0x33, &registros, &registros); } /* Apagar el cursor del ratón * / voidApagarCursor (void) { union REGS registros; registros.x.ax = 2; int86 (0x33, &registros, &registros); } Leer el estado de los botones y la posición del cursor, función 03h
  • 9. La función 03h nos permite conocer el estado de los botones del ratón, información que almacena en el registro bx de la siguiente forma: Bit 1: Botón derecho ( 1 = presionado ). Bit 0: Botón izquierdo ( 1 = presionado ). Además, esta función deja en el registro cx la coordenada X y en el registro dx la coordenada Y.Metodología de Programación, Programación en C, Aplicaciones electrónicas 8 / 10 Técnicas de Programación 3ª Parte: Programación de interrupciones y del Ratón Ejemplo: /* Botón derecho del ratón presionado * / intBotonDerecho (void) { union REGS registros; registros.x.ax = 3; int86 (0x33, &registros, &registros); return (registros.x.bx& 2); /* Devuelve 1 si esta presionado */ /* Botón izquierdo del ratón presionado * / intBotonIzquierdo (void) { union REGS registros; registros.x.ax = 3; int86 (0x33, &registros, &registros); return (registros.x.bx& 1); /* Devolver la posición del ratón * / intPosicionRraton (int *x, int *y) { union REGS registros; registros.x.ax = 3;
  • 10. int86 (0x33, &registros, &registros); *x = registros.x.cx; *y = registros.x.dx; } Establecer la posición del ratón: función 04h Para colocar el cursor del ratón en una posición determinada, contamos con la función 04h. A esta función se le debe pasar la coordenada horizontal en el registro cx, y la vertical en el dx. Cuando se trabaja en modo texto hay que tener en cuenta, que las coordenadas hay que multiplicarlas por 8 antes de pasarlas a la función.Metodología de Programación, Programación en C, Aplicaciones electrónicas 9 / 10 Técnicas de Programación 3ª Parte: Programación de interrupciones y del Ratón Ejemplo: /* Colocar el ratón en la posición deseada * / voidColocarRaton (int x, int y) { union REGS registros; registros.x.ax = 4; registros.x.cx = x; registros.x.dx = y; int86 (0x33, &registros, &registros); } Ratón en Modo Gráfico Recordemos que la posición que ocupa el ratón en la pantalla se define siempre en coordenadas graficas, aunque se esté trabajando en modo texto, considerando tantos puntos en la pantalla como permita la tarjeta grafica (Actualmente, en VGA la resolución de la pantalla suele ser de 640x480 pixels).
  • 11. El desplazamiento del cursor se realiza mediante una unidad de movimiento del ratón que recibe el nombre de mickey y equivale a 1/200 pulgadas. Cuando se mueve el ratón, el controlador del ratón ( el programa driver) mueve el cursor horizontal y verticalmente un numero de pixels que depende de la sensibilidad del ratón. Por defecto, cuando se instala el controlador del ratón, para conseguir un desplazamiento de 8 pixels se precisan 8 mickeys en horizontal y 16 en vertical. EI control del ratón se realizaba mediante la interrupción int 0x33. A continuación se muestra, como ejemplo, un programa que activa el ratón y muestra las coordenadas del cursor: #include <stdio.h> #include <conio.h> #include <dos.h> #include <stdlib.h> #include <graphics.h> void main() { union REGS estado ; int driver = DETECT, mode; /* para seleccionar el modo grafico */ clrscr() ;Metodología de Programación, Programación en C, Aplicaciones electrónicas 10 / 10 Técnicas de Programación 3ª Parte: Programación de interrupciones y del Ratón //Inicializa el modo grafico en la pantalla. initgraph(&driver, &mode, "C:TCBGI") ; // Ruta de los drivers graficos // Mira si hay ratóninstalado estado.x.ax = 0; int86 (0x33, &estado, &estado) ; if ( !estado.x.ax) //si ax=0 ®
  • 12. no hay raton printf ("n ERROR: no hay ratón.") ; exit (1) ; estado.x.ax = 1; /* Muestra el ratón */ int86 (0x33, &estado, &estado) ; printf("Coordenadas del ratón: "); printf("npulsa tecla para terminar ") ; while (!kbhit()) { gotoxy(24,1) ; estado.x.ax = 3; /* Obtiene las coordenadas del ratón */ int86 (0x33, &estado, &estado) ; printf ("%3d,%3dn" , estado.x.cx, estado.x.dx) ; } closegraph() ; /* cierra el modo grafico */ estado.x.ax = 2; /* Quita el cursor del ratón */ int86 (0x33, &estado, &estado);