Practica Numero 9. PIC Interrupciones.
Practica Numero 9. PIC Interrupciones.
Practica Numero 9. PIC Interrupciones.
FACULTAD DE INGENIERIA
ESCUELA INFORMATICA
CATEDRA DE ARQUITECTURA DEL COMPUTADOR
Ing. Biagio Cante Mata
PRACTICA #9
DESARROLLO
• Por el pin RB0/INT, que regresa al PIC del modo SLEEP (interrupción externa).
• Por los pines RB4 a RB7, configurados como entrada y en caso de que alguno de
ellos cambie de estado (interrupción externa).
• Por desbordamiento del registro TMR0, cuando este registro pasa de 255 a 0 en
decimal ó 0xFF a 0x00 en hexa (interrupción interna).
• Al completar la escritura de la EEPROM de datos (interrupción interna).
Debe haber algo que nos indique la fuente de interrupción que se ha producido, y estas
son las banderas de interrupciones, cada interrupción tiene su propia bandera y es un bit
del registro INTCON, que cambia de estado de 0 a 1 cuando se produce la interrupción,
salvo la última que se encuentra en el registro EECON1
El Bit GIE habilita todas las interrupciones, Los Bit's de fondo gris son las banderas,
y los BIT's que se corresponden con cada flag son la habilitación de la fuente de
interrupción para que esta cambie, recuerda que el flag de EEIE se encuentra en el
registro EECON1.
Por cierto y antes de que lo olvide, si bien cada flag cambia o se pone a 1 al
producirse una interrupción, es tarea de usted borrarlo o ponerlo a cero nuevamente, ya
que si no lo haces el micro estará siempre interrumpido o lo que es lo mismo, creerá que
la interrupción se está produciendo continuamente.
Lo primero que debes saber, es que cuando una interrupción se produce, sea cual
fuere la fuente de interrupción, el micro deja todo y salta a la dirección 04H, éste es el
vector de interrupción, en esta dirección es donde escribiremos la rutina que dé servicio a
todas las interrupciones, o bien haremos un salto a donde se encuentre ese trozo de
código, el cual se conoce como ISR (Rutina de Servicio de Interrupción)
El Tiempo de Procesamiento de la ISR debe ser lo más breve posible, para dar
lugar a que se ejecuten las otras interrupciones, ya que puedes haber habilitado más de
una de ellas.
Lo más crítico de una interrupción es tener que guardar todos los registros
importantes con sus respectivos valores, para luego restaurarlos, y así el micro pueda
continuar con la tarea que estaba realizando cuando fue interrumpido.
Vamos a realizar un programa que una vez generado una interrupción no lo indicara
con el encendido de un diodo led, mientras no se ejecute esta interrupción el programa se
encontrara realizando una rutina en la cual haremos que se muestre en un display una
letra (La letra P), pero cuando llegue la interrupción mostrara otra letra (La letra H). Para
que salgamos de la interrupción debemos de presionar otro pulsador el cual será el
apagara el flag y dará fin a la interrupción. Utilizaremos la interrupción del puerto PB0.
Únicamente del registro OPTION, tomaremos el Bit 6 (INTEDG) el cual nos indicara
de que forma se activara la interrupción externa:
+5V
R4 R3
v erde R1 1K 1K
17 6 Interrupcion
18 RA0 RB0/INT 7
LED 150 ohm 1 RA1 RB1 8
2 RA2 RB2 9 SW2
C1 3 RA3 RB3 10
RA4/TOCKI RB4 11
16 RB5 12
15 OSC1/CLKIN RB6 13 salir de interrupcion
22pF 4MHz OSC2/CLKOUT RB7
4
C2 MCLR
14
VDD
22pF PIC16F84
SW3
reset 1K
+5V
Haciendo clic en program file, se despliega una ventana donde vamos a buscar en la carpeta
donde tenemos nuestro archivo .HEX y procedemos luego con la opción de abrir y luego sin
modificar ninguna de la opciones de la ventana anterior presionamos aceptar.
Por ultimo iniciamos la simulación y probamos nuestro circuito: