📄 at24c02.h
字号:
/*-----------------------------------------*/
//File: AT24C2.H
//Data: 2008.6.9//3:06 PM
//Amend: 08-8-1 19:31
//Version: Ver0.2
//Thanks: Web
//Code: I love C51~
/*-----------------------------------------*/
#ifndef __AT24C02_H__
#define __AT24C02_H__
/*-----------------------------------------*/
#define unchar unsigned char
#define unint unsigned int
#define unlong unsigned long
/*-----------------------------------------*/
#define WriteDeviceAddress 0xa0 //写
#define ReadDeviceAddress 0xa1 //读
sbit SCL = P2^0; //串行接口定义
sbit SDA = P2^1;
/*-----------------------------------------*/
//函数声明
void delay1ms(void); //延时1ms
void Start(void); //开始总线
void Stop(void); //结束总线
void NoAck(void); //发送ACk0
bit TestAck(void); //测试ACk
void Write8Bit(unchar input); //写入8个Bit 到24C02
void Write24C02(unchar ch,unchar address);//写入一个字到24C02中的指定地址中
unchar Read8Bit(void); //从24C02中读出8个Bit
unchar Read24C02(unchar address); //从24C02指定地址位置中读出1个字节
/*-----------------------------------------*/
//延时1000us
void delay1ms(void)
{
unsigned char i,j,k;
for(i=5;i>0;i--)
for(j=28;j>0;j--)
for(k=2;k>0;k--);
}
/*-----------------------------------------*/
//开始总线
void Start(void)
{
SDA=1;
SCL=1;
SDA=0;
SCL=0;
}
/*-----------------------------------------*/
//结束总线
void Stop(void)
{
SCL=0;
SDA=0;
SCL=1;
SDA=1;
}
/*-----------------------------------------*/
//发送ACk0
void NoAck(void)
{
SDA=1;
SCL=1;
SCL=0;
}
/*-----------------------------------------*/
//测试ACk
bit TestAck(void)
{
bit ErrorBit;
SDA=1;
SCL=1;
ErrorBit=SDA;
SCL=0;
return (ErrorBit);
}
/*-----------------------------------------*/
//写入8个Bit 到24C02
void Write8Bit(unchar input)
{
unchar temp;
for(temp=8;temp!=0;temp--)
{
SDA=(bit)(input&0x80);
SCL=1;
SCL=0;
input<<=1;
}
}
/*-----------------------------------------*/
//写入一个字到24C02中的指定地址中
void Write24C02(unchar ch,unchar address)
{
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(address);
TestAck();
Write8Bit(ch);
TestAck();
Stop();
delay1ms(); //延迟时间1ms!!!
}
/*-----------------------------------------*/
//从24C02中读出8个Bit
unchar Read8Bit(void)
{
unchar temp,rbyte=0;
for(temp=8;temp!=0;temp--)
{
SCL=1;
rbyte<<=1;
rbyte|=((unchar)(SDA));
SCL=0;
}
return (rbyte);
}
/*-----------------------------------------*/
//从24C02指定地址位置中读出1个字节
unchar Read24C02(unchar address)
{
unchar ch;
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(address);
TestAck();
Start();
Write8Bit(ReadDeviceAddress);
TestAck();
ch=Read8Bit();
NoAck();
Stop();
return (ch);
}
/*-----------------------------------------*/
/*
//应用举例
void main(void)
{
unsigned char i;
for(i=0;i<256;i++)
{
Write24C02(i,i);
P1=Read24C02(i);
delayms(1000);
}
while(1);
}
*/
/*-----------------------------------------*/
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -