0% encontró este documento útil (0 votos)
32 vistas17 páginas

Interrupciones en PIC16F877A: Guía Completa

Este documento explica las interrupciones en los PIC16F877A, incluyendo las causas de interrupción, la configuración de prioridades y habilitación, así como ejemplos de código en C para manejar interrupciones externas.

Cargado por

incognito Trons
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
32 vistas17 páginas

Interrupciones en PIC16F877A: Guía Completa

Este documento explica las interrupciones en los PIC16F877A, incluyendo las causas de interrupción, la configuración de prioridades y habilitación, así como ejemplos de código en C para manejar interrupciones externas.

Cargado por

incognito Trons
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd

Interrupciones

PIC16F877A
Código Ejecutandose Código Ejecutandose

Evento Externo o interno que


pausa la ejecución normal
para atender dicho evento.
Despues de atender interrupción
vuelve a la zona de memoria y
Código de Interrupción continua con la ejecución normal.
1. Peticiòn de interrupciòn
2. Se almacena la información relevante
3. Salto al vector de interrupción
4. Bloque de nuevas interrupciones
5. Identifica fuente de la interrupción
6. Ejecución de código de interrupción
7. Regreso al programa en ejecución (parte donde se quedó),
habilitación de atención a nuevas ejecuciones, restauración de
datos guardados.

* En PIC de gama Alta se asigna prioridad a la interrupción


Las interrupciones tienen un FLAG (Bit que se activa para atender
interrupción).
Enmascaramiento o habilitación de interrupciones (Si este bit esta
habilitado, va hacia el vector de interrupción cuando se activa el flag), de
lo contrario se ignorara la interrupción, aún cuando esta se habilite.

Habilitación global( GIE-ITCON 7). Si no esta a 1 no se atiende a ninguna


interrupción

Habilitación secundaria (GIE-ITCON 6) Si este bit no esta a 1, no se


atiende a las interrupciones asociadas a el.

Registro ITCON.
PIC16F877A 15 Interrupciones
Posibles Causas

 Temporizadores
 Flanco Externo
 Cambio de nivel
 Modulo CCP
 Conversión A/D
 SSP
 USART
 escritura EEPROM
 Comparador
Global Secundario
Flanco Externo
CAMBIO DE NIVEL Flanco Externo
RB7:RB4 CAMBIO DE NIVEL
RB7:RB4

FLAG TIMER 0 FLAG TIMER 0


Interrupción Flanco Externo RB0

INTF -> Flag Flanco externo en RB0


INTE -> Habilitación de interrupción por flanco externo de RB0

INTEDG-> 0 Flanco de Bajada


INTEDG-> 1 Flanco de Subida
Interrupción por cambio de Nivel <RB7:RB4>

RBIF-> Flag Flanco externo en RB0


INTE -> Habilitación de interrupción por flanco externo de RB0
Interrupciones en C
Interrupciones Descripción
#INT_AD Conversión A/D finalizado
#INT_BUSCOL Colisión del bus SSP en modo maestro i2c
#INT_CCP1 Interrupción del modulo CCP
#INT_CCP2 Interrupción del modulo CCP
#INT_COMP Interrupción del comparador
#INT_EEPROM Interrupción por escritura EEPROM
#INT_EXT Interrupción por flanco externo RB0
#INT_PSP Interrupción del puerto paralelo esclavo
Interrupciones en C

#INT_RB Interrupción por cambio de nivel RB7:RB4


#INT_RDA Interrupción por buffer de recepción USART
lleno
#INT_RTCC o #INT_TIMER0 Interrupción del timer 0
#INT_SSP Interrupción por transmisión/Recepción
completa de SSP
#INT_TBE Interrupción por buffer de tansmisión USART
vacio
#INT_TIMER0 Interrupción del timer1
#INT_TIMER1 Interrupción del timer2
Enable_interrupts(nivel);
Disable_interrupts(nivel);
PIE (INT_TIMER1,INT_TIMER2, INT_CCP1, INT_SSP, INT_RDA, INT_TBE, INT_AD, INT_PSP)

PIE2 (INT_CCP2, INT_BUSCOL, INT_EEPROM, INT_COMP)

GLOBAL (GIE-1, PIE-1), PERIPH(PEIE-1), INT_TIMER0 o INT_RTCC, INT_RB, INT_EXT


Ejemplo Interrupción RB0

 Ext_int_edge(H_TO_L) Flanco de Bajada


 Ext_int_edge(L_TO_H) Flanco de Subida

 Habilitar interrupciones
 Enable_interrupts(Global);
 Enable_interrupts(Int_ext);
 #INT_EXT
 void EXT_isr(){
 }
Código

 #int_ext //definimos el espacio para la interrupción


 void ext_isr(){ //tipo de interrupción EXTERNA
 //codigo de interrupción
 }
 int main(){
 ext_int_edge(H_TO_L); // Definimos flanco de bajada
 enable_interrupts(Global); //Habilitamos el bit GIE global para que sean atendidas las interrupciones
 enable_interrupts(int_ext); //habilitamos la interrupción secundaria indicandole el tipo(externa)

 while(1){
 //codigo que se desea
 }

 }

También podría gustarte