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?
You say you have tried for a week? Tried what? Random experiments or sitting and thinking about the problem?
If you tell the Keil tools that your processor has 10 bytes less memory than it really has - how do you then expect the Keil tools to "know" to clear these extra 10 bytes?
If you real the Keil documentation, you will also find documentation how to create variables that are not initialized on startup.
But the above only affects clearing of variables if you reset the processor. All variables in RAM loses their content when the processor loses the power supply. So how did you plan to supply your processor when it isn't powered?
For processors that _can_ write to flash (which it seems your processor does support, according to other posts), it is possible to save state in flash for an indefinite time. But that requires one of two things: - that you change the value so seldom that you don't wear out the flash. Flash memory only supports a limited number of write/erase cycles. - that you can detect a power loss and have enough buffer power that you can keep the supply voltage within nominal values while you save RAM contents to flash. This spare power requires hardware support.
For procesors that can write to EEPROM, you get more options. Since EEPROM normally allows you to write to single cells, you can reduce the wear by cycling between multiple memory cells. So yuou may be able to write every change directly to the EEPROM. Or you can do the same as with flash - detect a power loss and run on spare power while storing to EEPROM.
Or you may look at ways to feed the processor from batteries or a large enough supercap, while you make sure that the processor switches to lowest possible power mode. Just to have the RAM cells powered.
Or you may look at external memory like FeRAM - a technology like EEPROM but with faster write cycles and without need to care about wear from multiple writes. Lots of code that shows how to interface an EEPROM using I2C or SPI. Same code will support an FeRAM that is connected using I2C or SPI.
So what you are saying is: No one have _given_ you a turn-key solution. You have been given suggestions, but you have spent a week on your own without looking closer at already given suggestions. The actual details have been discussed in many threads on this site. And they are possible to find using Google. Can you give one single good reason why _we_ should find the references for yuo? Or why _we_ should duplicate the information in this thread instead of having you locate the original threads?
More commonly known as just "FRAM" ?