Cambio de datos en la memoria EEPROM

#1
Hola bueno e empezado a aprender a progrmar datos en la memoria eeprom y me he encontrado con una programacion la cual se trata de un control de accesos atraves de un teclado, y al intoducirle la clave este me da acceso mediante un pulso a un rele
y mi duda es de como cambiar la contraseña.. anexo la programacion:

PHP:
#include <16F876.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock= 4000000)
#use standard_io(a) 

#include <lcd.c>
#include <kbd.c>
#include <stdlib.h>
[COLOR=Red]#rom 0x2100={'7','2','3'}[/COLOR]  //Posición 0,1 y 2 de la Eeprom con los datos…
                           //7,2, y 3 respectivamente
void main() {
   char k;
   int i;
   char data[3], clave[3];  //Matrices para guardar clave y datos

   lcd_init();
   kbd_init();
   port_b_pullups(TRUE);

   while (TRUE) {
   i=0;            //posición de la matriz

   printf(lcd_putc,"\fpulsar tecla 1\n");  //Para primer dato

   while(i<=2){                //Para tres datos
      k=kbd_getc();            //Lee el teclado
      if (k!=0)                //Si se ha pulsado alguna tecla 
         {data[i]=k;           //se guarda en la posición correspondiente
          i++;                //de la matriz
          printf(lcd_putc,"\fpulsar tecla %u\n",i+1);  //Siguiente dato
         }
    }

   for (i=0;i<=2;i++) {             //Pasa datos de eeprom a la matriz clave
     clave[i]=read_eeprom(i);}

   if ((data[0]==clave[0])&&(data[1]==clave[1])&&(data[2]==clave[2]))
      { printf(lcd_putc,"\fPuerta Abierta"); //Compara los datos con la clave
        output_high(PIN_A0);                //Si es igual da pulso al relé
        delay_ms(500);
        output_low(PIN_A0);}
   else printf(lcd_putc,"\fPuerta Cerrada");  //Clave erronea
   delay_ms(1000);
   }
}
ahora mi pregunta es esta lo que esta señalado con rojo es la contraseña que seria 7 , 2, 3
pero el numero que esta al lado 0x2100 esta dado en algun sistema(octa,binario, hexadecimal) o como puedo cambiar esa clave a cualquir numero???
gracias
 
Última edición por un moderador:
#2
M.a.R.c.K

0x2100 es un numero indicado en formato HEXADECIMAL y supongo que indica la primera posición de la ROM para lo cual deberias fijarte en la hoja de datos de tu uControlador.

Para cambiar esa clave a otra, deberas leer la ayuda del Compilador que estas usando al respecto de esa instrucción!!!.



Saludos. JuanKa.-
 
Última edición:
#5
M.a.R.c.K

Yo no conozco programación en C para el microcontrolador, pero estoy seguro por la similitud de notación usada en otros Lenguajes de programación, que en la siguiente parte que has colocado tu:

. #include <stdlib.h>
. #rom 0x2100={'7','2','3'} //Posición 0,1 y 2 de la Eeprom con los datos…
. //7,2, y 3 respectivamente

#rom 0x2100= "0x2000" es la primera posición de memoria ROM donde guardara los datos de la clave

={'7','2','3'} 7 , 2 y 3 son los numeros que le pides que guarde como clave, si los reemplazas por otros antes de compilarlo cambias la clave.

Pero esa instrucción #rom 0x2100={'7','2','3'} es PROPIA del Compilador C que tu usas, debes si o si buscar la ayuda del mismo Compilador para conocer la sintaxis de las instrucciones y la forma de colocar las variables.

Saludos. JuanKa.-
 
#6
Bueno eso ya lo intene pero me marca error al compilarlo lo que me llevo a deducir con tu respuesta es que tal vez para cambiar la contraseña necesito otra variable deja busco muchas gracias no lo habia visto asi gracias.
 
#7
Bueno eso ya lo intene pero me marca error al compilarlo lo que me llevo a deducir con tu respuesta es que tal vez para cambiar la contraseña necesito otra variable deja busco muchas gracias no lo habia visto asi gracias.
M.a.R.c.K para cambiar la contraseña solo cambia la siguiente linea:

#rom 0x2100={'1','2','3'} // La nueva contraseña es: 123

(Esta instrucción permite la inserción de datos en el archivo .HEX. En particular esto puede ser usado para programar la EEPROM del 16F876, cuya dirección inicial es: 0x2100)

Debes tomar en cuenta que el codigo de ejemplo que estás utilizando es para el compilador C CCS, yo estoy usando la versión 4.106 y compila perfectamente, anteriormente usé la versión 4.114 y tuve algunos problemas no tanto con la compilación, sino con la simulación en Proteus (especificamente con los LCD).

Este ejemplo viene en el libro: Compilador C CCS y Simulador Proteus para Microcontroladores PIC (en la página 79), puedes implementar el esquema de ejemplo de la figura 26 para probarlo en el Proteus.

Saludos.