Académique Documents
Professionnel Documents
Culture Documents
Las interrupciones
En el mundo de los microcontroladores, es muy comn implementar programas multitarea que se encuentran pendientes de mltiples procesos: lectura de un dato proveniente del ADC, recepcin de un byte por el puerto serie UART, pulsacin de una tecla del teclado matricial, un flanco de bajada de un sensor digital, el desbordamiento de un Timer, un evento de Reset, etc. Muchos de estos eventos son procesos no predecibles que pueden ocurrir en cualquier instante de tiempo. Si el procesador se encuentra siempre pendiente de que cualquiera de estos eventos ocurra pueden suceder ciertos problemas: 1. El consumo de energa aumenta. 2. El procesador puede perder un evento por no registrarlo a tiempo. 3. Si dos eventos ocurren en simultneo el procesador puede ignorar uno de ellos. 4. El procesador puede verse limitado en su capacidad de procesamiento al tener que sostener tantos procesos a la vez. Para evitar todos estos inconvenientes, los microcontroladores cuentan con un sistema de interrupciones que permite detectar eventos externos al procesador en los momentos que ocurren y solo ocupan al procesador con tareas en el instante que dicho evento ha sido generado. Mag. Ing. Sergio Salas A.
Timbre malogrado
Interrupciones generales Interrupcin del temporizador TIMER 0 Interrupcin por cambio de estado del Puerto B Interrupcin externa 0 Interrupcin externa 1 Interrupcin externa 2
El registro INTCON
TMR0IF: Bit de bandera de interrupcin de desbordamiento del Timer 0. Este bit da aviso que ha ocurrido dicho evento. INT0IF: Bit de bandera de interrupcin del evento de flanco de subida/bajada en el pin RB0 RBIF: Bit de bandera de interrupcin del Evento de cambio de estado de los pines RB7-RB4
GIE/GIEH: Bit habilitador global de las interrupciones. Si IPEN = 1, este bit se transforma en GIEH y funciona como habilitador de las interrupciones de alta prioridad. PEIE/GIEL: Bit habilitador de las interrupciones de los perifricos. Si IPEN = 1, este bit se transforma en GIEL y funciona como habilitador de las interrupciones de baja prioridad. TMR0IE: Bit habilitador de la interrupcin por desbordamiento del TMR0. INT0IE: Bit habilitador de la interrupcin externa 0 (Pin RB0) RBIE: Bit habilitador de la interrupcin por cambio de estado del Puerto B.
Las interrupciones de alta prioridad generan un salto al vector 0x08. Las interrupciones de baja prioridad generan un salto al vector 0x018. Mag. Ing. Sergio Salas A.
;Se activan las prioridades de las interrupciones ;Prioridad baja para TMR0 ;Prioridad alta para el cambio de estado del Puerto B ;Se habilita la interrupcin por cambio de estado del Puerto B ;Se habilita la interrupcin por cambio de estado del TMR0 ;Se habilita la mscara de interrupciones de baja prioridad ;Se habilita la mscara de interrupciones de alta prioridad ;PC=0x2E ;PC=0x30 ;PC=0x32 ;PC=0x34 ;PC=0x36 ;PC=0x38
Suponga que cada vez que se detecta un flanco de bajada se cambia el estado del pin RD2, el cual se conecta a un LED.
MAIN:
INICIO:
setf TRISB bcf INTCON2,RBPU bcf TRISD,2 bcf INTCON2,INTEDG0 bsf INTCON,INT0IE bsf INTCON,GIE
;Pull UP del Puerto B en ON ;RD2 salida digital ;Se elige flanco de bajada para la INT0 ;INT0 ON ;Interrupciones globales activas ;Rutina de servicio de interrupcin INT0
El Timer 0
El TMR0 es un registro de 8 bits (que puede operar en modo de 16 bits) que se encarga de contar automticamente de 0 hasta 255. Cuando la cuenta del TMR0 pasa de 255 a 0, ocurre un desbordamiento con lo cual el bit TMR0IF se pone a 1 lgico. El evento de desbordamiento puede producir una interrupcin. El TMR0 es un registro de lectura y escritura. La fuente de reloj para el conteo puede ser FOSC/4 o una seal externa. El TMR0 cuenta con un prescaler que permite reducir la velocidad de conteo en un factor potencia de 2.
El registro T0CON
TMR0ON: 1: Timer 0 ON 0: Timer 0 OFF T08BIT: 1: TMR0 es un contador de 8 bits 0: TMR0 es un contador de 16 bits TOCS: 1: Fuente de reloj pin T0CKI 0: Fuente de reloj FOSC/4 TOSE: 1: TMR0 se incrementa en el flanco de bajada de T0CKI 0: TMR0 se incrementa en el flanco de subida de T0CKI
PSA: 1: Timer 0 NO usa prescaler 0: Timer 0 SI usa prescaler TOPS2 TOPS1 TOPS0: prescaler 0 0 0 1/2 0 0 1 1/4 0 1 0 1/8 0 1 1 1/16 1 0 0 1/32 1 0 1 1/64 1 1 0 1/128 1 1 1 1/256
La generacin de eventos de interrupcin cada 1segx(1/prescaler) genera retardos de tiempo fijos, en los cuales si la rutina de servicio de interrupcin resulta de una duracin menor al tiempo de desbordamiento, entonces esta rutina podr ejecutarse de forma peridica con un lapso preciso. Este es el principio para poder generar retardos de tiempo exactos de 1 segundo Por ejemplo. Claro para esto se necesita otra fuente de reloj de conteo, por lo cual el Timer 0 queda descartado. Para este tipo de aplicaciones se usar ms adelante el Timer 1.