This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

protecting some values while changing the battery

i m working on a project with 89c51rd2.

my problem is how to store some datas in memory...

a passwoed for example,
i store a defult value for the password when i programming.
and i want the user can change the password.
but if the user shuts down the device or wants to change batteries
then the user works the device again, the password will take the default value again.

how can i solve this?
im using C language with keil.

i cant store any values in code memory. can the data memory remember the value?

Where is the 8051's static memory?

i want to select an address an store the password there. and i wont use a default value.
But the problem is which memory of 8051 should i use, and how can i use it.

i wanna select an address and when program starting up i will check that address, if there is no value, i will store 1234 value into there as password. when user wants to change the password i will change the value of that address.

well can i select an address in code segment(or any memory space which dont forget the value) and how can i store a value into there?
eg. i wanna store a byte to FFF0 address in code segment. is it possible?

Parents Reply Children
  • Please read the manual: http://www.keil.com/support/man/docs/c51/c51_ap_startup.htm

    i looked this many times.
    and this: http://www.keil.com/support/docs/374.htm
    and some others.

    i did some following changings in startup.a51

    XDATASTART      EQU     7FFFH
    XDATALEN        EQU     1H
    

    Nothing changed!

    so i decided to use an external memory as Westermark pointed

  • What were you hoping to achieve by those changes?

    What change(s) were you expecting?

    What tests did you do to confirm that nothing changed?

  • i built a 0-F counter to try it. i used a button, 4 leds and a AT89C51RC2.

    here is the codes.

    #include <89c51rd2.h>
    #include <absacc.h>
    
    #define yukari P1_0
    #define cikis P2
    
    int xdata sayi _at_ 0xF1;
    
    void main()
    {
    
       yukari = 0;
       sayi = sayi&0x000F;
       cikis = sayi;
    
    //      DBYTE [0x0002] = 5; // 0002 h adresli data bellege 5 bilgisini yaz
    //      Oku = CBYTE [0x0002]; // 0002 h adresli code bellekten 1 byte oku
    
    
       while(1)
       {
              if (yukari)
              {
                     while(yukari);
                        if(sayi<15)
                               sayi++;
                else
                               {
                                      sayi = 0;
                               }
                               cikis = sayi;
              }
       }
    }
    


    i programmed the chip and placed it to the circuit on breadboard.
    i pushed the button 5 times and the leds showed 0101.
    i removed the power and started again.

    i was hoping; leds keep showing 0101 when i started up the device again. but they didnt, they started to show 0000.

  • "i was hoping; leds keep showing 0101 when i started up the device again"

    What made you think that was even possible - let alone likely??!

    I thought you said you understood the meaning of "volatile"...??

  • RAM keeps the contents while _powered_.

    Making the startup code not clear RAM is something that is done when you reset the processor without removing the power, and want to keep the original contents of some variables.

    You either needs backup power to the RAM, or you need to use non-volatile memory. Your PC will not remember the RAM contents if you remove any battery + power coord. That is expected behaviour and the main difference between the primary memory (RAM) and the hard disk (potentially using flash memory).

  • Many people here said that is possible. but i couldnt do.

    i understood. So i will place a non-volatile memory on my pcb.

  • RAM keeps the contents while _powered_.

    Making the startup code not clear RAM is something that is done when you reset the processor without removing the power, and want to keep the original contents of some variables.

    You either needs backup power to the RAM, or you need to use non-volatile memory. Your PC will not remember the RAM contents if you remove any battery + power coord. That is expected behaviour and the main difference between the primary memory (RAM) and the hard disk (potentially using flash memory).

    so many people had given advices about this thread.
    But u told the most helpfull things.

    Thanks you. i will place a non-volatile memory onto my pcb.

  • Said what is possible?

    It has been quite clearly stated that you need either a backup power source or a non-volatile memory.