TEMA 19 INTERRUPCIÓN POR CAMBIO DE NIVEL EN RB4:RB7 INTRODUCCIÓN Seguidamente comenzamos el estudio de la interrupción por cambio de nivel en cualquiera de los pines RB4-RB7. Para ello, realizaremos un sencillo ejercicio, en el cual detectaremos esta interrupción y además comprobaremos cual es el bit que ha modificado su nivel. El circuito que deberemos construir es: CCFF D.P.E. MÓDULO DE PROYECTOS 2 C1 27pF X1 16 15 4 OS C1/CLKIN OS C2/CLKOUT MCLR 27pF 17 18 1 2 3 RA 0 RA 1 RA 2 RA 3 RA4/T 0CKI 6 7 8 9 10 11 12 13 RB0/INT RB 1 RB 2 RB 3 RB 4 RB 5 RB 6 RB 7 10k 390R B4 B5 B6 B7 PIC16F84A B4 B5 100 R3 B4 B5 RESET B6 B7 10k 10k B6 C2 4MHz B7 CCFF D.P.E. MÓDULO DE PROYECTOS 3 El programa (principal) que se ejecutará en modo continuo será presentar un barrido sobre los 4 leds conectados al PUERTO A, y con una cadencia de 0,3 segundos. Cuando se active cualquiera de los pulsadores conectados desde RB4 a RB7, se debe producir una interrupción, por cambio de nivel. Las acciones que se ejecutarán dentro de la rutina de atención a esta interrupción serán: Encendemos el led conectado al pin B0 (puertoB). Mostramos 0 en los leds conectados al puerto A , Esperamos 2 segundos en esta situación Apagamos el bit indicador de interupción activada. Retornamos al programa principal. CCFF D.P.E. MÓDULO DE PROYECTOS 4 Mediante PIC Wizar comenzamos a definir nuestro proyecto: Tipo de procesador, perro guardián desactivado, frecuencia de funcionamiento, etc.. posteriormente picamos sobre Interrupts CCFF D.P.E. MÓDULO DE PROYECTOS 5 En esta nueva pantalla habilitamos la interrupción por cambio de nivel en RB4:RB7 y visualizamos el código que se genera: CCFF D.P.E. MÓDULO DE PROYECTOS 6 Una vez que validamos mediante OK, vemos en la zona de edición el código ya generado por el propio compilador: Esta línea la eliminaremos CCFF D.P.E. MÓDULO DE PROYECTOS 7 CCFF D.P.E. MÓDULO DE PROYECTOS 8 CCFF D.P.E. MÓDULO DE PROYECTOS 9 Simulación mediante MPLAB CCFF D.P.E. MÓDULO DE PROYECTOS 10 Simulación mediante MPLAB CCFF D.P.E. MÓDULO DE PROYECTOS 11 Simulación mediante MPLAB, generamos una interrupción: el puerto A pasa a valer 0h y RB0 pasa a valer 1 CCFF D.P.E. MÓDULO DE PROYECTOS 12 Simulación mediante PROTEUS: ejecución del programa principal: CCFF D.P.E. MÓDULO DE PROYECTOS 13 Simulación mediante PROTEUS: ejecución del programa principal: CCFF D.P.E. MÓDULO DE PROYECTOS 14 Simulación mediante PROTEUS: Rutina de atención a la interrupción RB0 activado (1) y puerto A a 0h: CCFF D.P.E. MÓDULO DE PROYECTOS 15 Simulación mediante PROTEUS: desplazamientos a izquierdas ejecución del programa CCFF D.P.E. MÓDULO DE PROYECTOS principal, 16 Simulación mediante PROTEUS: desplazamientos a derechas ejecución del programa CCFF D.P.E. MÓDULO DE PROYECTOS principal, 17 Simulación mediante PROTEUS, ejecución de la subrutina de interrupciones: CCFF D.P.E. MÓDULO DE PROYECTOS 18 Simulación mediante PROTEUS, ejecución de la subrutina de interrupciones: CCFF D.P.E. MÓDULO DE PROYECTOS 19 En el ejercicio que acabamos de realizar, cada vez que accionamos el pulsador solo se produce una interrupción, esto es debido a que el tiempo que lo mantenemos pulsado es inferior a los 2 segundos de retardo que hemos introducido el la rutina de atención a las interrupciones. Sobre el circuito de Proteus, si hacemos que el pulsador esté presionado dure mas de 2 segundos, y cuando se haya retornado al programa principal soltamos el button, comprobaremos que se salta otra vez a la rutina de interrupciones, esto es debido a que realmente se producen dos cambios de nivel, uno cuando pulsamos (el pin lo forzamos a valer 0) y otra al soltarlo, en que pasa a valer 1 (estado de reposo). Tenga esto en cuenta para posibles aplicaciones. CCFF D.P.E. MÓDULO DE PROYECTOS 20