📄 24c02.c
字号:
#include <reg52.h>
#define uchar unsigned char //定义一下方便使用
#define uint unsigned int
#define ulong unsigned long
sbit SCL=P3^7; //24c02时钟信号
sbit SDA=P3^6; //24c02数据端
/************************************
延时程序
*************************************/
void delay()
{
uchar i;
for(i=248;i>0;i--);
}
/************************************
开始总线
*************************************/
void start()
{
SDA=1;
SCL=1;
SDA=0;
SCL=0;
}
/*************************************
结束总线
**************************************/
void stop()
{
SCL=0;
SDA=0;
SCL=1;
SDA=1;
}
/*************************************
发ack0
**************************************/
void noack()
{
SDA=1;
SCL=1;
SCL=0;
}
/*************************************
应答子函数
**************************************/
bit ack()
{
bit e;
SDA=1;
SCL=1;
e=SDA;
SCL=0;
return(e);
}
/**************************************
写8个bit到24C02
为写字节作准备
**************************************/
void wb(uchar input)
{
uchar j;
for(j=8;j>0;j--)
{
SDA=(bit)(input&0x80);
SCL=1;
SCL=0;
input=input<<1;
}
}
/***************************************
写一个字节到24c02
****************************************/
void w(uchar d,uchar a)
{
start();
wb(0xa0); //写入指令0xa0,该指令表示准备对24c02进行写操作
ack();
wb(a); //先写要存数据的地址
ack();
wb(d); //再写要存数据
ack();
stop();
delay();
}
/**************************************
从24C02中读8个bit
为读字节作准备
***************************************/
uchar rb()
{
uchar j,rb=0;
for(j=8;j>0;j--)
{
SCL=1;
rb=rb<<1;
rb=rb|((uchar)(SDA));
SCL=0;
}
return(rb);
}
/****************************************
从24c02中读一个字节
*****************************************/
uchar r(uchar a)
{
uchar d; //读操作得到的数据
start();
wb(0xa0); //写入指令0xa0,该指令表示准备对24c02进行写操作
ack();
wb(a); //写入要读数据的地址a
ack();
start();
wb(0xa1); //写入指令0xa1,该指令表示准备对24c02进行读操作
ack();
d=rb(); //从地址a中读出数据
noack();
stop();
return(d); // 返回得到的数据
}
/****************************************
试验主函数
*****************************************/
void main(void)
{
uchar c1,c2;
w(0xf0,0x02); //写0xf0到地址0x02
w(0x0f,0x03); //写0x0f到地址0x03
c1=r(0x02); //从地址0x02读出数据
c2=r(0x03); //从地址0x03读出数据
P1=c1;
P2=c2;
while(1); //程序挂起
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -