|
參考STC8G單片機(jī)的技術(shù)文檔里面的例程,在帶電狀態(tài)下EEPROM是可以寫(xiě),也可以讀的。但就是斷電后,在主程序里讀同一個(gè)地址。數(shù)據(jù)就是空白。什么都沒(méi)有。怎么辦呀?
貼上例程
#include<STC8.h> //STC15W系列單片機(jī)。晶振12MHZ
#include <INTRINS.H>
#define uint unsigned int //宏命令,聲明uint替代unsignde int
#define uchar unsigned char
sfr DATA1=0xC2; //數(shù)據(jù)寄存器
sfr ADDRH=0xC3; //地址寄存器高八位
sfr ADDRL=0xC4; //地址寄存器低八位
sfr CMD=0xC5; //命令模式寄存器
sfr TRIG=0xC6; //命令觸發(fā)寄存器
sfr CONTR=0xC7; //控制寄存器
sfr TPS=0xF5; //等待時(shí)間控制繼存器
void iapoff()
{
IAP_CONTR = 0; //關(guān)閉IAP功能
IAP_CMD = 0; //清除命令寄存器
IAP_TRIG = 0; //清除觸發(fā)寄存器
IAP_ADDRH = 0x80; //將地址設(shè)置到非IAP區(qū)域
IAP_ADDRL = 0;
}
uchar read(uint add)//讀EEPROM子函數(shù),add為EEPROM讀數(shù)地址
{
uchar dat;
CONTR=0x80; //定義控制寄存器工作時(shí)間,打開(kāi)控制寄存器,晶體為12M
TPS=12; //晶振為12MHZ
CMD=1; //選擇讀的方式
ADDRH=add>>8; //得到地址高八位
ADDRL=add; //得到地址低八位
TRIG=0x5a; //控制碼
TRIG=0xa5; //控制碼
_nop_(); //延時(shí)
_nop_();
_nop_();
dat=DATA1;
return dat;//將值返回
iapoff();
}
void iniap(uint add,uchar vale)//寫(xiě)EEPROM子函數(shù),add為EEPROM要寫(xiě)數(shù)的地址, vale為要存的數(shù)變量
{
CONTR=0x80;//定義控制寄存器工作時(shí)間,打開(kāi)控制寄存器,晶體為12M
TPS=12;//晶振為12MHZ
CMD=0X02;//選擇寫(xiě)的方式
ADDRH=add>>8;//得到地址高八位
ADDRL=add;//得到地址低八位
DATA1=vale;//將要存的數(shù)放進(jìn)存數(shù)寄存器DATA
TRIG=0x5a;//控制碼
TRIG=0xa5;//控制碼
_nop_();//延時(shí)
_nop_();
_nop_();
iapoff();
}
void del(uint add)//刪除子函數(shù)
{
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; //藍(lán)燈滅,紅燈亮
del(0x0f00);bled=0; //清除0X0F00這個(gè)EEPROM地址。
iniap(0x0f00,1);bled=1;rled=1; //寫(xiě)入0X0F00這個(gè)地址。注數(shù)1;所有燈滅。
if(jta==read(0x0f00)){num=3;rled=0;} //讀取一次0X0F00這個(gè)地址,判斷讀數(shù)是否JTA相等,直至相等就退出儲(chǔ)存狀態(tài)。
}
}
}
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發(fā)送到數(shù)顯。
while(1) {
key();
}
}
|
|