Autor Tema: Ayuda con Interrupcion por Rb0  (Leído 1717 veces)

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

Desconectado JulioCarrillo

  • PIC10
  • *
  • Mensajes: 6
Ayuda con Interrupcion por Rb0
« en: 27 de Mayo de 2013, 21:02:12 »
Hola amigos tengo este codigo que requiero que interrumpa por rb0, pero no logro hacerla que suceda cuando cambie de estado, si no que efectua toda la rutina luego la hace. En caso de que ponga las condiciones en la ext_isr, no logro salir de ella. Alguien me ayuda, o le ha sucedido. Gracias

Dejo el codigo

#include <18F4550.h>
#use delay(internal=8M)

#fuses PLL1,INTEC_IO,NOIESO,NOPUT,NOBROWNOUT,NOWDT,NOMCLR
#define verde1 31768
#define ambar1 31769
#define rojo1  31770
#define verde2 31755
#define ambar2 31756
#define rojo2  31757
#define peaton1  31771
#define peaton2  31772
#define led    31773


#use fast_io(B)
int cont,countimer,flag,cambio,cambio1;



#int_ext
void ext_isr(){
flag=1;
     }
     
#int_timer0
void interrup_timer0(void){
SET_TIMER0(131);
countimer++;
   if(countimer==125){ // 16 equivale a un segundo**
      output_toggle(led);
      countimer=0;
      }
}
void tiempo(){ //Conteo de 10 segundos

   for(cont=0;cont<150;cont++){
      delay_ms(100);
         if(cont == 150){
            cont=0;}
            }
}

void tiempo1(){ //Conteo de 5 segundos

   for(cont=0;cont<50;cont++){
      delay_ms(100);
         if(cont == 50){
            cont=0;}
            }
}

void norte_sur(){
cambio=1;
   output_high(verde1);
   output_high(rojo2);
   output_low(ambar2);
   tiempo();
   output_low(verde1);
   output_high(ambar1);
   tiempo1();
   output_low(ambar1);
   delay_ms(500);
   output_high(ambar1);
   delay_ms(500);
   output_low(ambar1);
   delay_ms(500);
   output_high(ambar1);
   delay_ms(500);
   output_low(ambar1);
   output_low(rojo2);
}

void este_oeste(){
cambio1=1;
   output_high(verde2);
   output_high(rojo1);
   tiempo();
   output_low(verde2);
   output_high(ambar2);
   tiempo1();
   output_low(ambar2);
   delay_ms(500);
   output_high(ambar2);
   delay_ms(500);
   output_low(ambar2);
   delay_ms(500);
   output_high(ambar2);
   delay_ms(500);
   output_low(ambar2);
   output_low(rojo1);
}
void main(){
setup_oscillator(OSC_8MHZ|OSC_INTRC|OSC_PLL_OFF);
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_128|RTCC_8_BIT );
ENABLE_INTERRUPTS(INT_EXT);
ENABLE_INTERRUPTS(INT_TIMER0);
EXT_INT_EDGE(L_TO_H);
ENABLE_INTERRUPTS(GLOBAL);
SET_TIMER0(131);


set_tris_B(0x01);


while(true){

   norte_sur();
   este_oeste();
      if(flag==1 && cambio== 1){
         output_high(peaton1);
         output_high(peaton2);
         tiempo1();
         output_low(peaton1);
         output_low(peaton2);
         flag,cambio,cambio1=0;
            }
         }
     }
"La diferencia entre un hombre ordinario y un hombre esta en el extra"

Desconectado gab163

  • PIC16
  • ***
  • Mensajes: 111
Re: Ayuda con Interrupcion por Rb0
« Respuesta #1 en: 28 de Mayo de 2013, 14:36:29 »

Desconectado JulioCarrillo

  • PIC10
  • *
  • Mensajes: 6
Re: Ayuda con Interrupcion por Rb0
« Respuesta #2 en: 28 de Mayo de 2013, 22:18:39 »
Hola y gracias por la referencia. En este programa esta bien configurado me funciona, me falta trabajar en efectuarlas en distintos tiempos. Alguien que me pueda aportar mas se lo agradeceria
"La diferencia entre un hombre ordinario y un hombre esta en el extra"

Desconectado gab163

  • PIC16
  • ***
  • Mensajes: 111
Re: Ayuda con Interrupcion por Rb0
« Respuesta #3 en: 29 de Mayo de 2013, 13:00:41 »
¿como en distintos tiempos?

Desconectado JulioCarrillo

  • PIC10
  • *
  • Mensajes: 6
Re: Ayuda con Interrupcion por Rb0
« Respuesta #4 en: 30 de Mayo de 2013, 23:34:13 »
Si lo que pasa es que es un semaforo, realizara el ciclo de funcionamiento normal, al presionar un boton (int_ext) pasara a la accion del peaton pasando por preventiva, y luego al peaton, luego de ello regresa en donde al ciclo, al presionar otro boton (int_ext1) pasa los 2 en rojo para que un policia ponga multas, sigo en ello, de hecho me hace las interrupciones pero aun no me las respeta correctamente
"La diferencia entre un hombre ordinario y un hombre esta en el extra"

Desconectado gab163

  • PIC16
  • ***
  • Mensajes: 111
Re: Ayuda con Interrupcion por Rb0
« Respuesta #5 en: 31 de Mayo de 2013, 01:23:26 »
No entiendo muy bien a lo que te refieres con tiempos distintos, las interrupciones como su nombre lo indica interrmpen las acciones del micro y te llevan a realizar alguna funcion y despues de eso regresa donde estaba, lo unico que tienes que hacer es colocar el codigo correspondiente a cada accion que quieres en las funciones de interrupcion y listo. Un ejemplo aqui:

Desconectado JulioCarrillo

  • PIC10
  • *
  • Mensajes: 6
Re: Ayuda con Interrupcion por Rb0
« Respuesta #6 en: 02 de Junio de 2013, 21:47:36 »
Gracias amigo, ya esta solucionado jejeje
"La diferencia entre un hombre ordinario y un hombre esta en el extra"

Desconectado gab163

  • PIC16
  • ***
  • Mensajes: 111
Re: Ayuda con Interrupcion por Rb0
« Respuesta #7 en: 03 de Junio de 2013, 00:58:34 »
Muy bien! :mrgreen: