TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: kidpic en 31 de Agosto de 2020, 22:02:07

Título: intrerrupción
Publicado por: kidpic en 31 de Agosto de 2020, 22:02:07
Es un contador de pulsos.

el problema que se me presenta es que se incrementa " pulsos" al iniciar el programa. Se tendría que aumentar cuando se presenta un flanco descendente en RB0.  Después todo perfecto, el conteo se realiza cada vez que pasa de alto a bajo RB0. Me paso esto en otro programa y no lo pude solucionar. Alguna idea de porque sucede esto. El programa es sencillo pero no tengo una respuesta a lo que sucede. ¿ HAy algo que estoy configurando mal?.

#include <18f4620.h>
#fuses HS,NOWDT,NOLVP,NOBROWNOUT
#use delay(clock=4000000)
#include<lcdflex.c>

int8 pulsos;

//Función para la interrupción.
 
#int_ext //Activa la interrupción externa RB0.

ext_isr()
{
   
 pulsos++;
   
 }



void main(void)
{
     
 set_tris_b(0X01); //Fija el puerto RB0 como entrada y el resto como salida.
 
 enable_interrupts(GLOBAL); //Habilitación de todas(GLOBAL) las interrupciones.
 enable_interrupts(INT_EXT); //Habilita la interrupción externa por defecto es RB0
 ext_int_edge(H_TO_L);// detecta bajada de RB0
 
 lcd_init();
 lcd_putc('\f'); 
 delay_ms(200);
 lcd_gotoxy(1,1);
 lcd_putc("Contador de Pulsos");
 
    while(TRUE)
    {
       
    lcd_gotoxy(1,2);
     printf(lcd_putc,"Pulsos=%07u",pulsos);   
     
    }

}
Título: Re:intrerrupción
Publicado por: KILLERJC en 31 de Agosto de 2020, 23:35:06
limpia la bandera antes de activarlo. E inicializa la variable pulsos a 0 cuando la definis.
Título: Re:intrerrupción
Publicado por: kidpic en 01 de Septiembre de 2020, 14:29:03
Gracias killerjc solucionado. Además en la interrupción leo el pin b0.  :-/