Contenido>Indice>Intro CursoC51

USO DE LAS FUENTES DE INTERRUPCIÓN SOBRANTES


Un problema del 8051 es la carencia de un TRAP o interrupción software. Mientras que los usuarios de C166 tienen el lujo de disponer de un hardware que soporta tales cosas, los programadores del 8051 tienen que ser más ingeniosos.

Recientemente se planteó un problema en el cual, la función de interrupción de mayor prioridad tenía que correr hasta cierto punto, a partir del cual otras interrupciones podrían entrar. Desafortunadamente no sirve cambiar el registro de prioridad de las interrupciones durante la propia función de interrupción, debido a que las interrupciones de menor o igual prioridad quedan a la espera del RETI. La solución consistió en utilizar la interrupción del convertidor A/D, que estaba libre, y encadenar la segunda sección de la función de interrupción a ella. Para ello, se activó el flag IADC de interrupción pendiente, justo antes de la llave de cierre "}", con lo cual la segunda sección de la interrupción podía correr inmediatamente. Como la prioridad de la interrupción del ADC se había puesto a nivel bajo, podía ser interrumpida por interrupciones de nivel alto.

 
/* Interrupción primaria de la entrada capture CC0 */

tdc_int() interrupt 8 {

/* Sección de alta prioridad - no debe ser interrumpida */


/* Habilitar la sección de menor prioridad mediante */
                         /* la interrupción del ADC */

IADC = 1 ; /* Solicita la interrupción del ADC */ 
EADC = 1 ; /* Habilita la interrupción del ADC */ 
}

/* Sección de menor prioridad unida a la interrupción del ADC */

tdc_int_low_priority() interrupt 10

IADC = 0 ; /* Evita nuevas llamadas */ 
EADC = 0 ;

/* La sección de baja prioridad debe ser interrumpible y */
/* debe seguir a la sección de alta prioridad de arriba */

}  

 


   Contenido>Indice>Intro CursoC51