📄 at24c02.c
字号:
#include <AT89X52.H>
//24c02驱动
sbit sclk_ = P1^4; //定义时钟线
sbit sdat_ = P1^5; //定义数据线
//sbit sclk_ = P1^1; //定义时钟线
//sbit sdat_ = P1^2; //定义数据线
// Start condition
void ee_start(void)
{
sdat_ = 1; //数据线0->1跳变为起始信号
sclk_ = 1;
sclk_ = 1;
sdat_ = 0;
sclk_ = 0;
}
// Stop condition
void ee_stop(void)
{
sdat_ = 0; //数据线1->0跳变为停止信号
sclk_ = 1;
sclk_ = 1;
sdat_ = 1;
}
// Send byte to AT24C16.
// SCL, SDA expected low on entry.
// Return with SCL low and C=Ack.
bit ee_bout(unsigned char outdat)
{
unsigned char i;
for(i = 0; i < 8; i++) {
outdat <<= 1;
sdat_ = CY;
sclk_ = 1; // ** latch bit
sclk_ = 1;
sclk_ = 0;
}
sdat_ = 1; // ** release sdat_ for ACK
sclk_ = 1;
sclk_ = 1;
CY = sdat_;
sclk_ = 0;
return (CY);
}
// AT24C16 Byte Write Function.
// Called with Address in addr, Data in outdat
void ee_write(unsigned int addr, unsigned char outdat)
{
unsigned char i;
ee_start();
i = (unsigned char)(addr/256);
i &= 0x7;
i <<= 1;
i |= 0xa0;
ee_bout(i);
ee_bout((unsigned char)(addr%256));
ee_bout(outdat);
ee_stop();
while(1) { // ** wait for internal write cycle complete
ee_start();
if(!ee_bout(i)) break;
}
}
// AT24C16 Random Read Function.
// Called with Byte Address in addr
unsigned char ee_read(unsigned int addr)
{
unsigned char i, j;
ee_start();
i = (unsigned char)(addr/256);
i &= 0x7;
i <<= 1;
i |= 0xa0;
ee_bout(i);
ee_bout((unsigned char)(addr%256));
i++;
ee_start();
ee_bout(i);
sdat_ = 1; // make SDA an input
for(i = 0; i < 8; i++)
{
sclk_ = 1;
j <<= 1;
if(sdat_) j |= 0x1;
sclk_ = 0;
}
ee_stop();
return (j);
}
/*
void main (void)
{
ee_write(1,0xaa);
P2 = ee_read(1) ; // unsigned char ee_read(unsigned int addr)
while (1);
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -