Autor Tema: menu ciclico  (Leído 7808 veces)

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

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
menu ciclico
« en: 03 de Febrero de 2009, 11:49:25 »
hola denuevo primero que todo queria pedir perdon por la cantidad de post que echo ultimamente pero tengo algunos dramas con lo que estoy asiendo. bueno les comento que nesesito hacer un menu que al seleccionar la opcion y al momento que se ejecute la intruccion este sea ciclica o mejor dicho que se ejecute infintas veses, me expreso mejor yo creo poniendo un ejemplo de lo que digo pero este no se por que no entra a la opcion del if.
a por otra parte mensiono que estoy trabajando con el pic 16f877A y el compilador CCS C.

ahora bien:
printf("escoja menu");
printf("opcion 1: boton PIN_A0");
printf("opcion 2: boton PIN_A1");
printf("opcion 3: boton PIN_A2");
/* este es bien simplificado por que esto lo tengo que poner o mejor dicho que se visualise en una pantalla LCD pero para efecto del caso y como ejemplo yo creo que esta bn XD*/

if(!input(PIN_A0)){
for(;;){
aqui tendria que ejecutarce la opcion numero 1`
}}

if(!input(PIN_A1)){
for(;;){
aqui tendria que ejecutarce la opcion numero 2`
}}

if(!input(PIN_A2)){
for(;;){
aqui tendria que ejecutarce la opcion numero 3`
}}

.
.
.
.
.
FIN programa.
bueno pienso algo asi pero el punto es que no me quiere entrar a los if a la hora que presiono la opcion correspondiente.
bueno tambien lo intente poniendo switch y tampoco me da o entra al la opcion que corresponde al menu alguien tiene alguna idea de como hacerlo.
para que me entiendan un poco mejor nesesito hacer esto por que estoy controlando un par de motores PAP y con distintas funciones, y para esto nesesito tener en cada opcion que en la rutina se ejecute infinitas veses.
no quiero cambiar el programa por que ya lo tengo listo, me finciona por separado todas la opciones pero lo unico que me falta es lo que mensiono unir todo esto por mediante un menu.
bueno espero que me puedan ayudar otro poquito XD
se que derrepente mis preguntas son bastante tontas para algunos pero vengo ase no mucho programando y estoy cada ves aprendiendo un granito de arena mas de conosimiento, e inisto en preguntar por que me abrio un mundo esto de los PIC bueno que esten bn saludos.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: menu ciclico
« Respuesta #1 en: 03 de Febrero de 2009, 15:50:13 »
Tal y como lo tienes enunciado los pulsadores envían un 1 en posición de reposo y un 0 al ser pulsados, ¿no?

Quizás lo que te falta es la comprobación continua de los "if", tal que así:

Código: [Seleccionar]
printf("escoja menu");
printf("opcion 1: boton PIN_A0");
printf("opcion 2: boton PIN_A1");
printf("opcion 3: boton PIN_A2");
/* este es bien simplificado por que esto lo tengo que poner o mejor dicho que se visualise en una pantalla LCD pero para efecto del caso y como ejemplo yo creo que esta bn XD*/

for (;;) {
if(!input(PIN_A0)){
for(;;){
aqui tendria que ejecutarce la opcion numero 1`
}}

if(!input(PIN_A1)){
for(;;){
aqui tendria que ejecutarce la opcion numero 2`
}}

if(!input(PIN_A2)){
for(;;){
aqui tendria que ejecutarce la opcion numero 3`
}}

}
.
.
.
.
.
FIN programa.



Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: menu ciclico
« Respuesta #2 en: 03 de Febrero de 2009, 19:22:53 »
hola bueno te comento despues de unos cabesazos se me ilumino la ampolleta y lo voy a ahcer con interrupciones ya lo cheque funciona de lo mejor a qui dejo el codigo y me das tu opinion al respecto y si algo se puede mejorar seria jenial XD bueno saludos

#include <16f876a.h>            //pic a utilizar
#device ADC=8
#fuses HS,NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
#use delay (clock=20000000)         //clock=20Mhz
#define use_portb_lcd TRUE         //definir portb lcd
#include<lcd.c>                  //libreria manejo lcd
#use standard_io(A)

///DECLARACION DE FUNCIONES
void opcion_1(void);      //funcion cuenta ascendente
void opcion_2(void);   //funcion cuenta descendente
void opcion_3(void);   //funcion cuenta descendente

///DECLARACION VARIABLES GLOBALES
     
///PROGRAMA
void main(void)
{
   lcd_init();         //inicializa lcd
   disable_interrupts(GLOBAL);      //todas las interrupciones desactivadas
///inicializamos el contador 

 lcd_init();         //inicializa lcd
   printf(lcd_putc,"Presione boton" );   //muestra mensaje inicio
do{
    if(!input(PIN_A0)){                  //¿se ha pulsado el boton?
         do{                           //SI -> eliminar...           
         }while(!input(PIN_A0));            //...rebotes del boton
     
     opcion_1();
   }
    if(!input(PIN_A1)){                  //¿se ha pulsado el boton?
         do{                           //SI -> eliminar...           
         }while(!input(PIN_A1));            //...rebotes del boton
     
     opcion_2();
   }
    if(!input(PIN_A2)){                  //¿se ha pulsado el boton?
         do{                           //SI -> eliminar...           
         }while(!input(PIN_A2));            //...rebotes del boton
         
     opcion_3();
   }   
}while(TRUE);
}

void opcion_1(void)                  //funcion cuenta ascendente
{     lcd_init();         //inicializa lcd 
for(;;){
  printf(lcd_putc,"Driver Motor PAP_1");
}}

void opcion_2(void)                  //funcion cuenta descendente
{lcd_init();         //inicializa lcd
for(;;){
 printf(lcd_putc,"Driver Motor PAP_2");
}}

void opcion_3(void)                  //funcion cuenta descendente
{lcd_init();         //inicializa lcd
for(;;){
 printf(lcd_putc,"Driver Motor PAP_3");
}}

Desconectado juansi

  • PIC16
  • ***
  • Mensajes: 102
Re: menu ciclico
« Respuesta #3 en: 03 de Febrero de 2009, 20:41:30 »
 ¿has probado con una variable?
seria algo asi:
int menu=0,
    .
    .
    .
void main(void)
{
if(menu==0){
......
}
if(menu==1){
.......
}
if(menu==2){
..........
}
.
.
.
.
.
.
}
Las mujeres quieren "SOLUCIONES", y los hombres lo mismo pero escrito al reves.

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
Re: menu ciclico
« Respuesta #4 en: 03 de Febrero de 2009, 20:45:21 »
japifer, tu problema es el mismo que el mio gracias a la ayuda de este foro y otro del cual participo he podido (por lo menos en parte a resolver mi problema) mirá que en tu programa en la parte principal (void main) solamente te encargas de mirar el menú . Ahora esto lo podés mejorar un poco usando interrupciones para que en el programa se ejecuten otras tareas que tenga que hacer el micro y no desperdicie el tiempo.

Bueno acá te dejo mi "posible solución" que por ahora funciona bien pero le hace falta mejorar un par de cosas.

espero te sirva  :)


 

anything