发布于 2004-09-20 13:17:20
0楼
可以设计一个子程序用来保存连续数据块到E方中,在分配内存时将需要保存的数据定义到一个连续的地址中,其长度为偶数,如果为奇数,则在最后浪费一个字节不要使用
// 首先定义全局变量
// Offset 字类型 数据块起始地址相对VB0的偏移量(用数据块初始化)
// Count 字类型 待保存数据块的字节数(用数据块初始化)
// Index 字类型 保存数据索引计数(在第一扫描周期初始化为Count)
// 子程序 Save
// 每个扫描周期保存一个字,索引计数器加 2
ldn sm0.0
movw Offset,SMW32 // 送起始地址
+I Index, SMW32 // 加上索引值,得到当前要保存数据的偏移量
movb 16#82, SMB31 // 数据长度为2(一个字),SM31.7拉高,使能保存
+I 2, Index // 索引指向下一个待保存数据
在主程序的尾部写上
ldW< Index, Count // 有数据要保存
AN SM31.7 // 可以写 EEPROM
A EnableSave // 冗余设计,可以用一个定时器控制写 EEPROM
// 的时间间隔,避免内存数据出错时连续保存损坏永
// 永存储器,因为永久存储器是有写入次数限制的
call Save // 保存
ldw>= Index, Count // 数据保存完毕
R EnableSave, 1 // 配合前面的冗余设计,禁止写以保护 EEPROM
要保存数据时,只须将 Indwx 置零即开始写数据到 EEPROM
如果对整系统有信心,冗余设计那几行是可以删掉的
不过不建议这么做,安全第一嘛
可以用一个定时每30分钟将 EnableSave 位置位一次,那么一次完整的保存过程最长会需要30分钟(数据保存本身是很快的,可以忽略不计)
另外,在系统块中将保存的数据块定义为不保留,每次上电时会从永久存储器读上次保存的参数到 V 内存
生命存在的方式只有两种:腐烂或燃烧