|
后面三種狀態(tài)都能寫入,掉電后正常讀取,為啥第一種狀態(tài)死活寫不進(jìn)去呢,返回的一直都是FF。我把數(shù)據(jù)全部加1后測(cè)試,上電后默認(rèn)第一種狀態(tài)點(diǎn)亮,也能掉電存儲(chǔ)了,其它幾種狀態(tài)都正常。當(dāng)num從0或1開始就無法正常寫入,第一種狀態(tài)上電默認(rèn)關(guān)閉,手動(dòng)點(diǎn)亮后掉電無法存儲(chǔ)。只有num從2開始才正常。
單片機(jī)源程序如下:
#include <STC15F2K60S2.H>
#include <intrins.h>
#include "eeprom.h"
sbit K1=P3^2;
sbit K2=P3^3;
sbit l1=P1^4;
sbit l2=P1^5;
sbit l3=P1^6;
static unsigned char num=0;
void Delay30ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 2;
j = 67;
k = 183;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void init()//中斷初始化
{
IT0=1;//外部中斷0 跳變觸發(fā)
EX0=1;//外部中斷0 p32
EA=1;
}
void init0() interrupt 0//中斷程序 K1
{
if(K1==0)
{
Delay30ms();
if(K1==0)
num=num+1;
if(num>4){num=1;}
while(!K1);}
}
void lsd0()
{
while(1)
{
if(num!=1){return;}
P1=0xfe;
}
}
void lsd1()
{
while(1)
{ l3=0;
if(num!=2){return;}
P1=0xfd;}
}
void lsd2()
{
while(1)
{ l2=0;
if(num!=3){return;}
P1=0xfb;}
}
void lsd3()
{
while(1)
{
P1=0xf7;
if(num!=4)
{return;}
}
}
void main()
{ char v;
init();
v=IapReadByte(IAP_ADDRESS);
num=v+1;
while(1)
{
switch(num)
{
case 1:lsd0();
P1=0xfe;
if(IapReadByte(IAP_ADDRESS)!=1)
{IapEraseSector(IAP_ADDRESS); // 擦除扇區(qū)
IapProgramByte(IAP_ADDRESS,1);}
break;
case 2:lsd1();
P1=0xfd;
if(IapReadByte(IAP_ADDRESS)!=2)
{IapEraseSector(IAP_ADDRESS); // 擦除扇區(qū)
IapProgramByte(IAP_ADDRESS,2);}
break;
case 3:lsd2();
P1=0xfb;
if(IapReadByte(IAP_ADDRESS)!=3)
{IapEraseSector(IAP_ADDRESS); // 擦除扇區(qū)
IapProgramByte(IAP_ADDRESS,3); }
break;//num++;
case 4:lsd3();
P1=0xf7;
if(IapReadByte(IAP_ADDRESS)!=4)
{IapEraseSector(IAP_ADDRESS); // 擦除扇區(qū)
IapProgramByte(IAP_ADDRESS,4);}
break;
default:break;
}
}
}
|
|