Teoría
- Cuestionario I (hecho)
- Cuestionario 2 (hacer hoy)
Apuntes teoría sensores y material de prácticas para la asignatura del curso Informática Industrial
Mostrando entradas con la etiqueta interrupciones. Mostrar todas las entradas
Mostrando entradas con la etiqueta interrupciones. Mostrar todas las entradas
10 de mayo de 2011
20 de mayo de 2008
Siempre hay que habilitar las interrupciones
Prácticamente cualquier microcontrolador del mercado tiene dispositivos integrados como temporizadores, conversores A/D, etc. Cuando se programa cada uno de estos dispositivos, funcionan de manera autónoma, interrumpiendo al microprocesador sólo cuando acaban su trabajo (por ejemplo para los temporizadores cuando finaliza su cuenta).
Esta señal de aviso se transmite directamente desde el dispositivo (temporizador) hasta el microprocesador por hardware, pero antes de llegar pasa un filtro, éste es el registro de habilitación de interrupciones IENx (Interrupt Enable).
En el caso del micro visto en clase, hay dos registros de habilitación de interrupciones (IEN0 e IEN1), ambos permite habilitar/deshabilitar cada una de las interrupciones que genera los dispositivos. Cada vez que diseñamos un programa basado en interrupciones, no debemos olvidar habilitar las interrupciones de cada dispositivo en este registro, además de habilitar el bit de interrupciones general (EAL).
Un ejemplo puede ser:
EAL=0; 'se inhabilita todas las interrupciones antes de modificar nada..
...... aquí habilito las interrupciones particulares, del timer, A/D, etc...
EAL=1; 'se habilita las interrupciones de nuevo..
Esta señal de aviso se transmite directamente desde el dispositivo (temporizador) hasta el microprocesador por hardware, pero antes de llegar pasa un filtro, éste es el registro de habilitación de interrupciones IENx (Interrupt Enable).
En el caso del micro visto en clase, hay dos registros de habilitación de interrupciones (IEN0 e IEN1), ambos permite habilitar/deshabilitar cada una de las interrupciones que genera los dispositivos. Cada vez que diseñamos un programa basado en interrupciones, no debemos olvidar habilitar las interrupciones de cada dispositivo en este registro, además de habilitar el bit de interrupciones general (EAL).
Un ejemplo puede ser:
EAL=0; 'se inhabilita todas las interrupciones antes de modificar nada..
...... aquí habilito las interrupciones particulares, del timer, A/D, etc...
EAL=1; 'se habilita las interrupciones de nuevo..
8 de mayo de 2008
Los vectores de interrupción
Cuando se genera una interrupción, el programa principal se detiene y el flujo de ejecución salta a la rutina de servicio (es un trozo de código que tiene una función determinada). La dirección a la que se salta es el VECTOR DE INTERRUPCIÓN, es una dirección física de memoria como por ejemplo 40Ah, etc. Cada microcontrolador tiene definidas unas direcciones fijas de memoria para 'alojar' estas rutinas de servicio, independientemente de si se utilizan o no. Si quieres ver qué dirección de memoria (vector) está asociada a cada interrupción, sólo tienes que echar un vistazo a las hojas de características de cada micro:
En el ejemplo de la figura de arriba que corresponde al micro de clase, T89C51CC01, puedes ver que cada interrupción está asociada a una dirección (su vector), por ejemplo cuando se produzca la interrupción 4, el microcontrolador saltará a la dirección de memoria 0023h para ejecutar la rutina asociada. Estas direcciones son fijas y no se pueden cambiar. En realidad a la hora de escribir el código de una interrupción no te hace falta saber su vector, lo que sí es importante es añadir el número asociado a la interrupción que estás programando.
Suscribirse a:
Entradas (Atom)