找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5940|回复: 7
打印 上一主题 下一主题
收起左侧

求指导 STC15F204EA的 EEPROM 读写问题

[复制链接]
跳转到指定楼层
楼主
ID:23515 发表于 2013-6-6 21:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 LQMEI 于 2013-6-6 21:31 编辑

程序如下,不能正确保存数据,求帮助、指点迷津
我的思路是三个无符号long型数据 dqs,sds,ljs 先分解成12个无符号char型数据存到数组XSM[1]~~XSM[12]里,然后把数组XSM[1]~~XSM[13]这13个数存进 EEPROM 里,以备下次开机时候读取



//stc15f204ea 震荡频率 设为6MHz
#include <intrins.h>
#include <stc15.h>      //stc15系列单片机头文件
#define uchar unsigned char
#define uint unsigned int
#define ulog unsigned long
#define addcu 0x0000
uchar xsm[14]; // xsbl 显示变量
ulog dqs,sds,ljs; //dqs当前数,sds设定数,ljs累计数
//===============================================
void delayms(uint xms);  //延时子函数; xms毫秒数
uchar read(uint adr);  //字节读
void write(uint adr,uchar dat);  //字节写
void clear(uint adr);    //清除一片扇区
void disable();   // 关闭iap编程
void  cshhs();  //初始化
void vint(); //写入要保存的数据
void goon(uint adr);
//===============================================
void delayms(uint xms)  //延时子函数
{uint i,j;
for(i=xms;i>0;i--)        //i=xms即延时约xms毫秒
for(j=110;j>0;j--);
}
//=======================================
void goon(uint adr)
{
IAP_CONTR=0X84;
IAP_ADDRH=adr>>8;  //获取指针高八位
IAP_ADDRL=adr;  //获取指针低八位
IAP_TRIG=IAP_TRIG0;  //两条触发命令,使命令执行
IAP_TRIG=IAP_TRIG1;
_nop_(); _nop_(); _nop_();
}
//====================================
uchar read(uint adr)  //字节读
{EA=0;
IAP_CMD=0X01;  //;01h为读取命令
goon(adr);
return(IAP_DATA);
}
//=========================
void write(uint adr,uchar dat)  //字节写
{ EA=0;
IAP_CMD=0X02;  //;02h为写入命令
IAP_DATA=dat;   //把数据放入数据寄存器中,用于写
goon(adr);
}
//==============================
void clear(uint adr)    //清除一片扇区
{ EA=0;
IAP_CMD=0X03;  //;03h为擦除命令
goon(adr);
}
//=================================
void cloiap()   // 关闭iap编程
{EA=1;
IAP_CONTR=0X00;  //关闭rom控制器命令
IAP_CMD=0X00;  //清除 读写擦 命令
}
//===========================
void  cshhs()  //初始化
{
uchar i;
for (i=13;i>0;i--){xsm
=read(addcu+i);}//读取上次存入的数据
clear(addcu);cloiap(); //关闭IAP
for (i=1;i<=4;i++){ljs<<=8;ljs+=xsm
;}  //恢复ljs的值
for (i=5;i<=8;i++){sds<<=8;sds+=xsm
;}  //恢复sds的值
for (i=9;i<=12;i++){dqs<<=8;dqs+=xsm
;} //恢复dqs的值
xsm[1]=xsm[13];
}
//=================
void vint() //写入要保存的数据
{ uchar i;
jdq1=jdq2=led=0; //关闭指示灯以及继电器
P1=0xff;  //关闭所有数码显示
wela=1;  
wela=0;
EA=0;
for (i=12;i>=9;i--){ xsm
=dqs;dqs>>=8;} //分解dqs的值
for (i=8;i>=5;i--) { xsm
=sds;sds>>=8;} //分解sds的值
for (i=4;i>=1;i--) { xsm
=ljs;ljs>>=8;} //分解ljs的值
//clear(addcu);
for (i=1;i<13;i++) {write(addcu+i,xsm
);}//写入要保存的数据
cloiap(); //关闭IAP
}
//===============================================
void main()
{
cshhs();  //初始化
xsm[13]=xsm[1]=3;
ljs=98712346;
sds=4000;
dqs=346;
vint();
while(1);
}

qqq.jpg (156.87 KB, 下载次数: 124)

qqq.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:23515 发表于 2013-6-6 21:35 | 只看该作者
void  cshhs()         //初始化
void vint()        //写入要保存的数据
函数里的数组下标居然不能显示,所以又截图贴出来
回复

使用道具 举报

板凳
ID:23515 发表于 2013-6-6 21:42 | 只看该作者
qqq.rar (6.99 KB, 下载次数: 12)
这是头文件及C文件,
求高手帮我看看,指点迷津
回复

使用道具 举报

地板
ID:57506 发表于 2013-12-2 10:37 | 只看该作者
请问一下  怎么对EEPROM的数组读?
回复

使用道具 举报

5#
ID:23303 发表于 2017-4-14 16:23 | 只看该作者
向各位高手学习!谢谢!
回复

使用道具 举报

6#
ID:23303 发表于 2017-4-14 16:24 | 只看该作者
向各位高手学习,谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表