📄 i2c.c
字号:
//**********************************************************
// I2C总线驱动程序源文件
//**********************************************************
#include<reg52.h>
#include<intrins.h>
#include<I2C.h>
void Start(void) //IC2总线开始信号
{
SDA = 1; //发送起始条件的数据信号
SCL = 1;
_nop_();
SDA = 0; //发送起始信号
SCL = 0;
_nop_(); //钳住I2C总线准备发送或接收数据
}
void Stop(void) //I2C总线结束信号
{
SCL = 0;
SDA = 0; //发送结束条件的数据信号
SCL = 1;
_nop_();
SDA = 1;
_nop_(); //发送结束信号
}
void Ack() //主机发送应答信号
{
SDA=0;
_nop_();
SCL=0;
SCL=1;
_nop_();
SCL=0;
SDA=1;
}
void NoAck() //主机发送不应答信号
{
SDA=1;
SCL=0;
SCL=1;
SCL=0;
SDA=0;
}
bit Test_Ack(void) //主器件接收应答信号
{
bit Error;
SDA = 1; //释放数据总线,准备接收应答位
SCL = 1; //置时钟线为高电平,使数据线上数据有效
Error=SDA;
SCL = 0;
return Error;
}
void Write_OneByte(unsigned char Data) //主机向I2C器件写一字节数据
{
uchar i;
for(i=8 ; i ; --i)
{
SDA=(bit)(Data&0x80);
SCL=0;
SCL=1;
SCL=0;
Data <<= 1;
}
}
unsigned char Read_OneByte(void) //主机从I2C总线上读一字节数据
{
uchar i;
uchar Data = 0;
for( i=8 ; i ; --i)
{
SCL = 0;
SCL = 1; //置时钟线为高电平,使数据线上数据有效
Data <<= 1;
Data=Data|((unsigned char)(SDA));
SCL = 0;
}
return Data;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -