Autor Tema: devoler a una rutina  (Leído 2993 veces)

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

Desconectado deibbe

  • PIC10
  • *
  • Mensajes: 12
devoler a una rutina
« en: 13 de Septiembre de 2011, 23:27:44 »
saludos a todos.

tengo una gran duda y es como hago para devolverme a la rutina principal estando en una subrutina, es que creo que es con un return pero primero no estoy seguro porque ya lo probe y no me salio o no c si es que no lo supe utilizar, en si es que tengo un teclado y una lcd y ps hay un menu de de 3 opciones pero si yo me voy a la primera opcion como hago pa salirme de esa primera opcion y volver al menu principal

muchas gracias si me pueden colaborar.

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: devoler a una rutina
« Respuesta #1 en: 14 de Septiembre de 2011, 00:55:05 »
en que c programas?
una funcion si es del tipo void no necesitas ponerle nada, al finalizar regresa a la instruccion desde donde la llamaste
"Nada es imposible, no si puedes imaginarlo"

Desconectado deibbe

  • PIC10
  • *
  • Mensajes: 12
Re: devoler a una rutina
« Respuesta #2 en: 14 de Septiembre de 2011, 02:29:20 »
yo programo en pic c compiler

si pero es que no necesito eso porque precisamente en una de las opciones del menu es que voy a variar un potenciometro con ADC, osea cuando este en esa opcion y quiera salirme de ella, yo puedo decir que cuando pulse una tecla  me puedo salir, osea digamos con # me salgo al menu principal,  entonces esa subrutina se acaba cuando yo pulse # y hay si me voy al menu principal, la subrutina no se acaba cuando se termine la funcion que se este ejecutando en la subrutina si no cuando yo le diga, ese es mi problema.

muchas gracias si me podeis ayudar.

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: devoler a una rutina
« Respuesta #3 en: 14 de Septiembre de 2011, 08:45:56 »
si la funcion en la que estas la llamaste desde el main basta con que pongas un "return" y te regresara al main
"Nada es imposible, no si puedes imaginarlo"

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: devoler a una rutina
« Respuesta #4 en: 14 de Septiembre de 2011, 10:03:35 »
sin tu codigo es dificil saberlo

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: devoler a una rutina
« Respuesta #5 en: 14 de Septiembre de 2011, 11:22:04 »
yo programo en pic c compiler

si pero es que no necesito eso porque precisamente en una de las opciones del menu es que voy a variar un potenciometro con ADC, osea cuando este en esa opcion y quiera salirme de ella, yo puedo decir que cuando pulse una tecla  me puedo salir, osea digamos con # me salgo al menu principal,  entonces esa subrutina se acaba cuando yo pulse # y hay si me voy al menu principal, la subrutina no se acaba cuando se termine la funcion que se este ejecutando en la subrutina si no cuando yo le diga, ese es mi problema.

muchas gracias si me podeis ayudar.

 :z)  :mrgreen:
No contesto mensajes privados, las consultas en el foro

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: devoler a una rutina
« Respuesta #6 en: 14 de Septiembre de 2011, 12:25:43 »
yo programo en pic c compiler

si pero es que no necesito eso porque precisamente en una de las opciones del menu es que voy a variar un potenciometro con ADC, osea cuando este en esa opcion y quiera salirme de ella, yo puedo decir que cuando pulse una tecla  me puedo salir, osea digamos con # me salgo al menu principal,  entonces esa subrutina se acaba cuando yo pulse # y hay si me voy al menu principal, la subrutina no se acaba cuando se termine la funcion que se este ejecutando en la subrutina si no cuando yo le diga, ese es mi problema.

muchas gracias si me podeis ayudar.

 :z)  :mrgreen:
si entendí bien...si es el caso de un menu, obviamente tendras la tecla pulsada en alguna variable, para seguir la secuencia yo uso otra variable "apuntador" que es la que indica para que parte del menu quiero ir, entonces te quedas en el menu mientras la tecla pulsada sea distinta de '#' y si es numeral entonces modificas el apuntador para donde quieres ir
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado deibbe

  • PIC10
  • *
  • Mensajes: 12
Re: devoler a una rutina
« Respuesta #7 en: 14 de Septiembre de 2011, 13:37:52 »
#include <16f877a.h>
#device adc=10
#fuses xt,nowdt,nobrownout
#use delay (clock=4000000)
#include <lcd.c>
#include "kbd_lib.c"

char a='7',b='8',c='1',d='2';
char y=1;
signed char x=1;
char t;
int16 q;
int16 p;

