请教关于PIC单片机写EEPROM上电默认值的问题

[复制链接]
6316|5
 楼主| soso 发表于 2007-12-8 15:01 | 显示全部楼层 |阅读模式
&nbsp;&nbsp;我用PIC单片机(内含EEPROM)做的产品,上电后第一件事是先从EEPROM中读出定值,我现在的做法是先把写EEPROM的子函数(写默认值)加到程序里,下载程序之后,上电运行,然后再把写EEPROM的子函数屏蔽掉,重新写程序。是否有简便的办法,好像汇编中可以直接写EEPROM的值,以后再重新上电就不会再重新EEPROM的值,请大虾指点下。<br />&nbsp;&nbsp;
幸福DE饭团 发表于 2007-12-8 15:12 | 显示全部楼层

直接用烧写器烧写EEPROM的内容,连写EEPROM的子函数都省了

  
xieyuanbin 发表于 2007-12-9 19:51 | 显示全部楼层

可在EEPROM中预先定义一个数组

<br />int&nbsp;_EEDATA(2)&nbsp;USER_DATA[16]&nbsp;=&nbsp;{};<br />或:<br />int&nbsp;_EEDATA(2)&nbsp;USER_DATA[16]&nbsp;=&nbsp;{1,2,3};<br /><br />
sosomj 发表于 2007-12-13 10:08 | 显示全部楼层

回复

