3回答

0收藏

模拟I2C驱动程序,如果觉得好请支持一下!

其他 其他 3129 人阅读 | 3 人回复 | 2008-05-30

//=====================================================================================
//? Module Name :? I2C.c
//? CreateDate? :? 2008-3-1
//? ModifData?? :? 2008-3-1
//? Description :? 软件模拟I2C驱动程序.参考了周立功模拟I2C(晶振频率要小于12MHZ)
//? Author????? :? LuoWei
//? Version???? :? V1.0
//=====================================================================================
#include "reg52.h"

sbit SDA=&quot1"^7;??????????? ??????//模拟I2C数据传送位
sbit SCL=&quot1"^6;??????????? ??????//模拟I2C时钟控制位
bit ack;????????? ???????//应答标志位
?
//--------------------------------------------------------------------------
//函数名称:????? I2C_Delay(uint us)
//函数功能:????? 用于I2C的us级延时
//其他说明:????? 无
//--------------------------------------------------------------------------
?
void I2C_Delay(uint us)
{
?while(--us);?
}

//--------------------------------------------------------------------------
//函数名称:????? void? I2C_Start()
//函数功能:????? 起动总线函数
//其他说明:????? 启动I2C总线,即发送I2C起始条件.
//--------------------------------------------------------------------------
void I2C_Start(void)
{
?SDA=1;?? ??//发送起始条件的数据信号
?I2C_Delay(1);
?SCL=1;
?I2C_Delay(2);?? //起始条件建立时间大于4.7us延时
?SDA=0;?? ??//发送起始信号
?I2C_Delay(2);????
?SCL=0;?? ??//钳住I2C总线,准备发送或接收数据
?I2C_Delay(2);
}

//--------------------------------------------------------------------------??????
//函数名称:????? void I2C_Stop()
//函数功能:????? 结束总线函数
//其他说明:????? 结束I2C总线,即发送I2C结束条件.
//--------------------------------------------------------------------------
void I2C_Stop(void)
{
?SDA=0;? ??//发送结束条件的数据信号
?I2C_Delay(1);?? //发送结束条件的时钟信号
?SCL=1;? ??//结束条件建立时间大于4μ
?I2C_Delay(2);
?SDA=1;? ??//发送I2C总线结束信号
?I2C_Delay(2);
}

//--------------------------------------------------------------------------??????
//函数名称:????? void? SendByte(uchar c)
//函数功能:????? 字节数据传送函数
//其他说明:????? 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
//?????????????? 此状态位进行操作.(不应答或非应答都使ack=0 假)????
//?????????????? 发送数据正常,ack=1; ack="0表示被控器无应答或损坏"。
//--------------------------------------------------------------------------

void? SendByte(uchar c)
{
?uchar BitCnt;
?
?for(BitCnt=0;BitCnt
分享到:
回复

使用道具 举报

回答|共 3 个

倒序浏览

沙发

zxasdfghjkl

发表于 2008-8-29 21:30:45 | 只看该作者

回复:模拟I2C驱动程序,如果觉得好请支持一下!

谢谢了很好的资料!
回复 支持 反对

使用道具 举报

板凳

sadle

发表于 2008-9-22 20:05:38 | 只看该作者

RE:模拟I2C驱动程序,如果觉得好请支持一下!

回复 支持 反对

使用道具 举报

地板

deeepsea-6967

发表于 2008-9-23 15:47:03 | 只看该作者

RE:模拟I2C驱动程序,如果觉得好请支持一下!

不错哎。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条