Autor Tema: intrerrupción  (Leído 1738 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado kidpic

  • PIC16
  • ***
  • Mensajes: 231
intrerrupción
« 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);   
     
    }

}
Si quieres trascender..., enseña humildemente  lo que sabes.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:intrerrupción
« Respuesta #1 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.

Desconectado kidpic

  • PIC16
  • ***
  • Mensajes: 231
Re:intrerrupción
« Respuesta #2 en: 01 de Septiembre de 2020, 14:29:03 »
Gracias killerjc solucionado. Además en la interrupción leo el pin b0.  :-/
Si quieres trascender..., enseña humildemente  lo que sabes.