El documento presenta un programa que contiene varias interrupciones. Si la interrupción es causada por RB0, mostrará un 2 binario en el puerto A. Si es causada por un cambio en RB4:RB7, mostrará un 1 binario en el puerto A. Si es causada por un desbordamiento del TMR0, mostrará un 4 binario en el puerto A. El programa configura las interrupciones y los puertos y entra en un lazo infinito.
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
Ejemplo varias interrupciones
1. ; Ejemplo. Realicemos un programa completo que contenga varias interrupciones. Si la causa ha
; sido la activación del pin RB0, se debe mostrar un dos en binario en el puerto A. Si ha sido un
; cambio de nivel en RB4:RB7, se debe mostrar el uno en binario en el puerto A. Si se ha
; desbordado el TMR0, se debe mostrar el cuatro en binario en el puerto A.
LIST P=16F84A
INCLUDE P16F84A.INC
W_TEMP equ 20H ; Se declaran los registros generales para
ESTADO_TEMP equ 21H ; salvar los registros STATUS y W
org 00H
goto INICIO
org 04H ; Se coloca el vector interrupción para que se
goto RUTINTERR ; Ejecute la rutina de interrupción
RUTINTERR movwf W_TEMP ; Se inicia a la rutina de servicio de interrupción
swapf W_TEMP,1
movf STATUS,0
movwf ESTADO_TEMP
btfsc INTCON,0 ; Se empieza exploración de causa de interrupción
goto INTERRB47 ; Si RBIF=1, se va a ejecutar
btfsc INTCON,1
goto INTERRB0 ; Si INTF=1, se va a ejecutar
btfsc INTCON,2
goto INTERRTMR ; Si TOIF=1, se va a ejecutar
goto SALIRINT ; Si no es ninguna, se sale de la interrupción
SALIRINT bsf INTCON,7 ; Se habilita GIE, para permitir de nuevo otra
movf ESTADO_TEMP,0 ; Interrupción y se restaura el entorno
movwf STATUS
swapf W_TEMP,0
retfie ; El uso de return o retlw k, puede producir
; errores en la ejecución del programa
;**********************************************
;*** Subrutina de tratamiento de cambio de RB4:RB7 ***
;**********************************************
INTERRB47 bcf INTCON,0
movlw 01H
movwf PORTA
movf PORTB,0 ; Ver NOTA (1)
bcf INTCON,0 ; Se borra por software el señalizador de esta
goto SALIRINT ; Interrupción
;************************************************
;*** Subrutina de tratamiento de activación de INT/RB0 ***
;************************************************
INTERRB0 movlw 02H
movwf PORTA
2. bcf INTCON,1 ; Se borra por software el señalizador
goto SALIRINT
;**********************************************
;*** Subrutina de tratamiento del desborde del TMR0 ***
;**********************************************
INTERRTMR movlw 04H
movwf PORTA
movlw d'01' ; Se carga el valor calculado para el TMR0
movwf TMR0 ; para asegurarnos que al regresar tenga este valor
bcf INTCON,2 ; Se borra el señalizador
goto SALIRINT
;*************************
;***PROGRAMA PRINCIPAL***
;*************************
INICIO bsf STATUS,5
clrf PORTA ; PORTA como entrada
movlw 0FFH
movwf PORTB ; PORTB como entrada
movlw b'01000110'
movwf OPTION_REG ; Diga: ¿Cómo se configuró OPTION?
bcf STATUS,5
movlw b'10111000' ; Se habilita GIE y las interrupciones
movwf INTCON ; Individuales
DORMIR nop
movlw d'01'
movwf TMR0
SINFIN CLRWDT
goto SINFIN ; Se coloca al microcontrolador en
; bucle o lazo sin fin
end
; NOTA (1): En este tipo de interrupción, internamente el procesador lee el nibble alto del puerto B
; y hace una copia. La interrupción se genera cuando la lectura del nibble alto del puerto B es
; diferente de la copia. Dentro de la ejecución de esta rutina de interrupción, es importante que se
; lea el puerto B, para actualizar la copia, y el procedimiento adecuado es el mostrado
; anteriormente.