Está en la página 1de 6

PRACTICA N 3

Microcontrolador PIC16F84A.

Objetivo:

Comprobar como funciona la interrupcin externa, /INT, pin n6.
Al actuar sobre el pin n6 mediante un pulsador provocaremos que el puerto A, al cual, hemos
conectados unos leds, se apagen y enciendan en un bucle repetitivo.

Cmo se configuran los registros que intervienen en una interrupcin externa ?

Pasos:

1 paso:

Como las interrupciones de este microcontrolador estn vectorizadas en una sola posicin
de memoria, hay que poner la direccin de la interrupcin (0004h), que es donde va a ir a buscar la
instruccin de salto (goto), que conducir al microcontrolador al programa de tratamiento de la
interrupcin.

2 paso:

Se configura el registro OPTION_REG y en concreto se eligir el tipo de flanco: ascendente
o descendente.
El bit 6 de este registro, llamado INTEDG, se cargar con 1 para elegir flanco ascendente y
0 para flanco descendente.
Yo he elegido flanco descendente.

3paso:

Se configura el registro relacionado con el software de la interrupcin /Int.

El registro y los bits son:

INTCON: bit 7 (GIE)= Activacin global de interrupciones = 1= permiso concedido.

bit 4 (INTE)= Activacin de la interrupcin externa = 1= activada.

Cmo sabremos si se ha producido una interrupcin externa, /Int ?

Toda interrupcin, si est activada, al producirse provocar la activacin de las llamadas
banderas o bits, que al ser examinados nos descubrirn si sea producido una interrupcin.

La bandera o bit de la interrupcin /Int, est en el registro INTCON, y es el bit 1, llamado
INTF. Un 1 en l nos indica que sea producido una interrupcin.

Esta bandera hay que bajarla, o sea, ponerla a cero por software para saber si se ha
producido una peticin de interrupcin posterior.

Esquema elctrico:




Programa:
;---------------------------------------------------------
;PROGRAMA inter.ASM
;Cmo funciona la interrupcin externa /Int.
;---------------------------------------------------------

list p=16f84A
include "p16F84A.inc"

;---------------------------------------------------
;RESET
;---------------------------------------------------

org 00h
reset
goto inicio

;------------------------------
;INTERRUPCION
;------------------------------
org 04h

goto int

;--------------------------------
;PUNTERO DE INICIO
;--------------------------------

org 10h
inicio

;-----------------------------------------------------------
;Configurar el puerto A como salida.
;-----------------------------------------------------------
;Registro TRISB=00h para salidas.

bsf STATUS,RP0; banco1
movlw 00h;
movwf TRISA; puertoA como salida
bcf STATUS,RP0; banco0



;-----------------------
;PuertoA apagado.
;-----------------------
movlw 00h
movwf PORTA

;------------------------------------------------
;Configurar el registro OPTION_REG.
;Flanco de bajada.
;------------------------------------------------
;Registro OPTION_REG
;bit6=INTEDG= 0= flanco descendente


bsf STATUS,RP0; banco1
bcf OPTION_REG,INTEDG; flanco descendente
bcf STATUS,RP0; banco0


;--------------------------------------------------------------------------------
;Configurar el registro INTCON.
;Habilitar permisos de interrupciones general y particular de /Int.
;--------------------------------------------------------------------------------
;Habilitar permiso de interrupcin global.

bsf INTCON,GIE; 1= activacin permiso general.

;Habilitar permiso int.

bsf INTCON,INTE; 1= activacin permiso /int.


;---------------------------------------------------------------------
;Esperando la interrupcin.
;Cuando pulse el botn provoco un flanco de bajada y salgo del
;bucle de espera. La bandera pasa a 1 y salto al programa de la in-
;terrupcin y luego al programa principal, haciendo infinitos bucles.

;La /Int la uso como autorizacin (pulsar el botn) para ejecutar
;el programa principal.
;---------------------------------------------------------------------


espera

btfss INTCON,INTF; salta si es uno

goto espera; salto a "espera" hasta que la
; bandera sea 1.Cuando pulse el
; el botn provoco la interrup-
; cin y salto a ejecutar la sub-
; rutina de interrupcin "int".
; Luego ejecuto el programa
; principal.

;--------------------------------------------------
;PROGRAMA PRINCIPAL
;--------------------------------------------------
programa

movlw 00h; apago puerto A.
movwf PORTA

call sg1

movlw 0ffh; enciendo puerto A.
movwf PORTA

call sg1

goto programa


;------------------------------------------------------------------------------------------
;INTERRUPCION DE /Int.
;------------------------------------------------------------------------------------------
;Deshabilitar permiso de int. global y particular de /Int.
;Con deshabilitar una de los dos bastara para no haber ms interrupciones.

int
bcf INTCON,GIE; 0 para no ms interrupciones
; de ningn tipo.
bcf INTCON,INTE; 0 para no ms interrupcin
; /Int.


;Poner a cero el flag de la /Int., necesario si hubiera ms interrupciones de /Int.
;Este programa solo va haber una "unica" llamada a la /Int. y se ejecutar el
;programa principal indefinidamente deshabilitando para siempre la /Int.

bcf INTCON,INTF; 0 por software.

retfie; retorno de subrutina de interrupcin.



;-------------------------------------------------------------------------
;Retardos.
;--------------------------------------------------------------------------
;c1h=193 goto=2 useg. decfsz=1 useg.( salta si 0 ).
;(193 x 2) + 193 = 579 useg
;(579 x 579) = 335241 useg.
;(335241 x 3) = 1005723 useg.

;0ch, 0dh y 0eh registros RAM del GPR

;----------------------------------------

sg1; 1005723 useg.

movlw 0c1h
movwf 0ch
movwf 0dh

movlw 01h
movwf 0eh

salto1
decfsz 0ch,1
goto salto1

decfsz 0dh,1
goto salto1

decfsz 0eh,1
goto salto1

return
;-------------------------
sg500; 497025 useg.

movlw 0e6h; e6h= 235
movwf 0ch
movwf 0dh

salto2 decfsz 0ch,1
goto salto2

decfsz 0dh,1
goto salto2

return

;--------------------------

sg250; 251001 useg.

movlw 0a7h; a7h= 167
movwf 0ch
movwf 0dh

salto3
decfsz 0ch,1
goto salto3

decfsz 0dh,1
goto salto3

return

;---------------------------

sg125; 125316 useg.

movlw 76h; 76h= 118
movwf 0ch
movwf 0dh

salto4
decfsz 0ch,1
goto salto4

decfsz 0dh,1
goto salto4

return

;----------------------------------

end

También podría gustarte