大家好! 我参考了官方的STC8G单片机的技术文档里面的例程,在带电状态下EEPROM是可以写,也可以读的。但就是断电后,在主程序里读同一个地址。数据就是空白。什么都没有。怎么办呀?
贴上例程
#include<STC8.h> //STC15W系列单片机。晶振12MHZ
#include <INTRINS.H>
#define uint unsigned int //宏命令,声明uint替代unsignde int
#define uchar unsigned char
sfr DATA1=0xC2; //数据寄存器
sfr ADDRH=0xC3; //地址寄存器高八位
sfr ADDRL=0xC4; //地址寄存器低八位
sfr CMD=0xC5; //命令模式寄存器
sfr TRIG=0xC6; //命令触发寄存器
sfr CONTR=0xC7; //控制寄存器
sfr TPS=0xF5; //等待时间控制继存器
void iapoff()
{
IAP_CONTR = 0; //关闭IAP功能
IAP_CMD = 0; //清除命令寄存器
IAP_TRIG = 0; //清除触发寄存器
IAP_ADDRH = 0x80; //将地址设置到非IAP区域
IAP_ADDRL = 0;
}
uchar read(uint add)//读EEPROM子函数,add为EEPROM读数地址
{
uchar dat;
CONTR=0x80; //定义控制寄存器工作时间,打开控制寄存器,晶体为12M
TPS=12; //晶振为12MHZ
CMD=1; //选择读的方式
ADDRH=add>>8; //得到地址高八位
ADDRL=add; //得到地址低八位
TRIG=0x5a; //控制码
TRIG=0xa5; //控制码
_nop_(); //延时
_nop_();
_nop_();
dat=DATA1;
return dat;//将值返回
iapoff();
}
void iniap(uint add,uchar vale)//写EEPROM子函数,add为EEPROM要写数的地址, vale为要存的数变量
{
CONTR=0x80;//定义控制寄存器工作时间,打开控制寄存器,晶体为12M
TPS=12;//晶振为12MHZ
CMD=0X02;//选择写的方式
ADDRH=add>>8;//得到地址高八位
ADDRL=add;//得到地址低八位
DATA1=vale;//将要存的数放进存数寄存器DATA
TRIG=0x5a;//控制码
TRIG=0xa5;//控制码
_nop_();//延时
_nop_();
_nop_();
iapoff();
}
void del(uint add)//删除子函数
{
CONTR=0x80;
TPS=12;//晶振为12MHZ
CMD=3;//选择寄存器方式
ADDRH=add>>8;
ADDRL=add;
TRIG=0x5a;
TRIG=0xa5;
_nop_();
_nop_();
_nop_();
iapoff();
}
void key()
{
if(k1!=jat&num<=2){jat=k1,num++;}
if(jta==1) //判断JTA是否为1
{
if(num==2) //如果NUM是2
{
bled=1;rled=0; //蓝灯灭,红灯亮
del(0x0f00);bled=0; //清除0X0F00这个EEPROM地址。
iniap(0x0f00,1);bled=1;rled=1; //写入0X0F00这个地址。注数1;所有灯灭。
if(jta==read(0x0f00)){num=3;rled=0;} //读取一次0X0F00这个地址,判断读数是否JTA相等,直至相等就退出储存状态。
}
}
}
void main()
{
P0M0=0Xff;
P0M1=0X00;
P1M0=0X00;
P1M1=0X00;
P2M0=0X00;
P2M1=0X00;
P3M0=0X00;
P3M1=0X00;
P4M0=0X00;
P4M1=0X00;
P5M0=0X00;
P5M1=0X00;
P6M0=0X00;
P6M1=0X00;
P7M0=0X00;
P7M1=0X00;
shuxian=read(0x0f00); //如果是1,读取EEPROM发送到数显。
while(1) {
key();
}
}
共6条
1/1 1 跳转至页
STC8G单片机的EEPROM读写不了,why?
关键词: STC8G EEPROM 存储器
共6条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 | |
【分享评测,赢取加热台】使用8051单片机驱动WS2812被打赏40分 |