PICC中的写法:<br /><br />//&nbsp;0x00&nbsp;-&nbsp;0x0f&nbsp;&nbsp;&nbsp;&nbsp;<br />__EEPROM_DATA&nbsp;(0x55,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa);<br />__EEPROM_DATA&nbsp;(0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa);<br />//&nbsp;0x10&nbsp;-&nbsp;0x1f<br />__EEPROM_DATA&nbsp;(0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa);<br />__EEPROM_DATA&nbsp;(0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa);&nbsp;&nbsp;&nbsp;&nbsp;<br />//&nbsp;0x20&nbsp;-&nbsp;0x2f<br />__EEPROM_DATA&nbsp;(0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa);<br />__EEPROM_DATA&nbsp;(0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />//&nbsp;0x30&nbsp;-&nbsp;0x3f<br />__EEPROM_DATA&nbsp;(0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa);<br />__EEPROM_DATA&nbsp;(0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />//&nbsp;0x40&nbsp;-&nbsp;0x4f<br />__EEPROM_DATA&nbsp;(0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa);<br />__EEPROM_DATA&nbsp;(0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />//&nbsp;0x50&nbsp;-&nbsp;0x5f<br />__EEPROM_DATA&nbsp;(0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa);<br />__EEPROM_DATA&nbsp;(0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />//&nbsp;0x60&nbsp;-&nbsp;0x6f<br />__EEPROM_DATA&nbsp;(0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa);<br />__EEPROM_DATA&nbsp;(0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />//&nbsp;0x70&nbsp;-&nbsp;0x7f<br />__EEPROM_DATA&nbsp;(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);<br />__EEPROM_DATA&nbsp;(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);&nbsp;&nbsp;&nbsp;&nbsp;<br />//&nbsp;0x80&nbsp;-&nbsp;0x8f<br />__EEPROM_DATA&nbsp;(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);<br />__EEPROM_DATA&nbsp;(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);<br />//&nbsp;0x90&nbsp;-&nbsp;0x9f<br />__EEPROM_DATA&nbsp;(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);<br />__EEPROM_DATA&nbsp;(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);<br />//&nbsp;0xa0&nbsp;-&nbsp;0xaf<br />__EEPROM_DATA&nbsp;(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);<br />__EEPROM_DATA&nbsp;(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);<br />//&nbsp;0xb0&nbsp;-&nbsp;0xbf<br />__EEPROM_DATA&nbsp;(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);<br />__EEPROM_DATA&nbsp;(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);<br />//&nbsp;0xc0&nbsp;-&nbsp;0xcf<br />__EEPROM_DATA&nbsp;(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);<br />__EEPROM_DATA&nbsp;(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);<br />//&nbsp;0xd0&nbsp;-&nbsp;0xdf<br />__EEPROM_DATA&nbsp;(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);<br />__EEPROM_DATA&nbsp;(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);<br />//&nbsp;0xe0&nbsp;-&nbsp;0xef<br />__EEPROM_DATA&nbsp;(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);<br />__EEPROM_DATA&nbsp;(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);<br />//&nbsp;0xf0&nbsp;-&nbsp;0xff<br />__EEPROM_DATA&nbsp;(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);<br />__EEPROM_DATA&nbsp;(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);<br /><br />汇编的写法:<br />&nbsp;&nbsp;&nbsp;&nbsp;org&nbsp;&nbsp;&nbsp;&nbsp;0x2100<br /><br />;&nbsp;0x00&nbsp;-&nbsp;0x0f&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;de&nbsp;&nbsp;&nbsp;&nbsp;0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00<br />;&nbsp;0x10&nbsp;-&nbsp;0x1f<br />&nbsp;&nbsp;&nbsp;&nbsp;de&nbsp;&nbsp;&nbsp;&nbsp;0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00&nbsp;&nbsp;&nbsp;&nbsp;<br />;&nbsp;0x20&nbsp;-&nbsp;0x2f<br />&nbsp;&nbsp;&nbsp;&nbsp;de&nbsp;&nbsp;&nbsp;&nbsp;0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00&nbsp;&nbsp;&nbsp;&nbsp;<br />;&nbsp;0x30&nbsp;-&nbsp;0x3f<br />&nbsp;&nbsp;&nbsp;&nbsp;de&nbsp;&nbsp;&nbsp;&nbsp;0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00&nbsp;&nbsp;&nbsp;&nbsp;<br />;&nbsp;0x40&nbsp;-&nbsp;0x4f<br />&nbsp;&nbsp;&nbsp;&nbsp;de&nbsp;&nbsp;&nbsp;&nbsp;0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00&nbsp;&nbsp;&nbsp;&nbsp;<br />;&nbsp;0x50&nbsp;-&nbsp;0x5f<br />&nbsp;&nbsp;&nbsp;&nbsp;de&nbsp;&nbsp;&nbsp;&nbsp;0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00&nbsp;&nbsp;&nbsp;&nbsp;<br />;&nbsp;0x60&nbsp;-&nbsp;0x6f<br />&nbsp;&nbsp;&nbsp;&nbsp;de&nbsp;&nbsp;&nbsp;&nbsp;0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00&nbsp;&nbsp;&nbsp;&nbsp;<br />;&nbsp;0x70&nbsp;-&nbsp;0x7f<br />&nbsp;&nbsp;&nbsp;&nbsp;de&nbsp;&nbsp;&nbsp;&nbsp;0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00<br />;&nbsp;0x80&nbsp;-&nbsp;0x8f<br />&nbsp;&nbsp;&nbsp;&nbsp;de&nbsp;&nbsp;&nbsp;&nbsp;0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00<br />;&nbsp;0x90&nbsp;-&nbsp;0x9f<br />&nbsp;&nbsp;&nbsp;&nbsp;de&nbsp;&nbsp;&nbsp;&nbsp;0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00<br />;&nbsp;0xa0&nbsp;-&nbsp;0xaf<br />&nbsp;&nbsp;&nbsp;&nbsp;de&nbsp;&nbsp;&nbsp;&nbsp;0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00<br />;&nbsp;0xb0&nbsp;-&nbsp;0xbf<br />&nbsp;&nbsp;&nbsp;&nbsp;de&nbsp;&nbsp;&nbsp;&nbsp;0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00<br />;&nbsp;0xc0&nbsp;-&nbsp;0xcf<br />&nbsp;&nbsp;&nbsp;&nbsp;de&nbsp;&nbsp;&nbsp;&nbsp;0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00<br />;&nbsp;0xd0&nbsp;-&nbsp;0xdf<br />&nbsp;&nbsp;&nbsp;&nbsp;de&nbsp;&nbsp;&nbsp;&nbsp;0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00<br />;&nbsp;0xe0&nbsp;-&nbsp;0xef<br />&nbsp;&nbsp;&nbsp;&nbsp;de&nbsp;&nbsp;&nbsp;&nbsp;0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00<br />;&nbsp;0xf0&nbsp;-&nbsp;0xff<br />&nbsp;&nbsp;&nbsp;&nbsp;de&nbsp;&nbsp;&nbsp;&nbsp;0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00<br /><br />
euvjin 发表于 2007-12-14 16:35 | 显示全部楼层

做个标志嘛

做个标志,上电时从eeprom读出标志:如果第一次使用,标志不正确,写默认值并且写标志;如果标志正确就读定值
 楼主| soso 发表于 2007-12-15 10:03 | 显示全部楼层

谢谢各位大哥指点

&nbsp;&nbsp;&nbsp;谢谢各位大哥这么详细的指点,我现在采用4楼做法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

0

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部