单片机STC89C52中内部EEPROM的问题

我想在EEPROM中储存数据,代码如下,但我调试了好多次就是不储存,也不能读取,求高人指点一二啊。sfrISP_DATA=0xe2;sfrISP_ADDRH=0xe3;s... 我想在EEPROM中储存数据,代码如下,但我调试了好多次就是不储存,也不能读取,求高人指点一二啊。
sfr ISP_DATA = 0xe2;
sfr ISP_ADDRH = 0xe3;
sfr ISP_ADDRL = 0xe4;
sfr ISP_CMD = 0xe5;
sfr ISP_TRIG = 0xe6;
sfr ISP_CONTR = 0xe7;
uchar R_ISP(uint adr);//读EEPROM在adr地址里的字节数据
void O_ISP();//打开ISP
void C_ISP();//关闭ISP
void W_ISP(uint ,uchar);//写字节数据到地址为adr的EEPROM里
void D_ISP(uint adr);//擦除地址为adr里的数据
void T_ISP();//ISP触发函数
void main()
{
uint chress;
uchar a;
chress = 0x2000;
W_ISP(chress, 0x50);
a = R_ISP(chress);
a = R_ISP(chress);
_nop_;
}
void O_ISP()
{
EA = 0; //关中断
ISP_CONTR = ISP_CONTR & 0x18;
ISP_CONTR = ISP_CONTR | 0x03; //写入硬件延时
ISP_CONTR = ISP_CONTR | 0x80; // ISPEN=1
}
void C_ISP()
{
ISP_CONTR = ISP_CONTR & 0x7f; //ISPEN = 0
ISP_TRIG = 0x00;
EA = 1; //开中断
}
void T_ISP()
{
O_ISP(); //ISP功能
ISP_TRIG = 0x46; //触发ISP_IAP命令字节1
ISP_TRIG = 0xb9; //触发ISP_IAP命令字节2
_nop_();
}
uchar R_ISP(uint adr)
{
ISP_ADDRH = (uchar)(adr >> 8);//高8位地址赋值ADDRH
ISP_ADDRL = (uchar)(adr & 0x00ff);//低8位地址赋值ADDRL
ISP_CMD = ISP_CMD & 0xf8;//待机模式
ISP_CMD = ISP_CMD | 0x01;
T_ISP(); //触发ISP
C_ISP();//关闭ISP
return (ISP_DATA);
}
void W_ISP(uint adr,uchar da)
{
ISP_ADDRH = (uchar)(adr >> 8); //取地址
ISP_ADDRL = (uchar)(adr & 0x00ff);
ISP_CMD = ISP_CMD & 0xf8; //清低3位
ISP_CMD = ISP_CMD | 0x02; //设置写命令
ISP_DATA = da; //写入数据准备工作
T_ISP(); // 触发ISP
C_ISP(); // 关闭IAP功?
}
void D_ISP(uint adr)
{
uint vadr;
vadr = (adr & 0xfe00);//取扇区首地址
ISP_ADDRH = (uchar)(vadr >> 8); //取地址
ISP_ADDRL = 0x00;
ISP_CMD = ISP_CMD & 0xf8; //清低3位
ISP_CMD = ISP_CMD | 0x03; //设置擦除命令
T_ISP(); // 触发ISP
C_ISP(); // 关闭IAP功能
}
基本的子函数我都觉得没问题,会不会是延时的问题呢?
展开
 我来答
sungreatfriend
2013-01-08 · TA获得超过340个赞
知道小有建树答主
回答量:332
采纳率:100%
帮助的人:265万
展开全部
STC的网站有例子程序,你可以直接使用的.
http://www.stcmcu.com/
STC90/89系列内部 EEPROM 放数据(C语言)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式