📄 i2c.c
字号:
/*
File: I2C.c
说明: IIC总线操作
Author:wolfe
Data: 2008.10
*/
#include "at89x52.h"
#include "ES51_II.h"
#include "es51_ii_lib.h"
#include <intrins.h>
#define DELAY_1US {_nop_();}
// 操作起始
void I2c_Start(void)
{
SDA = 1; // 发送起始条件的数据信号
SCL = 1;
DELAY_1US;
SDA = 0; // 发送起始信号
DELAY_1US;
SCL = 0; // 钳住I2C总线,准备发送或接收数据
}
// 操作结束
void I2c_Stop(void)
{
SDA = 0;
DELAY_1US;
SCL = 1;
DELAY_1US;
SDA = 1; // 发送I2C总线结束信号
DELAY_1US;
SDA = 1;; //
}
//写一个字节数据
void I2c_WrByte(unsigned char dat)
{
unsigned char i;
for(i=0;i!=8;i++) // 输出8位数据
{
if( dat & 0x80 )
SDA = 1;
else
SDA = 0;
DELAY_1US;
SCL = 1;
dat<<=1;
DELAY_1US;
SCL = 0;
}
SDA = 1;
DELAY_1US;
SCL = 1; // 接收应答
DELAY_1US;
SCL = 0;
}
//读一个字节数据
unsigned char I2c_RdByte(void)
{
unsigned char dat,i;
SDA = 1;
dat=0;
for(i=0;i!=8;i++) // 输入8位数据
{
DELAY_1US; // 可选延时
SCL = 1;
DELAY_1US; // 可选延时
dat<<=1;
if( SDA )
dat++; // 输入1位
SCL = 0;
}
SDA = 1;
DELAY_1US;
SCL = 1; // 发出无效应答
DELAY_1US;
SCL = 0;
return(dat);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -