si (rb0==1)
{
do
{
...................
}while(true)
}
si (rb1==1)
{
do
{
...................
}while(true)
}
int funcion1;
int funcion2;
void main()
{
si (rb0==1)
{
var=1;
}
si (rb1==1)
{
var=2;
}
swich(var)
{
case 1:funcion1;
break;
case2: funcion2;
break;
}
}
Puedes forzar la salida de un bucle, usando la instrucción "break", pero vamos que si pones la condición en el "while", se saldrá automáticamente en cuanto deje de cumplirse. Si pones "while (true)", es normal que se quede ahí etérnamente.
si (rb0==1)
{
do
{
...................
}while(rb3==0)
}
si (rb1==1)
{
do
{
...................
}while(rb3==0)
}
lcd_putc("hola2");
delay_ms(500);
if(input(pin_B1)==1)
{
lcd_putc("\f");
do
{
//a=a+1;
//delay_ms(500);
printf ( lcd_putc,"cono");
}while(input(pin_B3)==0);
}
if(input(pin_B2)==1)
{
do
{
lcd_gotoxy(2,2);
b=b+3;
delay_ms(500);
printf ( lcd_putc,b);
}while(input(pin_B3)==0);
}
Detenete a analizar el código un instante.
Recorrelo por cada rama, viendo qué sucede cuando se cumple una estructura de control de flujo(if, while, for, etc).
¿Qué comportamiento estás buscando con los botones? ¿que al mantener un botón haga algo en la pantalla y al presionar el otro botón haga otra cosa distinta?
Mostra el esquema de conexión que estás usando. El error está ahí seguramente.
Siempre el procesador del uC debe ser atrapado por código controlado por ti, caso contrario se pierde el control y probablemente termine en comportamiento indeseado, resets, e incluso daños al hardware (dependiendo de los componentes con los que interactúe). Lo usual es atraparlo mediante un bucle infinito en el main, pero no es la única manera de hacerlo. Lo importante es que te asegures que el código quede siempre bajo tu control. Algunas pocas aplicaciones pueden requerir que el código no quede atrapado, y sólo duerman esperando un reset o power cycle por parte del usuario.
do
{
a=a+1;
lcd_putc("\f");
printf(lcd_putc,"valor = %u\r",a);
delay_ms(500);
}while(input(pin_B3)==0);