Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Interrupciones Del Pic 16f877a PDF
Interrupciones Del Pic 16f877a PDF
Contiene los bits que permiten (1) o prohiben (0) las interrupciones provocadas por
los periféricos internos del microcontrolador y que no estaban contempladas en
INTCON.
Ocupa la dirección 8Ch y para que cumplan su función los bits de PIE1 es
necesario que PEIE=1 en INTCON <6>. El bit PSPIE solo es valido en los
modelos de 40 pines, manteniéndose a 0 en los que tienen 28 pines.
Note 1: PSPIE is reserved on PIC16F873A/876A devices; always maintain this bit clear.
Contiene los bits de permiso de interrupción de las tres causas que no figuran en
PIE1. La de fin de escritura en la EEPROM, colisión de bus en el modo SSP y
producción de una captura o una comparación en el módulo CCP2.
Lógica de Interrupciones:
Simular un programa que trabaja la interrupción RB0/INT para ir acumulando
los flancos de subida que vayan ingresando por el pin RB0.
list p=16f877
include "p16f877.inc"
BUCLE
nop ;No operacion
nop
goto BUCLE ;Ir a BUCLE
END
Introducción
Una interrupción, como el nombre lo sugiere, es un evento que hace que el
microcontrolador deje de realizar lo que está haciendo y pase a ejecutar otra
tarea. Al finalizar retorna a su actividad inicial.
El PIC16F88 tiene hasta 12 fuentes de interrupciones PIC, el PIC16F628A tiene
10 y el PIC16F877A tiene 15. El registro INTCON (figuras 7.1.1 y 7.1.2)
contiene las banderas de interrupciones generadas por diferentes eventos.
También contiene los bits de habilitación global y particular de las distintas
fuentes de interrupción (observar las diferencias en algunos bits de este registro a
lo largo de los siguientes temas).
Las banderas de interrupciones PIC se activan independientemente del estado de
sus bits de habilitación o del bit de habilitación global GIE.
El bit GIE del registro INTCON permite habilitar o deshabilitar la generación de
interrupciones. Cuando están habilitadas (GIE=1) y el bit de habilitación
particular y la bandera correspondiente se activan, se produce un salto al vector
de interrupción (dirección 0x0004). Las interrupciones individuales pueden
habilitarse/deshabilitarse a través de sus bits de habilitación en diferentes
registros. El bit GIE se borra al producirse un reset, por lo tanto la generación de
interrupciones está deshabilitada normalmente.
La instrucción RETFIE se emplea para salir de la rutina de servicio a la
interrupción (ISR), así como rehabilitar la generación de interrupciones.
Las banderas de las interrupciones INT, RB y del Timer0 se encuentran en el
registro INTCON. Las banderas de interrupción de los periféricos están
contenidas en los registros PIR1 y PIR2 (16F877A), mientras que los bits de
habilitación correspondientes se encuentran en los registros PIE1 y PIE2
(16F877A). El bit de habilitación de interrupciones de periféricos (PEIE) está en
el registro INTCON.
Interrupción INT
La interrupción externa en el pin RB0/INT se activa por flanco ascendente o
descendente, dependiendo del bit INTEDG del registro OPTION_REG. Cuando
aparece una transición válida en el pin RB0/INT, la bandera INT0IF del registro
INTCON toma un valor de 1. Esta interrupción puede ser habilitada/deshabilitada
con el bit INT0IE del registro INTCON. La bandera INT0IF tiene que ser
borrada por software dentro de la ISR antes de rehabilitar esta interrupción. La
interrupción INT puede despertar al PIC, si el bit INT0IE se programó en 1 antes
de ingresar al modo Sleep. El estado del bit GIE determina si se produce o no el
salto al vector de interrupción después del despertar (los detalles aparecen en las
secciones 6.11 MODO DE BAJO CONSUMO (Sleep) PIC16F88 o 6.19
MODO DE BAJO CONSUMO (Sleep) PIC16F628A y PIC16F877A del
libro).
void interrupt(void);
Lo único que el usuario tiene que hacer es escribir la definición de esta función
(rutina de servicio a la interrupción ISR) para manejar interrupciones en la
aplicación que esté desarrollando. mikroC se encarga de salvar y recuperar de la
pila (stack) los registros W, STATUS, FSR y PCLATH.
//INT1.c
//Declaración de las 12 variables necesarias para la conexión
//del módulo LCD.
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
void main(){
OSCCON=0x40; //Oscilador interno a 1MHz.
while (OSCCON.IOFS==0);//Esperar mientras el oscilador está inestable.
ANSEL=0x00; //Bits AN6:AN0 como E/S digital.
GIE_bit=1; //Interrupciones habilitadas.
NOT_RBPU_bit=0; //Pull ups habilitados.
INTEDG_bit=0; //INT por flanco descendente.
void interrupt(void)
{
Delay_ms(20);
if (RB0_bit==0) contador++; //Pulsador presionado.
while (RB0_bit==0); //Esperar mientras siga presionado.
if (contador >100) contador=0;
INTF_bit=0;
}
Interrupciones PIC16F877A
INTERRUPCIONES PARA EL PIC 16F877A
Una subrutina de interrupción es aquella que se ejecuta cada vez que se solicita una
interrupción.
Hasta la opción 4 las tiene el PIC 16F84A, uno de los PICS de la familia 16FXX. Iniciaremos
con la opción 1: interrupción por la terminal RB0.
Es un registro de lectura y escritura que se encuentra en los cuatro bancos de memoria del PIC,
ocupando las direcciones 0x0Bh, 0x8Bh, 0x10Bh, 0x18Bh. Tiene la misión de ser usado para
controlar las interrupciones provocadas por el TMR0, cambio de estado en las cuatro líneas de
más peso del puerto B y activación de la terminal RB0/INT. GIE es el bit de permiso global de
todas las interrupciones.