Autor Tema: Problema con interrupcion externa en PIC 16F886  (Leído 2015 veces)

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

Desconectado megadigit

  • PIC10
  • *
  • Mensajes: 15
Problema con interrupcion externa en PIC 16F886
« en: 17 de Noviembre de 2009, 16:42:04 »
Que tal, tengo un problemilla y espero alguien me pueda ayudar:

Veran, intento implementar la interrupcion externa en el pic 16F886, pero cuando alimento el PIC a la fuente de inmediato se dispara dicha interrupcion, he conectado una resistencia pull up, en el pin RB0, y un interruptor a tierra, de manera que cuando presione el interruptor se active la interrupcion, pero esto nunca pasa siempre se dispara al conectarlo a la fuente de alimentacion.

Les dejo el codigo para que lo chequen y me digan si algo esta mal.
Código: [Seleccionar]
#include<16f886.h>
#fuses XT,NOWDT,NOPROTECT,NOPUT,NODEBUG
#use delay(clock=4000000)

int disparo=0; //Inicializo el valor de disparo

#byte TRISB=0x086
#byte PORTB=0x006

#INT_EXT
void ext_isr()
{
   disparo=1;
}

void main()
{
   //----------------
   set_tris_B(0x01);
   //----------------
   bit_clear(PORTB,3); //Limpio el pin del puerto
   //----------------
   enable_interrupts(INT_EXT); //Habilito la interrupcion externa
   ext_int_edge(H_TO_L); //Le digo que el disparo sera de alto a bajo
   enable_interrupts(GLOBAL); //Y habilito las interrupciones de manera global
   //----------------
   while(1)
   {
      if(disparo==1) //Si disparo tiene el valor de true
      {
          bit_set(PORTB,3); //se enciende el bit 3 del puerto B
      }
   }
}

No se si tenga que agregar algo mas de harware, o de plano la estoy regando en el programa.
de antemano muchas gracias por su ayuda
« Última modificación: 17 de Noviembre de 2009, 16:44:10 por megadigit »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con interrupcion externa en PIC 16F886
« Respuesta #1 en: 17 de Noviembre de 2009, 16:45:29 »
Prueba reorganizando tu código y agregando el borrado del flag al iniciar:


Código: C
  1. ext_int_edge(H_TO_L); //Le digo que el disparo sera de alto a bajo
  2.    clear_interrupt(INT_EXT);
  3.    enable_interrupts(INT_EXT); //Habilito la interrupción externa
  4.    enable_interrupts(GLOBAL); //Y habilito las interrupciones de manera global

Y acuérdate de resetar disparo para el próximo evento. ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado megadigit

  • PIC10
  • *
  • Mensajes: 15
Re: Problema con interrupcion externa en PIC 16F886
« Respuesta #2 en: 17 de Noviembre de 2009, 16:58:17 »
Si parece que si era eso, muchas gracias Suky.
Le voy a hacer algunas pruebas mas pero creo que ya funciono.


 

anything