关于内部eeprom,有没有办法初始化一次eep
也就是说内部eep本来全是ff的,我想在烧入程序第一次运行的时候初始化一次为其他值。以后的断电上电就不用执行这个初始化代码了。(因为第一次上电以后会用按键来设置刷新eep)
写一个标志位,如0XAA55,如果上电读取非0XAA55就初始化一次。 tigerman520 发表于 2015-1-13 09:47
写一个标志位,如0XAA55,如果上电读取非0XAA55就初始化一次。
如何区分第一次上电运行还是以后的运行。
是不是可以在main函数的 while外面写个++标致位。
u8 num=0;
void main()
{
if(num==0)
{
”eep初始化代码“
}
num++;
if(num>250)
num=1; /*防止num+满自溢变成0,也就是说只有程序烧进去那一次num才会=0 */
while(1)
{
“用户代码”
}
}
这样不知可行不 extern unsigned char eeprom_write(unsigned char addr, unsigned char value);//eeprom写函数
extern unsigned char eeprom_read(unsigned char addr);//eeprom读函数
//上面两个函数是PICC自带的
//下面这些语句是初始化eeprom的,8个一组,只在烧写程序时有用。
__EEPROM_DATA(50, 50, 50, 0, 0, 0, 0x12, 0x5c);//亮度,对比度,音量
__EEPROM_DATA(0x01, 0xf4, 0x03, 0x20, 0x06, 0x40, 0, 0);//R101 0x08
__EEPROM_DATA(0x07, 0xd0, 0x0f, 0xa0, 0x00, 0x00, 0, 0);//R101顶蒸0x10
__EEPROM_DATA(0x02, 0x8a, 0x06, 0x72, 0x00, 0x00, 0, 0);//M201 0x18
__EEPROM_DATA(0x01, 0xf4, 0x03, 0x20, 0x06, 0x40, 0, 0);//A301 0x20
__EEPROM_DATA(0x03, 0xe8, 0x0c, 0x1c, 0x00, 0x00, 0, 0);//c37
__EEPROM_DATA(0x01, 0xf4, 0x03, 0x20, 0x07, 0xd0, 0, 0);//6408
__EEPROM_DATA(0x01, 0xf4, 0x05, 0xdc, 0x00, 0x00, 0, 0);//VA01
__EEPROM_DATA(0x02, 0x12, 0x06, 0x72, 0x00, 0x00, 0, 0);//CH7140b
__EEPROM_DATA(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0, 0);//A502特殊
__EEPROM_DATA(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0, 0);//F505特殊
__EEPROM_DATA(0x03, 0xE8, 0x03, 0xE8, 0x07, 0xD0, 0, 0);//V70
__EEPROM_DATA(0x02, 0x80, 0x06, 0x68, 0x0D, 0x48, 0, 0);//CM9 叶子疯 发表于 2015-1-13 10:38
extern unsigned char eeprom_write(unsigned char addr, unsigned char value);//eeprom写函数
extern uns ...
如何才能保证只在程序烧录时有用呢 huarana 发表于 2015-1-13 10:44
如何才能保证只在程序烧录时有用呢
直接用
__EEPROM_DATA(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);
这个语句本身就是初始化eeprom用的(只在烧程序的时候有用),它会按次序把你的初始数据写入eeprom中。 楼上正解 叶子疯 发表于 2015-1-13 10:48
直接用
__EEPROM_DATA(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);
噢,非常感谢。找到这个头文件库了。
还有个问题就是 __EEPROM_DATA(a, b, c, d, e, f, g, h),使用一次是不是就将eep前8个字节初始化成()内的数据了?
然后再使用一次一次的话,会紧接着写入第9-16字节吗? 地址会自动增加的吗?
huarana 发表于 2015-1-13 11:00
噢,非常感谢。找到这个头文件库了。
还有个问题就是 __EEPROM_DATA(a, b, c, d, e, f, g, h),使用一 ...
是的,地址都是挨着来的,从0-255 学习!!! huarana 发表于 2015-1-13 11:00
噢,非常感谢。找到这个头文件库了。
还有个问题就是 __EEPROM_DATA(a, b, c, d, e, f, g, h),使用一 ...
应该不是的,这个语句就决定了每次烧录都是前几个字节。 const 初始化 就可以了。 看了这个才知道。
以前都是笨方法,上电运行检查特定地址内内的内容,判断要不要将eeprom 初始化,哎..... 非常好 学习了 学习一下! 我一般是用这个流程:
ReadEEPROM -> Check ALL "0xff"? ->(YES) -> 初始化 ->把初始化的数据写入EEPROM 终于知道__EEPROM_DATA的用法了,我以前都是上电判断当前地址内的值是否在我设定的范围之内,如果在就说明当前值有效,如果不在就采用默认值 __EEPROM_DATA 赞 围观学习~~ 我们用的是汇编,只能用
org ( CEEPROM_ma_PROGRAM_UPR_file_info + CFile_mvdw_file_content_size)
_dedw -1
页:
[1]