Autor Tema: Problemas con submenus  (Leído 5049 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Tempus

  • PIC10
  • *
  • Mensajes: 37
Re: Problemas con submenus
« Respuesta #15 en: 19 de Febrero de 2009, 17:03:20 »
al final me queda asi

#include <16F876.h>
#device adc=8
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz
#FUSES PUT                      //Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection

#use delay(clock=4000000)
#define use_portb_lcd TRUE
#include <lcd.c>

///DEFINICION DE FUNCIONES   
void configurar(void);
void choras(void);               
void cminutos(void);
int segundos,minutos,horas,temperatura;
int seg=0;
byte menu=0,flag=0,var=2;         //variables para menu configurar

  //********************* //INTERRUPCION//************************************\\
       
#int_rtcc                             //Habilita interrupción timer0
void interrupt_timer(void){
   seg++;
   if(seg==125){                    //Condición de cambio
      segundos++;                  // cuenta 1 segundo
      seg=0;                      //reiniciar cuenta
   }
   set_timer0(131);  //Inicializa Timer0
}

void main(void){
   setup_adc_ports(RA0_ANALOG);                  // configura RA0 como entrada analogica
   set_tris_a(0xff);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_64);  //Configura timer0 y prescaler
   set_timer0(131);                          //Inicializa timer0
   enable_interrupts(INT_RTCC);             //Habilita interrupción timer0
   enable_interrupts(GLOBAL);              //Habilita Interrupciones
   lcd_init();// inicializa el LCD
   set_adc_channel(0);
   delay_us(20);
   
     lcd_putc("Comedero Peces\nPino & Azparren" );   //presentacion...
     delay_ms(4000);                           
   while(true)
   {
      temperatura=read_adc();//lee valor analogico
      if(segundos>59)
      {
         segundos=0;
         minutos++;
         if(minutos>59)
         {
            minutos=0;
            horas++;
            if(horas>24)
               horas=0;
         }
      }
         lcd_init();          //inicializa lcd
     
         printf (lcd_putc,"\f%02u:%02u:%02u  T:%d%cC\n H.COMIDA: 13:45" ,horas,minutos,segundos,temperatura*2,0xdf);
         delay_ms(100);
   }
}
      ///FUNCION CONFIGURAR
void configurar(void){

   disable_interrupts(GLOBAL);               //desactivadas interrupciones
   
   
      switch(menu){
         case 0:   lcd_putc("fConfigurar horas?" );      //horas

               if(!input(PIN_A3))
               {
                  while(!input(PIN_A3)){}
                  choras();
                  menu=1;                     

               }
               break;
         case 1: lcd_putc("fConfigurar minutos?" );      //minutos

               if(!input(PIN_A3))
               {
                  while(!input(PIN_A3))
                  cminutos();
                  menu=2;     
               }   

me compila bien pero a la hora de simular en proteus ummm no hace nada  vosotros veis alg fallo d progrmacion

adjunto c y mi proteus

Desconectado cerebro

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
Re: Problemas con submenus
« Respuesta #16 en: 19 de Febrero de 2009, 19:19:12 »
es muy logico lo que te sucede

///DEFINICION DE FUNCIONES  
byte menu=0,flag=0,var=2;         //variables para menu configurar
      
esa variable menu no la modificas nunca... lo que si entrara a configurar haria siempre lo mismo

segundo

Código: [Seleccionar]
                           
   while(true)
   {
      temperatura=read_adc();//lee valor analogico
      if(segundos>59)
      {
         segundos=0;
         minutos++;
         if(minutos>59)
         {
            minutos=0;
            horas++;
            if(horas>24)
               horas=0;
         }
      }
         
este bucle esta definido infinito la unica forma de salir del mismo es mediante una interrupcion, se entiende porque actualiza el reloj pero no el menu...

Código: [Seleccionar]
      ///FUNCION CONFIGURAR
void configurar(void){

   disable_interrupts(GLOBAL);               //desactivadas interrupciones
   
   
      switch(menu){
         case 0:   lcd_putc("fConfigurar horas?" );      //horas

               if(!input(PIN_A3))
               {
                  while(!input(PIN_A3)){}
                  choras();
                  menu=1;                     

               }
               break;
         case 1: lcd_putc("fConfigurar minutos?" );      //minutos

               if(!input(PIN_A3))
               {
                  while(!input(PIN_A3))
                  cminutos();
                  menu=2;     
               }   


a esta funcion nunca estas entrando..... y las resistencias deberias colocarlas como el esquema adjunto...

saludos




Y AHORA ME VOY A JUGAR AL FALLEN EARTH, que tengo la closed beta y no la voy a desperdiciar.  :mrgreen:

 :D no conocia ese juego se ve que hace mucho tiempo que no juego a nada.... asi que andas matando bichitos  :D




edit: este mensaje lo habia mandado mucho antes y no lo publico  :shock:
LAS MALVINAS SON ARGENTINAS!