资源简介
I2C软件模拟时序,独立文件,可以直接调用,移植性高,只需修改数据时钟线
代码片段和文件信息
sbit SCL=P1^0; //IIC时钟引脚定义
sbit SDA=P1^1; //IIC数据引脚定义
#define uchar unsigned char
#define uint unsigned int
#define SlaveAddress 0xA6 //定义器件在IIC总线中的从地址根据ALT ADDRESS地址引脚不同修改
//ALT ADDRESS引脚接地时地址为0xA6,接电源时地址为0x3A
typedef unsigned char BYTE;
typedef unsigned short WORD;
void Delay5us()
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
}
void Delay5ms()
{
WORD n = 560;
while (n--);
}
void I2C_Start()
{
SDA = 1; //拉高数据线
SCL = 1; //拉高时钟线
Delay5us(); //延时
SDA = 0; //产生下降沿
Delay5us(); //延时
SCL = 0; //拉低时钟线
}
void I2C_Stop()
{
SDA = 0; //拉低数据线
SCL = 1; //拉高时钟线
Delay5us(); //延时
SDA = 1; //产生上升沿
Delay5us(); //延时
}
void I2C_SendACK(bit ack)
{
SDA = ack; //写应答信号
SCL = 1; //拉高时钟线
Delay5us(); //延时
SCL = 0; //拉低时钟线
Delay5us(); //延时
}
bit I2C_RecvACK()
{
SCL = 1; //拉高时钟线
Delay5us(); //延时
CY = SDA; //读应答信号
SCL = 0; //拉低时钟线
Delay5us(); //延时
return CY;
}
void I2C_SendByte(BYTE dat)
{
BYTE i;
for (i=0; i<8; i++) //8位计数器
{
dat <<= 1; //移出数据的最高位
SDA = CY; //送数据口
SCL = 1; //拉高时钟线
Delay5us(); //延时
SCL = 0; //拉低时钟线
Delay5us(); //延时
}
ADXL345_RecvACK();
}
BYTE I2C_RecvByte()
{
BYTE i;
BYTE dat = 0;
SDA =
- 上一篇:数据结构课程设计-航空订票系统
- 下一篇:编译原理 词法分析器
相关资源
- arduino I2C设备扫描并串口返回地址(
- Delphi2Cppdelphi代码转换为C++代码
- HDC1080驱动 温湿度 STM32 IIC I2C
- C8051F310虚拟I2C C语言代码
- 树莓派-OLED013-I2C-C.rar
- 关于STM8的I2C实用例程2
- I2C通信程序的C语言详细
- P89LPC932硬件I2C软件包
- mpu9250九轴姿态用STM32F103实现I2C通信
- STM32F3 LCD1602 I2C驱动代码 C语言
- HAL基础实验源码09 stm32cubemx-F429IGT6扩展
- STM32_HI2C_OLED硬件方式驱动OLED
- STM32F030硬件I2C从设备测试程序
- STM32的IO模拟I2C主机_硬件I2C从机
- STM32F030的硬件I2C从机
- STM32 I2C通信
- 51单片机的AD/DA仿真程序/PCF8591
- pic i2c硬件通信程序 c语言
- STM32 GPIO 模拟IIC I2C c语言 源代码测试
评论
共有 条评论