|
/*************************************************************
AT24C02頭文件
實現(xiàn)功能:AT24C02的控制
補充說明:
***************************************************************/
#ifndef _AT24C02_H_
#define _AT24C02_H_
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
/*********************AT24C02引腳定義*********************/
sbit sda=P2^1;
sbit scl=P2^0;
/*********************AT24C02函數(shù)定義*********************/
void AT24C02_delay(uint n); //延時40*n微妙
void AT24C02_start(); //開始信號
void AT24C02_stop(); //停止信號
void AT24C02_respons(); //應(yīng)答信號
void AT24C02_write(uchar date); //寫數(shù)據(jù)
uchar AT24C02_read(); //讀數(shù)據(jù)
void AT24C02_write_date(uchar address,uchar date);//向address地址寫輸dete數(shù)據(jù)
uchar AT24C02_read_date(uchar address); //向address讀出數(shù)據(jù)并返回
/********************************************************
函數(shù)名稱:void AT24C02_delay(uint n)
函數(shù)作用:AT24C02延時函數(shù)
參數(shù)說明:延時40*n微妙
********************************************************/
void AT24C02_delay(uint n)
{
uint i;
uchar j;
for(i=n;i>0;i--)
for(j=0;j<2;j++);
}
/*********************************************************
函數(shù)名稱:void AT24C02_start()
函數(shù)作用:AT24C02開始信號
參數(shù)說明:
*********************************************************/
void AT24C02_start()
{
sda=1;
_nop_();
_nop_();
scl=1;
_nop_();
_nop_();
_nop_();
_nop_();
sda=0;
_nop_();
_nop_();
}
/*********************************************************
函數(shù)名稱:void AT24C02_stop()
函數(shù)作用:AT24C02停止信號
參數(shù)說明:
*********************************************************/
void AT24C02_stop()
{
sda=0;
_nop_();
_nop_();
scl=1;
_nop_();
_nop_();
_nop_();
_nop_();
sda=1;
_nop_();
_nop_();
}
/*********************************************************
函數(shù)名稱:void AT24C02_respons()
函數(shù)作用:AT24C02應(yīng)答信號
參數(shù)說明:
*********************************************************/
void AT24C02_respons()
{
uchar i;
scl=1;
_nop_();
_nop_();
while((sda=1)&&(i<250))
i++;
scl=0;
_nop_();
_nop_();
}
/*********************************************************
函數(shù)名稱:void AT24C02_write(uchar date)
函數(shù)作用:AT24C02寫一個字節(jié)數(shù)據(jù)
參數(shù)說明:
*********************************************************/
void AT24C02_write(uchar date)
{
uchar i;
scl=0;
for(i=0;i<8;i++)
{
sda = (bit)(date&0x80);
_nop_();
scl=1;
_nop_();
_nop_();
scl=0;
date<<=1;
}
}
/*********************************************************
函數(shù)名稱:uchar AT24C02_read()
函數(shù)作用:AT24C02讀一個字節(jié)數(shù)據(jù)
參數(shù)說明:
*********************************************************/
uchar AT24C02_read()
{
uchar i,k;
for(i=0;i<8;i++)
{
scl=1;
k=(k<<1)|sda;
scl=0;
}
return k;
}
/*********************************************************
函數(shù)名稱:void AT24C02_write_date(uchar address,uchar date)
函數(shù)作用:AT24C02寫數(shù)據(jù)
參數(shù)說明:將數(shù)據(jù)date寫入到address地址里
*********************************************************/
void AT24C02_write_date(uchar address,uchar date)
{
AT24C02_start(); //開始信號
AT24C02_write(0xa0); //寫時候。寫入AT24C02器件地址,由于器件引腳A2,A1,A0都是接地,所以器件地址為0xa0
AT24C02_respons(); //應(yīng)答信號
AT24C02_write(address); //寫入將要存放數(shù)據(jù)的地址
AT24C02_respons(); //應(yīng)答信號
AT24C02_write(date); //寫入數(shù)據(jù)
AT24C02_respons(); //應(yīng)答信號
AT24C02_stop(); //停止信號
AT24C02_delay(150);
}
/*********************************************************
函數(shù)名稱:uchar AT24C02_read_date(uchar address)
函數(shù)作用:AT24C02讀數(shù)據(jù)
參數(shù)說明:向address地址里讀出一個數(shù)據(jù),并返回
*********************************************************/
uchar AT24C02_read_date(uchar address)
{
uchar date;
AT24C02_start(); //開始信號
AT24C02_write(0xa0); //寫時候。寫入AT24C02器件地址,由于器件引腳A2,A1,A0都是接地,所以器件地址為0xa0
AT24C02_respons(); //應(yīng)答信號
AT24C02_write(address);//寫入將要讀取數(shù)據(jù)的地址
AT24C02_respons(); //應(yīng)答信號
AT24C02_start(); //開始信號
AT24C02_write(0xa1); //讀時候。寫入AT24C02器件地址,由于器件引腳A2,A1,A0都是接地,所以器件地址為0xa1
AT24C02_respons(); //應(yīng)答信號
date=AT24C02_read(); //讀取數(shù)據(jù)
AT24C02_stop();
AT24C02_delay(150);
return date; //返回數(shù)據(jù)
}
#endif |
|