📄 cat02.c
字号:
#include <reg52.h> /* special function registers 8052 */
#define HIGH 1
#define LOW 0
#define FALSE 0
#define TRUE ~FALSE
#define WRITE 0xA0
#define READ 0xA1
sbit SCL=P2^1;
sbit SDA=P2^0;
extern void delay(unsigned int); /*延时子程序*/
/*提供I2C总线工作时序中的起始位*/
void I_start(void)
{
SCL=HIGH;
delay(1);
SDA=LOW;
delay(1);
SCL=LOW;
delay(1);
}
/*提供I2C总线工作时序中的停止位*/
void I_stop(void)
{
SDA=LOW;
delay(2);
SCL=HIGH;
delay(2);
SDA=HIGH;
delay(2);
SCL=LOW;
delay(2);
}
/*总线初始化*/
void CAT_init(void)
{
SCL=LOW;
I_stop();
}
/*提供总线时钟信号,可发送数据,也可接受数据*/
bit I_clock(void)
{
bit sample;
SCL=HIGH;
delay(1);
sample=SDA;
SCL=LOW;
delay(1);
return(sample);
}
/*发送8位数据,请求应答信号,如果受到则返回1,否则返回0*/
bit I_send(unsigned char I_data)
{
unsigned char i;
for (i=0;i<8;i++)
{
SDA=(bit)(I_data & 0x80);
I_data=I_data<<1;
I_clock();
}
SDA=HIGH;
return(~I_clock());
}
/*接受8位数据*/
unsigned char I_receive(void)
{
unsigned char I_data=0;
unsigned char i;
for (i=0;i<8;i++)
{
I_data*=2;
if(I_clock())
I_data++;
}
return(I_data);
}
/*发送应答信号*/
/*
void I_Ack(void)
{
SDA=LOW;
I_clock();
SDA=HIGH;
}
*/
/*发送地址*/
bit E_adrs(unsigned char Address)
{
I_start();
if(I_send(WRITE))
return(I_send(Address));
else
return(FALSE);
}
/*读CAT24WC01,成功返回所读的值,不成功返回0*/
unsigned char CAT_read(unsigned char read_add)
{
unsigned char retval;
CAT_init();
if (E_adrs(read_add))
{
I_start();
if (I_send(READ))
{
retval=(I_receive());
I_clock();
I_stop();
return(retval);
}
else
{
I_stop();
return(0);
}
}
else
{
I_stop();
return(0);
}
}
/*写CAT24WC01,成功返回1,不成功返回0*/
unsigned char CAT_write(unsigned char data_wrt,unsigned char add_wrt)
{
CAT_init();
if(E_adrs(add_wrt) && I_send(data_wrt))
{
I_stop();
delay(5);
return(1);
}
else
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -