You are on page 1of 7

UNIVERSIDAD DE SONORA

Microcontroladores
Interrupciones Parte II

Ingeniería Mecatrónica
Dr. Victor H. Benitez

Dr. Victor H. Benitez 1
Interrupciones II

APLICACIONES

Dr. Victor H. Benitez 2
; Intej02.asm. Cuando se presione RB7 se encenderá goto StopPush
; un led durante 2 segundos. Si se oprime RB6 el btfss InputRB6
; mismo led se encenderá por 400ms goto StopPush
bcf INTCON,RBIF
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC retfie
LIST P=16F84A ; Subrutina de activación del LED
INCLUDE<P16F84A.INC> LightLarge
bsf OutputLED
CBLOCK 0X0C call Retardo_2s
ENDC LightShort
bsf OutputLED
#DEFINE InputRB7 PORTB,7 call Retardo_200ms
#DEFINE InputRB6 PORTB,6 call Retardo_200ms
#DEFINE OutputLED PORTB,5 bcf OutpuLED
return
ORG 0
goto Start INCLUDE<RETARDOS.INC>
ORG 4 END
goto ServicioInt
Start
bsf STATUS,RP0
bsf InputRB7 TIP: Al estar usando resistencia de pull up
bsf InputRB6 se debe tener cuidado que el botón que
bcf OutputLED
bcf OPTION_REG,NOT_RBPU enciende el led debe de introducir un nivel
bcf STATUS,RP0 bajo. La resistencia de pull up mantiene un
movlw b’10001000’
movwf INTCON nivel alto internamente en el mC. El circuito
Main de la figura 1 sirve para elaborar este tipo
sleep
goto Main ; espera la int de practicas
;*** subrutina ServicioInt *****
ServicioInt
call retardo_20ms ; voltaje estable
btfss InputRB7
call LightLarge
btfss InputRB6
call LightShort Interrupción por cambio
StopPush Dr. Victor H. Benitez 3
btfss InputRB7 de estados en RB7:RB4
Figura 1

Dr. Victor H. Benitez 4
; Intej03.asm. Despliega un mensaje fijo o uno btfsc Blink,0
; intermitente usando un display de lcd. El control call LCD_LineaEnBlanco
; se realiza con un botón usando interrupciones call Retardo_200ms
goto Main
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A ; ***** Servicio de Interrupción ******
INCLUDE<P16F84A.INC> CBLOCK
Guarda_W
CBLOCK 0X0C Guarda_STATUS
Blink ; blink = 0 mensaje ENDC
ENDC ; fijo con 1 interm ServicioInt
movwf Guarda_W
#DEFINE boton PORTB,0 swapf STATUS,W
movwf Guarda_STATUS
ORG 0 bcf STATUS,RP0 ; asegura bank 0
goto Start call Retardo_20ms
ORG 4 btfsc boton
goto ServicioInt goto FinInt
Start comf Blink,F
call LCD_Inicializa FinInt
clrf Blink ; mensaje fijo swapf Guarda_STATUS,W
bsf STATUS,RP0 movwf STATUS
bsf boton swapf Guarda_W,F

Interrupción RB0/INT
bcf OPTION_REG,NOT_RBPU swapf Guarda_W,W
bcf OPTION_REG,INTEDG ;flanco baja bcf INTCON,INTF
bcf STATUS,RP0 retfie
movlw b’10010000’ ; *** Rutina de Mensajes *****
movwf INTCON Mensajes
Main addwf PCL,F
call LCD_Linea1 MensajeAviso
movlw MensajeFijo ;inicialmente fijo DT " Nombre Alumno", 0x00
btfsc Blink,0 MensajeIntermitente
movlw MensajeIntermitente DT "M. INTERMITENTE", 0x00
call LCD_Mensaje MensajeFijo
call LCD_Linea2 DT " Mensaje FIJO ", 0x00
movlw MensajeAviso INCLUDE <RETARDOS.INC>
call LCD_Mensaje INCLUDE <LCD_4BIT.INC>
call Retardo_200ms INCLUDE <LCD_MENS.INC>
call LCD_Linea2 Dr. Victor H. Benitez END 5
Interrupción por desbordamiento del TIMER 0

• Para configurar este tipo de interrupción, primeramente se configuran
los bits GIE y T0IE del registro INTCON
• Sabemos que el desbordamiento del timer 0 ocurre cuando la cuenta
pasa de 0xFF a 0x00 activando el flag T0IF
• Las interrupciones por desbordamiento del timer 0 son muy adecuadas
cuando requerimos diseñar con exactitud una señal con frecuencia
determinada como se verá en el siguiente ejemplo

GIE EEIE T0IE INTE RBIE TOIF INTF RBIF
1 B6 1 B4 B3 B2 B1 B0

Dr. Victor H. Benitez 6
; Intej04.asm. Generar una onda cuadrada con una Up
; frecuencia de 65.406 Hz, la cual corresponde a la bcf Output ; pasa de alto a bajo
; primera nota DO por el pin RB2. Visualizar en FinInt
; osciloscopio el resultado bcf INTCON,TOIF; borra la bandera
retfie
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A END
INCLUDE<P16F84A.INC>

CBLOCK 0X0C
ENDC

TMR0_Load EQU d’197’ Cálculos:
#DEFINE Output PORTB,2
F = 65.406Hz, T = 1/F = 15.3ms
ORG 0
goto Start Lo cual implica que cada semiperiodo
ORG 4 dure 15.3/2 = 7.6ms = 7600us
goto ServicioInt
Start
bsf STATUS,RP0 𝑇𝑖𝑚𝑒
bcf Output 𝐿𝑜𝑎𝑑 𝑇0 = 256 −
movlw b’00000110’;prescaler de 128 𝑘 𝑝𝑟𝑒𝑠𝑐
movwf OPTION_REG
bcf STATUS,RP0 0.0076
= 256 − = 197
movlw
movwf
TMR0_Load
TMR0 1𝑥10−6 128
movlw b’10100000’;habilita int T0
movwf INTCON
Main
goto $; Sleep = apagar el TMR0
;****** Interrupción *********
ServicioInt
movlw TMR0_Load; carga el T0 para
movwf TMR0; cada ciclo
btfsc Output;verifica la salida
goto Up
Down
bsf Output; pasa de bajo a alto
Dr. Victor H. Benitez 7
goto FinInt