/*
** EEPROM写入值,显示开机的次数。
*/
#include<iom16v.h>
#include<macros.h>
#include"cxt.h"
uchar ledout[3];
void EEPROM_write(uchar addr,uchar data)
{
SREG&=~BIT(7); //关闭总中断,以免打扰到EEPROM读写
while(EECR & BIT(EEWE)); //查询EEWE是否是0,为0时上一次发送结束
EEAR=addr; //写入地址
EEDR=data; //写入数据
EECR|=BIT(EEMWE); //EEMWE置1
EECR|=BIT(EEWE); //EEWE置1,结合EEMWE置1,将数据写入EEPROM
SREG|=BIT(7); // 开总中断,为其他中断函数服务。
}
uchar EEPROM_read(uchar addr)
{
uchar data;
SREG&=~BIT(7);
while(EECR & BIT(EEWE)); //查询EEWE是否是0,为0时上一次发送结束
EEAR=addr; //写入地址
EECR|=BIT(EERE); //读使能开启
data=EEDR; //读数据
return data;
}
void main()
{
uchar num,i;
num=EEPROM_read(2); // 从地址2读数据
num++;
EEPROM_write(2,num);// 将num加1写入EEPROM
while(1)
{
ledout[0]=num%1000/100;
ledout[1]=num%100/10;
ledout[2]=num%10;
for(i=0;i<3;i++)
{
show(ledout[i],i);
delay(3);
}
}
}