用过STC单片机IAP功能的请进,请教向EEPROM区读写数据问题

我用的STC12C5410AD单片机,现在想实现一个非易失性数据的读写。在我的程序中,有一个数据,在按下和单片机P3.2口外部中断0相连的按键时,想让单片机记住按键时候的... 我用的STC12C5410AD单片机,现在想实现一个非易失性数据的读写。在我的程序中,有一个数据,在按下和单片机P3.2口外部中断0相连的按键时,想让单片机记住按键时候的该数据,并且下次开机时保持该数据而不丢失。程序大体是
void Byte_Read(int x)
{
ISP_ADDRH=0x28;
ISP_ADDRL=0x00;
ISP_CONTR=0x8b;
ISP_CMD=0x01; //字节读指令
ISP_TRIG=0x46;
ISP_TRIG=0xB9;
_nop_();
x=ISP_DATA;
ISP_CONTR=0x00;
}

void Byte_Program(int y)
{
ISP_ADDRH=0x28;
ISP_ADDRL=0x00;
ISP_DATA=y;
ISP_CONTR=0x8b;
ISP_CMD=0x02; //编程指令
ISP_TRIG=0x46;
ISP_TRIG=0xB9;
_nop_();
ISP_CONTR=0x00;
}

void Sector_Erase(void)
{
ISP_ADDRH=0x28;
ISP_ADDRL=0x00;
ISP_CONTR=0x8b;
ISP_CMD=0x03; //扇区擦除指令
ISP_TRIG=0x46;
ISP_TRIG=0xB9;
_nop_();
ISP_CONTR=0x00;
}
main()
{
Byte_Read(readresult); //读出非易失性数据
biaoding=readresult/2; //对读出的数字稍作处理,下面的程序要用到
…………
…………
while(1)
{
…………
yaocundeshu=a/100;
data=data-baioding;
…………
}
}
void INT0_ISR() interrupt 0
{
IE0=0;
Sector_Erase();
Byte_Program(yaocundeshu);
Byte_Read(readresult);
biaoding=readresult/100.0; //biaoding是主函数要用到的数
}
yaocundeshu是要在中断0时保存的数,可是我的程序运行后为什么好像yaocundeshu没有存到EEPROM里啊,并且读也没有读出东西来。程序其他地方应该都没有问题,请只考虑IAP的使用方面,我对IAP操作的用法有什么不对的地方吗??
程序最底下这一行不太对,biaoding=readresult/100.0;改为biaoding=readresult/2;要和主函数中的对应起来,倒是不影响哈,呵呵
展开
 我来答
trousers
2009-04-11 · TA获得超过4704个赞
知道大有可为答主
回答量:968
采纳率:100%
帮助的人:1531万
展开全部
我用过STC的IAP功能。
当然不对啦,51单片机的操作都以字节为单位,你传递的参数是int型,占两字节,当然会不正常啦,改成unsigned char就行了。
还有,读出的那个程序应该改成函数,通过返回的方式把值传递给主程序。
有其他问题直接找我,QQ:331660651,注明93182270
意法半导体(中国)投资有限公司
2023-06-12 广告
STM32F103是一款高性能的嵌入式芯片,由意法半导体(STMicroelectronics)公司生产。它是STM32系列芯片之一,具有紧凑、低功耗、高性能等特点,被广泛应用于嵌入式系统中。STM32F103的主要特点包括:1. 集成了A... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
ab1098
2012-07-17
知道答主
回答量:24
采纳率:0%
帮助的人:19.2万
展开全部
弊端:
1.读数据函数不明确,无定义类型,无返回值,主函数执行语句有误。
2.中断函数中调用了其它函数体,容易产生错误。
3.编写比较混乱,执行编译易出现错误。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式