Autor Tema: en proteus funciona perfecto pero en la protoboard no  (Leído 2374 veces)

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

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
en proteus funciona perfecto pero en la protoboard no
« en: 05 de Octubre de 2009, 01:35:11 »
hola otra y otra vez :oops: bueno e avierto este hilo porque el que avia avierto antes se volvio un poco enrredado. les comento cual es mi problema ahora.
estoy asiendo un ingreso de clave mediante un pic16f628a y un teclado matricial 4x4 en ccs c. este codigo lo saque de los ejemplos para C del señor vszener, el cual lo e modificado para una mayor seguridad del sistema. el corazon de este codigo son 2 funciones, una para el ingreso de la clave y el otro para cambiar clave, a estas funciones se accede mediante 2 teclas, el cual son la letra A ó B del teclado, si presiono la A  esta accede a confirmar clave ingresada y, si presiono la B, es para cambiar clave.
donde este te pedira la clave actual mas la nueva clave para completar este proceso.
cuando empiesa el programa solo podras cambiar clave pero nesitas poner la clave actual que por definicion del programa es 123456, y despues de este ingreso pones tu nueva clave.
bueno todo esta super bien asta aqui y en la simulacion anda perfecto, pero lo e montado en la protoboard y me anda mal, lo que pasa que cuando quiero cambiar la clave por primera vez presiono la letra B para ingresar, pero en vez de ingresar a la funcion cambiode clave ingresa a las dos funciones al mismo tiempo y eso no deveria ser asi, por ende no me deja hacer nada mas, y si le pongo la clave por defecto esta no me la toma, anda todo mal en la practica que sera ???? bueno les dejo el codigo.
a bueno y si presiono la A pasa lo mismo me ingresaa las 2 funciones = en vez de la que corresponde. ayuda porfavor que no se que sera. y lo raro como mensiono en proteus anda del todo bien.

Código: [Seleccionar]
///DEFINICION DE FUNCIONES
void nueva_clave(void);         //funcion que cambia clave
void comprueba_clave(void);      //funcion que comprueba clave

///VARIABLES GLOBALES
char clave[16],string[16],c,limit;
signed char i,x;
boolean var=0;
float comprovarClave,password;
int a=0,b,e;

///PROGRAMA
void main(void)
{
   for(;;){   //bucle...
     
     do{               //espera hasta...
         c=kbd_getc();   
         }while(c==0);   //...pulsar una tecla
     
      if(a==0){password=123456;}
   
      if(c=='A'){
         comprueba_clave();
      } 
      if(c=='B')
         nueva_clave();
          a=1;}
       
      }      //...infinito
}
///FUNCION CAMBIAR CLAVE
void nueva_clave(void){

   for(i=0;i<16;i++){
   output_high(PIN_A0);
   output_high(PIN_A1);
      do{               //espera hasta...
         c=kbd_getc();   
         }while(c==0);   //...pulsar una tecla
         
      if(c=='D'){      //si se pulsa D se sale de la funcion
      if(comprovarClave==password){
              strcpy( clave,"                "); // borra string
              output_high(PIN_A0);
              output_low(PIN_A1);
              delay_ms(1500);
              break;}
             
         else{            //no se sale...
             strcpy( clave,"                "); // borra string
             output_low(PIN_A0);
             output_high(PIN_A1);
             delay_ms(500);
            i=-1;
            continue;         //...hasta poner una clave valida
            }
                        //salir de funcion nueva_clave
         }
     
      limit=i+1;                //longitud de la clave
      clave[i]=c;               //almacena clave(maximo 16 caracteres)
      comprovarClave=atof(clave);
      }
           
      for(x=0;x<16;x++){
         output_high(PIN_A0);
         output_high(PIN_A1);

      do{               //espera hasta...
         c=kbd_getc();   
         }while(c==0);   //...pulsar una tecla
         
      if(c=='D'){      //si se pulsa D se sale de la funcion
     
         if(x==0){            //no se sale...
         output_low(PIN_A0);
         output_high(PIN_A1);
            delay_ms(1000);
 
            x=-1;
            continue;         //...hasta poner una clave valida
            }
         output_high(PIN_A0);
         output_low(PIN_A1);
         delay_ms(1000);
         break;               //salir de funcion nueva_clave
         }

      limit=x+1;               //longitud de la clave
      string[x]=c;               //almacena clave(maximo 16 caracteres)
      password=atof(string);
      }       
         output_low(PIN_A0);
         output_low(PIN_A1);
}
///FUNCION COMPROBAR CLAVE
void comprueba_clave(void){
         output_high(PIN_A2);
         output_high(PIN_A3);
   for(x=0;;x++){   //bucle no sale...
      do{               //espera hasta...
         c=kbd_getc();   
         }while(c==0);   //...pulsar una tecla
 
      if(c=='D'){      //si se pulsa D se sale de la funcion
         if(x==0){            //no se sale...

            delay_ms(500);

            x=-1;
            continue;
            }         //...poner una clave valida
         if(x!=limit)   //para ser correcto debe tener tb longitud correcta
            var=1;
         break;         //salimos si se pulsa tecla * o #
         }
     
      if(c!=string[x])      //comprobacion de caracteres correctos
         var=1;         //No es correcto->clave incorrecta
       
      }         //...hasta pulsar * o #
     
   if(var>0){      //Clave incorrecta
   
         output_low(PIN_A2);
         output_high(PIN_A3);
         output_high(PIN_A4);
      }
   else{         //Clave correcta
         
         output_high(PIN_A2);
         output_low(PIN_A3);
         output_low(PIN_A4);
      }
   var=0;         //reset var
}

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: en proteus funciona perfecto pero en la protoboard no
« Respuesta #1 en: 05 de Octubre de 2009, 03:42:42 »
hola despues de una larga varatta con esto logre hacer que funcione bien, le cambie los if por un pas de case y listo.lsalu2s