查看: 2930|回复: 3

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

[复制链接]

该用户从未签到

发表于 2008-5-30 10:32:10 | 显示全部楼层 |阅读模式
分享到:
//=====================================================================================
//  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
回复

使用道具 举报

该用户从未签到

发表于 2008-8-29 21:30:45 | 显示全部楼层

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

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

使用道具 举报

该用户从未签到

发表于 2008-9-22 20:05:38 | 显示全部楼层

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

回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2008-9-23 15:47:03 | 显示全部楼层

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

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

使用道具 举报

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

本版积分规则

关闭

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



手机版|小黑屋|与非网

GMT+8, 2024-12-28 23:49 , Processed in 0.164092 second(s), 21 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.