Autor Tema: problema con interrupcion externa RB0 y interrupcion RB4-RB7  (Leído 2916 veces)

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

Desconectado mimison3012

  • PIC10
  • *
  • Mensajes: 11
problema con interrupcion externa RB0 y interrupcion RB4-RB7
« en: 10 de Marzo de 2013, 15:45:26 »
buenas estoy haciendo un programa en ccs compiler de una alarma que cuando unos sensores detecten algo se activen unas cargas. ya tengo cuatro sensores conectados en RB4,RB5,RB6,RB7 estos seran sensados por la interrupcion de estos bits, y activen las cargas ya mencionadas. pero tambien quiero colocar un boton para apagar las cargas en cuanto uno regrese a la habitacion donde este instalada la alarma, el problema es que la interrupcion RB_ISR no me deja hacer esto si bien sensa mis entradas y activa las cargas y sale de esa interrupcion y continua con el programa, la interrupcion RB0 no me funciona, hice una subrutina aparte para poder apagar las cargas sin usar el RB0 pero aun asi tengo problemas con el RB_ISR. No se que pueda hacer, les dejo mi programa para que lo revisen.


#include "F:\PCW_CCS_LENGUAJE C_PIC\ALARMA.h"

//////////////////////////////
//INTERRUPCION POR RB
/////////////////////////////

#int_RB
void  RB_isr(void)
{
 delay_ms(20);
 output_B(input_B());
 output_high(SIRENA);
 output_high(CIRCULINA);
 output_high(LUCES);
}

////////////////////////////////
//INTERRUPCION POR RB0
///////////////////////////////


//#int_EXT
void  EXT_isr(void)
{
 delay_ms(20);
 output_low(SIRENA);
 output_low(CIRCULINA);
 output_low(LUCES);
}


//////////////////////////////
//PROGRAMA PRINCIPAL
/////////////////////////////

void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   enable_interrupts(INT_RB);
   enable_interrupts(INT_EXT);
   enable_interrupts(GLOBAL);

   // TODO: USER CODE!!


while(TRUE){
output_toggle(LED);   // USO ESTE LED PARA VERIFICAR SI EL PROGRAMA SALE DE LA SUBRUTINA O SE QUEDA ENGANCHADA
delay_ms(200);

/////////////////////////////////////////////////////////////////
//RUTINA PARA APAGAR CARGAS EN VEZ DE USAR RB0
/////////////////////////////////////////////////////////////////

//if(input(PIN_B0)==0)
//{
 //delay_ms(20);
 //output_low(SIRENA);
 //output_low(CIRCULINA);
 //output_low(LUCES);
//}
////////////////////////////////////////////
///////////////////////////////////////////

}
     
}




Desconectado sirias52

  • PIC10
  • *
  • Mensajes: 40
Re: problema con interrupcion externa RB0 y interrupcion RB4-RB7
« Respuesta #1 en: 10 de Marzo de 2013, 17:28:33 »
Cheka con este codigo muy seguro de que te funcionara.

saludos

Citar
#include <16f876A.h>         //pic a utilizar         
                 
#FUSES NOWDT                   
#FUSES XT                       
#FUSES NOBROWNOUT           
#FUSES NOLVP                   

#use delay(clock=4000000)

#define SIRENA         PIN_A0
#define CIRCULINA      PIN_A1
#define LUCES          PIN_A2
#define STROBE         PIN_A3
#define LED            PIN_C0


/*#INT_RB
void  RB_isr(void)
{
int aux; //Declaracion de la variable aux.
 output_bit(SIRENA,input(PIN_B7)); //Hacemos que RA0 sea igual a RB7.
 output_bit(CIRCULINA,input(PIN_B6));
 output_bit(LUCES,input(PIN_B5));
 output_bit(STROBE,input(PIN_B4));
 aux=input_B();
}*/

#INT_RB
void  RB_isr(void)
{
int aux;
 delay_ms(20);
 output_high(SIRENA);
 output_high(CIRCULINA);
 output_high(LUCES);
 output_high(STROBE);
 aux=input_B();
}
#int_EXT
void  EXT_isr(void)
{
 delay_ms(20); 
 output_low(SIRENA);
 output_low(CIRCULINA);
 output_low(LUCES);
 output_low(STROBE);
}

void main()
{

 enable_interrupts(INT_RB);
 enable_interrupts(INT_EXT);
 enable_interrupts(GLOBAL);
 set_tris_b(0xFF); 
 output_a(0x00);

while(TRUE){
output_toggle(LED);   
delay_ms(200);

}
     
}

La interrupcion RB que esta comentada funciona para ver los estados del puerto RB en el puerto RA, pero de cualquier forma el codigo resuelve tu problema.

saludos colega.
« Última modificación: 10 de Marzo de 2013, 17:37:59 por sirias52 »

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: problema con interrupcion externa RB0 y interrupcion RB4-RB7
« Respuesta #2 en: 10 de Marzo de 2013, 17:30:49 »
Lee el puerto b al final de la interrupción rb para que limpie la interrupción
puedes usar input_b() para hacerlo
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado sirias52

  • PIC10
  • *
  • Mensajes: 40
Re: problema con interrupcion externa RB0 y interrupcion RB4-RB7
« Respuesta #3 en: 10 de Marzo de 2013, 17:50:10 »
Si solo ese detalle le faltaba al colega ppyote  :mrgreen:
« Última modificación: 10 de Marzo de 2013, 17:55:22 por sirias52 »

Desconectado lucaspascual

  • PIC10
  • *
  • Mensajes: 31
Re: problema con interrupcion externa RB0 y interrupcion RB4-RB7
« Respuesta #4 en: 07 de Mayo de 2013, 17:17:27 »
me parece q no especificas q tipo de flanco queres q se produzca la interrupcion. puede ser con ext_INT_edge(l_to_h); o ext_INT_edge(h_to_l);