Professional Documents
Culture Documents
SISTEMAS MICROCONTROLADOS
INTERRUPCIONES
Una parte de programa que se ejecutar al hacer una peticin de interrupcin se le denomina rutina de
interrupcin. Su primera instruccin se encuentra en el vector de interrupcin. Cunto tiempo tardar en
ejecutar esta subrutina y cmo ser depende de la destreza del programador as como de la fuente de
interrupcin. Algunos microcontroladores tienen ms de un vector de interrupcin (cada peticin de
interrupcin tiene su vector), pero en este caso slo hay uno. En consecuencia, la primera parte da la
rutina de interrupcin consiste en detectar la fuente de interrupcin.
Por fin, al reconocer la fuente de interrupcin y al terminar de ejecutar la rutina de inte-rrupcin el
microcontrolador alcanza la instruccin RETFIE, toma la direccin de la pila y contina con la ejecucin de
programa desde donde se interrumpi.
MikroBasic reconoce una rutina de interrupcin que se ejecutar por medio de la palabra
clave interrupt. La rutina de interrupcin, debe ser escrita por el usuario.
Como hemos visto, toda la idea es muy simple y eficiente. Al llegar la peticin de interrupcin,
primero el bit de bandera se pone a uno. Si el bit IE apropiado est a cero (0), esta condicin ser
ignorada completamente. De lo contrario, ocurre una interrupcin. Si varias fuentes de
interrupcin estn habilitadas, es necesario detectar la activa antes de que la rutina de interrupcin
se ponga a ejecutar. La deteccin de la fuente se realiza al comprobar los bits de las banderas.
Cabe destacar que los bits de cada bandera no se ponen a cero automticamente, sino por el
software, mientras que la ejecucin de la rutina de interrupcin contina ejecutndose. Si no
hacemos caso a este detalle, ocurrir otra interrupcin inmediatamente despus de volver al
programa principal, aunque no hay ms peticiones de ejecucin. Simplemente, la bandera, as
como el bit IE, se quedan en uno.
El registro OPTION_REG contiene varios bits de control para configurar el pre - escalador del
Timer0/WDT, el temporizador Timer0, la interrupcin externa y las resistencias pull-up en el
puerto PORTB.
Leyenda: R/W - Bit de lectura/escritura, (0) Despus del reinicio, el bit se pone a cero, (X) -
Despus del reinicio, el estado de bit es desconocido
T0IE - TMR0 Overflow Interrupt Enable bit (bit de habilitacin de interrupciones por
el desbordamiento del registro Timer0) controla interrupciones causadas por el
desbordamiento del Timer0.
RBIE - RB Port Change Interrupt Enable bit. (bit de habilitacin de interrupciones por
cambios en el puerto PORTB). Cuando se configuran como entradas, los pines en el puerto
PORTB pueden causar una interrupcin al cambiar el estado lgico (no importa si se
produce bajada o subida de tensin, lo que importa es que se produce un cambio). Este bit
determina si una interrupcin va a ocurrir.
T0IF - TMR0 Overflow Interrupt Flag bit (bit de bandera de interrupcin por el
desbordamiento del Timer0) detecta el desbordamiento en el registro del temporizador
Timer0, o sea el contador se pone a cero.
INTF - RB0/INT External Interrupt Flag bit (bit de bandera de interrupcin externa en
INT) detecta el cambio en el estado lgico en el pin INT.
1 - Ha ocurrido una interrupcin externa por INT (esta bandera debe volverse a 0
por software)
0 - No ha ocurrido una interrupcin externa por INT
RBIF - RB Port Change Interrupt Flag bit (bit de bandera de interrupcin por cambio
en el puerto RB) detecta cualquier cambio del estado lgico de alguno de los pines de
entrada en el puerto PORTB.
1 - Al menos uno de los pines de E/S de propsito general en el puerto PORTB ha
cambido de valor. Despus de leer el puerto PORTB, el bit RBIFdebe volverse a 0
por software)
0 - Ninguno de los pines de E/S de propsito general en el puerto PORTB ha
cambiado de valor.
Registro OPTION_REG
Leyenda: R/W - Bit de lectura/escritura, (1) Despus del reinicio, el bit se pone a uno
El registro OPTION_REG contiene varios bits de control para configurar el pre - escalador del
Timer0/WDT, el temporizador Timer0, la interrupcin externa y las resistencias pull-up en el
puerto PORTB.
INTEDG - Interrupt Edge Select bit (bit selector de flanco activo de la interrupcin externa)
o 1 - Interrupcin por flanco ascendente en el RB0/INT
T0CS - TMR0 Clock Source Select bit (bit selector de tipo de reloj para el Timer0)
o 1 - Pulsos introducidos a travs del TOCKI (contador)
o 0 - Pulsos de reloj internos Fosc/4 (temporizador)
T0SE - TMR0 Source Edge Select bit (bit selector de tipo de flanco en TOCKI) selecciona el flanco
(ascendente o descendente) contado por el temporizador Timer0 por el pin RA4/T0CKI.
o 1 - Incrementa en flanco descendente en el pin TOCKI.
o 0 - Incrementa en flanco ascendente en el pin TOCKI.
PSA - Prescaler Assignment bit asigna el pre-escalador (hay slo uno) al temporizador o al WDT.
o 1 - Pre - escalador se le asigna al WDT
o 0 - Pre - escalador se le asigna al temporizador Timer0.
PS2, PS1, PS0 Prescaler Rate Select bits (bit selector del valor del divisor de frecuencia)
El valor del divisor de frecuencia se selecciona al combinar estos tres bits. Como se muestra en la
siguiente tabla, el valor del divisor de frecuencia se le asigna al temporizador Timer0 o al
temporizador perro guardin (WDT).
0 0 0 1:2 1:1
0 1 0 1:8 1:4
0 1 1 1:16 1:8
1 0 1 1:64 1:32
1 1 0 1:128 1:64
1 1 1 1:256 1:128
Para conseguir el valor del divisor de frecuencia 1:1 cuando el temporizador Timer0 cuenta
pulsos, el pre-escalador debe ser asignado al WDT. En consecuencia, el temporizador Timer0 no
utiliza el pre-escalador, sino que cuenta directamente los pulsos generados por el oscilador, lo que
era el objetivo.
Interrupcin RB0
La interrupcin causada por el pin de entrada RB0 es causada por un cambio lgico para ello debemos
realizar la configuracin del registro OPTION_REG y el registro INTCON.
Registro OPTION_REG
Leyenda: R/W - Bit de lectura/escritura, (1) Despus del reinicio, el bit se pone a uno
INTEDG - Interrupt Edge Select bit (bit selector de flanco activo de la interrupcin externa)
Registro INTCON
El registro OPTION_REG contiene varios bits de control para configurar el pre - escalador del
Timer0/WDT, el temporizador Timer0, la interrupcin externa y las resistencias pull-up en el
puerto PORTB.
Leyenda: R/W - Bit de lectura/escritura, (0) Despus del reinicio, el bit se pone a cero, (X) -
Despus del reinicio, el estado de bit es desconocido
INTF - RB0/INT External Interrupt Flag bit (bit de bandera de interrupcin externa en
INT) detecta el cambio en el estado lgico en el pin INT.
1 - Ha ocurrido una interrupcin externa por INT (esta bandera debe volverse a 0
por software)
0 - No ha ocurrido una interrupcin externa por INT
end sub
sub procedure Move_Delay() ' Function used for text moving
Delay_ms(500) ' You can change the moving speed here
end sub
main:
Setup
LCD_P1
while TRUE ' Endless loop
if bandera=1 then
Lcd_Cmd(_LCD_CLEAR) ' a ocurrido una interrupcin por RB0
Lcd_Out(1,1,"Interrupcion RB0") ' Write text in first row
bytetostr(INTCON,txt4)
Lcd_Out(2,1,txt4)
Delay_ms(2000)
bandera=0
LCD_P1
end if
wend