void control_temperatura(){
lcd_putc("\f control de \n\ temperatura");
delay_ms(2000);

for (;;){
 
   set_adc_channel(1);
   delay_us(20);
   p= read_adc();
   p=p/2.02666666667;
   printf(lcd_putc, "\f temperatura = \n %4ld C", p );
   delay_ms(150);
   }

lcd_putc(" \f ");

}

void clave(){

lcd_putc("\f alarma \n\ ingrese clave ");
t=0;
while (t==0){t=kbd_getc();}
lcd_putc(" \f ");

while (true){
t=0;
while (t==0){t=kbd_getc();}

      if(t==0){}
      else if(t=='1'){ lcd_putc(t);}
      else if(t=='2'){ lcd_putc(t);}
      else if(t=='3'){ lcd_putc(t);}
      else if(t=='4'){ lcd_putc(t);}
      else if(t=='5'){ lcd_putc(t);}
      else if(t=='6'){ lcd_putc(t);}
      else if(t=='7'){ lcd_putc(t);}
      else if(t=='8'){ lcd_putc(t);}
      else if(t=='9'){ lcd_putc(t);}
      else if(t=='0'){ lcd_putc(t);}
      else if(t=='B'){ lcd_putc(t);}
      else if(t=='A'){ return (-2);}
}
}

void main() {

setup_adc_ports(AN0_AN1_AN3);
setup_ADC(adc_clock_internal);

lcd_init();

while(t==0){
t= kbd_getc();
lcd_gotoxy(x,y);
lcd_putc(" escoja alguna opcion: 1, 2, 3 ");
delay_ms(150);
x--;
if(x==-30){x=17;}
}

if (t=='1')
control_temperatura();

else
if (t=='2'){

lcd_putc("\f control de \n\ set point ");
delay_ms(2000);

for (;;){

   set_adc_channel(0);
   delay_us(20);
   q= read_adc();
   if (q>150){
   clave();
   }

   else

   printf(lcd_putc, "\fADC = %4ld C", q );
   delay_ms(150);

}

}

}



gracias por el interes, miren hay esta mi codigo, no lo e completado me faltan alguna cosas, y pues si se fijan en la parte de la subrutina clave pulso cualquier tecla y ps hay si puedo empezar a digitar la clave, y como ven si le doy la opcin A coloque el return pero necesito que ese return me lleve al menu principal pero no me lleva al menu principal me lleva a la parte donde se visualiza la frase alarma ingrese clave. ps si lo quieren revisar aqui les dejo la libreria kbd_lib.c, y de nuevo muchas gracias por el interes espero me puedan ayudar.

// char kbd_getc()   Devuelve el código ASCII de la tecla pulsada.
//         Si no se pulsó ninguna, devuelve 0.

// Conexiones del teclado.
/*
            RB0 RB1 RB2 RB3
             ^   ^   ^   ^
             |   |   |   |
           |---|---|---|---|
  RB4 ---> | 1 | 2 | 3 | F |
           |---|---|---|---|
  RB5 ---> | 4 | 5 | 6 | E |
           |---|---|---|---|
  RB6 ---> | 7 | 8 | 9 | D |
           |---|---|---|---|
  RB7 ---> | A | 0 | B | C |
           |---|---|---|---|
*/

// Caracteres ASCII asociados a cada tecla:
char const KEYS[4][4] = {{'1','2','3','F'},
                         {'4','5','6','E'},
                         {'7','8','9','D'},
                         {'A','0','B','C'}};

#byte kbd_port_b = 6

char kbd_getc(){
char tecla=0;
int f,c,t,i,j;
port_b_pullups(true);
set_tris_b(0b00001111); // RB7-RB4 salidas, RB3-RB0 entradas
for(f=0x10, i=0; i<4; f<<=1, i++){
    for(c=0x01, j=0; j<4; c<<=1, j++){
      kbd_port_b = ~f;
      delay_cycles(1);
      t = kbd_port_b & 0x0F;
      t = ~(t | 0xF0);
      if(t == c){
        delay_ms(20);
        tecla=KEYS[j];
        while(t==c){
          restart_wdt();
          t = kbd_port_b & 0x0F;
          t = ~(t | 0xF0);
        }
        break;
      }
    }
    if(tecla)
      break;
  }

  port_b_pullups(false);
  return tecla;
}

Desconectado deibbe

  • PIC10
  • *
  • Mensajes: 12
Re: devoler a una rutina
« Respuesta #8 en: 14 de Septiembre de 2011, 13:39:06 »
que pena el -2 que esta en el return no va hay, es solamente return;

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: devoler a una rutina
« Respuesta #9 en: 14 de Septiembre de 2011, 15:12:41 »
No se entiende que quieres hacer.
Tendras un diagrama de flujo de lo que necesita hacer tu programa??
O mejor dicho, un diagrama de flujo de lo que intentas que haga tu programa ??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.