Autor Tema: problemas con reseteo del pic16f877  (Leído 2115 veces)

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

Desconectado hqv

  • PIC12
  • **
  • Mensajes: 70
problemas con reseteo del pic16f877
« en: 10 de Julio de 2005, 03:16:00 »
Hola amigos del foro:

Les cuento lo que me pasa. estoy realizando un programa que utilice las interrupciones ext y rda...el programa es el siguiente:

#include  <16f877.h>
#use delay(clock=4000000)
#use rs232(baud=9600,xmit=PIN_C6, rcv=PIN_C7)
#fuses XT,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT
#include <stdlib.h>


//////////////////////////////////////////////
//         VARIABLES GLOBALES            //
//////////////////////////////////////////////


int x=1;// variable global
int y=0;
unsigned long int ton=0;
unsigned long int toff=0;

//////////////////////////////////////////////

#int_ext
encendido(void)
{
printf("valor x= %d
", x );
switch(x)
   {
   case(1)://ENCENDIDO
      {
      output_high(PIN_A5);//indica encendido equipo
   
      output_low(PIN_A0);// APAGA PIN QUE INDICABA APAGADO
      x=0;
      y=1;//para emtrar al while   
      ext_int_edge(H_to_L);//   interrupcion ALTO a BAJO
      output_high(PIN_D2);//  Habilita switch cmos recepción
      enable_interrupts(int_rda);
      printf("sali con x= %d e y= %d
",x,y);
      printf("
Tiempo de encendido: "Giño; // pregunta tiempo de encendido
      break;
      }
   case(0)://APAGADO
      {
      output_low(PIN_D2);//deshabilita switch cmos recepción
      delay_ms(10);
      output_low(PIN_A5);
      output_High(PIN_A0);// indica apagado equipo
   
      x=1;
      ext_int_edge(L_to_H);//interrupcion BAJO a ALTO
      disable_interrupts(int_rda);
      printf("sali con x=%d
",x);
      break;
      }
   }//Fin switch

return 0;
}//Fin interrupción ext encendido


#INT_RDA
rsis(void)
{
char string[20];

gets(string);
ton=atol(string);
printf("%u
",atol(string));

printf("
Tiempo de apagado1: "Giño;
output_high(pin_b3);
gets(string);
output_low(pin_b3);
toff=atol(string);

printf("%u
",atol(string));

printf("
Tiempo de encendido1: "Giño;
return 0;
} //fin interrupcion Transmision/Recepcion



///////////////////////////////////////////////////////


///////////////////////////////////////////////////////
//            INICIO MAIN                     ///
///////////////////////////////////////////////////////   

void main(void)
{//INICIO MAIN
unsigned long int z; //recepcion



set_tris_a(0b00000001);//todas salidas
output_a(0b00010001);// RA= alta indica apagado equipo
setup_adc_ports(NO_ANALOGS);// todas digitasles

set_tris_b(0b00000001);// RB0 entrada resto salidas

output_low(PIN_B1);
output_low(PIN_B2);
output_low(PIN_B3);
output_low(PIN_B4);
output_low(PIN_B5);
output_low(PIN_B6);
output_low(PIN_B7);

set_tris_d(0x00);// toas salidas
output_d(0x00);//todas bajas

enable_interrupts(int_ext);
ext_int_edge(L_to_H);
enable_interrupts(GLOBAL);

printf("
Inicio MAIN
"Giño;

while(y==1)
   {
   for(z=0; z<ton; z++)
      {
      output_high(pin_b7);
      output_high(pin_b6);   
      output_high(pin_b5);
      output_high(pin_b4);
      
      delay_ms(1000);  
      }
      output_low(pin_b7);
      output_low(pin_b6);   
      output_low(pin_b5);
      output_low(pin_b4);   

      for(z=0; z<toff; z++)
      delay_ms(1000);
         
   } //fin  while


}// FIN MAIN

al programa lo voy revisando con el Hyper terminal.....y pasa lo siguiente:

manda el primer mensaje Inicio main.....luego hago saltar la interrupción y entra en ella y me imprime lo siguiente:" VALOR X:1" , "Sali con x=0 e y =1" y el otro "tiempo de encendido:"

aqui es donde se me produce el primer problema cuando introduzco por ejemplo un 2 no lo guarda lo que guarda es 0, esto lo compruebo ya que imprimo el valor guardado en la variable string, luego me pide que ingrese el tiempo de encendido....aqui si me funciona ya que al ingresar por ejemplo un 2 me imprime ese mismo valor....luego como veran en el programa aparece un último printf que dice tiempo de encendido1: trato de meter algun dato y me aparece en la pantalla del hyperterminal "Inicio MAIN".........que es el primer mensje que me manda y con ello me doy cuenta que se me reinicio el pic.....

aqui les copio lo que me manda el hyperterminal:


Inicio MAIN    /// primer inicio pic
valor x= 1
sali con x= 0 e y= 1

                             
Tiempo de encendido: 0    ingreso un 3 y me devuelve un 0
 


Tiempo de apagado1: 2     ingreso un 2 y me devuelve un 2


Tiempo de encendido1:     pregunta ingreso un número y aprieto enter
Inicio MAIN                        se recetea el pic.....


espero haber dejado claro cual eran mis dos dudas...

espero respuestas...

gracias de antemano

hq



 




 




 

anything