標(biāo)題:
EEPROM AT24CO2讀寫操作
[打印本頁]
作者:
liuda
時間:
2015-1-21 21:44
標(biāo)題:
EEPROM AT24CO2讀寫操作
時間過的真快轉(zhuǎn)眼天氣冷了,這讓懶惰的我都來不及適應(yīng),最近是東一下西一下的 把 IIC總線接口的EEPROM 勉強(qiáng)學(xué)會點(diǎn),留下點(diǎn)痕跡留著以后品味當(dāng)時的心情吧!
# include <reg52.h>
# define uchar unsigned char //宏定義
# define uint unsigned int
uchar shi,ge,dd,ff,write; //定義局變量
sbit sda=P2^1; //聲明P2口
sbit scl=P2^0; //聲明P2口
sbit duan=P2^6;
sbit wei=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71} ; //LED數(shù)組顯示
void delay() //微秒級延時
{ ; ;}
void delayms(uchar a) //毫秒延時
{
uchar x,y;
for(x=a;x>0;x--)
for(y=0;y<110;y++);
}
void init() //AT24C02初始化
{
sda=1;
delay();
scl=1;
delay();
}
void start() //AT24C02啟動信號
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
void stop() //AT24C02停止信號
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
void respons() //AT24C02應(yīng)答
{
uchar i;
scl=1;
delay();
while((sda==1)&&(i<255))i++;
scl=0;
delay();
}
void write_byte(uchar a) //AT24C02寫一個字節(jié)
{
uchar i,j;
j=a;
for(i=0;i<8;i++)
{
scl=0;
delay();
j=j<<1;
sda=CY;
scl=1;
delay();
}
scl=0;
delay();
sda=1;
delay();
}
uchar read_byte() //AT24C02讀一個字節(jié)
{
uchar i,j;
for(i=0;i<8;i++)
{
scl=0;
delay();
sda=1;
delay();
scl=1;
j=(j<<1)|sda;
delay();
}
return j;
}
void add_write(uchar address,uchar date) //AT240C2任意地址寫一個字節(jié)數(shù)據(jù)
{
start();
write_byte(0xae);
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}
uchar add_read_byte(uchar address) //AT24C02任意地址讀
{
uchar w;
start();
// respons();
write_byte(0xae);
// delayms(100);
respons();
write_byte(address);
respons();
start();
write_byte(0xaf);
respons();
w=read_byte();
stop();
return w;
}
void display(uchar shi,uchar ge) //LED數(shù)碼管顯示
{
//shi=dd/10;
//ge=dd%10;
wei=0;
duan=1;
P0=table[shi];
duan=0;
P0=0xff;
wei=1;
P0=0xfe;
wei=0;
delayms(10);
P0=0xff;
duan=1;
P0=table[ge];
duan=0;
P0=0xff;
wei=1;
P0=0xfd;
delayms(5);
wei=0;
}
void stime() //初始化定時器0并啟動
{
TMOD=0X01;
TH1=(65535-5000)/256;
TH0=(65535-5000)%256;
EA=1;
ET0=1;
TR0=1;
}
void t0()interrupt 1 //定時器0中斷函數(shù)并重新裝初值
{
uchar i;
TH1=(65535-5000)/256;
TH0=(65535-5000)%256;
i++;
if(i==20)
{ write++;
ff=1;
i=0;
if(write==100)
write=0;
}
}
void main() //主程序
{
init();
write=add_read_byte(5);
if(write>100)
write=0;
stime();
while(1)
{
// dd=write;
if(ff==1)
{
add_write(5,write);
ff=0;
}
display(write/10,write%10);
}
}
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1