Autor Tema: Regresar al mismo punto de partida  (Leído 1297 veces)

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

Desconectado badtzdizzy

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 234
Regresar al mismo punto de partida
« en: 22 de Noviembre de 2005, 20:43:00 »
Hola

Estoy realizando un programa para controlar un motor en este caso yo espero un caracter por el puerto serie y lo almaceno en una variable, posteriormente esta variable me ayuda para elegir de entre 3 opciones. Lo que me gustaría saber es qué función me ayudaría de tal forma que al salir de alguna de esas opciones, el programa me lleve de nuevo al punto del cual partí, o sea, a esperar un caracter desde el puerto serie.

De antemano gracias.

Desconectado pikman

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 679
RE: Regresar al mismo punto de partida
« Respuesta #1 en: 23 de Noviembre de 2005, 03:42:00 »
Bueno, deberias usar el swicth algo asi, entoces el programa se quedara esperando que llegue algo por el puerto serie y cuando llegue carga de acuerdo a lo que enviaste, despues lo procesas ajusta el motor y vuelves a esperar por un caracter, esto es muy basico, lo ideal es que uses la interrupcion de puerto para independizarte del loop pincipal la lectura del puerto serie.

espero te ayude.

saludos

ARIEL



while(true){

 selector=getc();

 switch (selector) {

                  case  "a":
                  velocidad=1
                  break;

                  case  "b":
                  velocidad=2
                  break;

                  case  "c":
                  velocidad=3
                  break;

                default:
                  break;
               }

      aqui agrega tu rutina de control
      de velocidad para el motor();

}
saludos
PikMan

Desconectado badtzdizzy

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 234
RE: Regresar al mismo punto de partida
« Respuesta #2 en: 27 de Noviembre de 2005, 13:29:00 »
Mira, mas o menos lo que tengo es esto:

Codigo:

while(!kbhit()); //Espera la recepcion de un caracter
valor=getc();

switch (valor)
{
case "h":
break;
case "a":
break;
case "j":
putc("8");
//Para el programa de adquisición
while(!kbhit()); //Espera la recepcion de un caracter
muestrashigh=getc();
while(!kbhit()); //Espera la recepcion de un caracter
muestraslow=getc();
while(!kbhit()); //Espera la recepcion de un caracter
periodohigh=getc();
while(!kbhit()); //Espera la recepcion de un caracter
periodolow=getc();   
muestras=(muestrashigh*256) + muestraslow;
periodo=(periodohigh*256) + periodolow;
      
conteo=periodo;
            
//Para el control del motor
         
while(!kbhit()); //Espera la recepcion de un caracter
datoalto=getc();
while(!kbhit()); //Espera la recepcion de un caracter
datobajo=getc();
while(!kbhit()); //Espera la recepcion de un caracter
corriente=getc();
while(!kbhit()); //Espera la recepcion de un caracter
giro=getc();
while(!kbhit()); //Espera la recepcion de un caracter
paso=getc();
              
freqmot=(datoalto*256)+datobajo;
            
output_b(corriente);
               
if (giro=="i")
{
output_bit(PIN_D5,1);
}
if (giro=="d")
{
output_bit(PIN_D5,0);
}
if (paso=="m")
{
output_bit(PIN_D4,1);
}
if (paso=="c")
{
output_bit(PIN_D4,0);
}
            
retardo=freqmot;
            
output_bit(PIN_D7,1);            
            
setup_counters(RTCC_INTERNAL,RTCC_DIV_256);
set_rtcc(62);  //para un T=10 ms  
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
set_timer1(60536);   // para un T=1 ms
enable_interrupts(INT_RDA);
enable_interrupts(INT_TIMER1);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
while(TRUE);
{
}
break;
default:
break;
}



Los primeros dos case me sirven para posicionar el motor y una vez hecho esto entonces mediante el ultimo case cargo la informacion necesaria para iniciar el proceso. Mi duda estaba en saber si al salir de alguno de los case automáticamente me regresaria a la parte desde donde inicie o sea esperar el dato a cargar en la variable valor. No utilizo la interrupcion por el puerto ya que esa la estoy utilizando mas adelante. Por favor checa mi código y dime si tengo algun error. De antemano gracias.