单片机IIC总线(实测通过)

本文不深入讲解IIC总线原理,主要介绍其在单片机中的软件模拟实现,特别是针对89C51/52系列等低端芯片。作者提供了基于STC12C5A60S2单片机的代码实现,包括C文件和H文件,已通过DS1307和OLED等IIC设备的测试。如遇到问题,可留言交流。
摘要由CSDN通过智能技术生成

不讲原理(网上详细讲原理的有很多),只讲其代码实现。对于单片机使用者来说,IIC总线通讯实现具体分两种,一种是硬件实现,另一种是软件模拟,硬件实现相对简单,一般芯片数据手册会提供官方例程,只需要配置寄存器就可以,所以今天不讲IIC的硬件实现。至于软件模拟,大部分会用在相对低端的芯片上,比如89C51/52系列等,有时即便是带有硬件IIC的芯片也会使用软件模拟,因为有些硬件IIC做的并不完美。下面就以代码加注释的方式实现IIC通讯。(说明:测试单片机为STC12C5A60S2,晶振11.0592M,完全测试通过)

C文件

#include "IIC.h"
void Delayms(unsigned int ms)		//毫秒级延时函数
{
   
	unsigned char i, j;
	unsigned int k;
	for(k=0;k<ms;k++)
	{
   
			_nop_();
			i = 11;
			j = 190;
			do
			{
   
				while (--j);
			} while (--i);
	}
}
void Delay2us()	     //2us延时,用于稳定IO状态
{
   
	unsigned char i;

	_nop_();
	_nop_();
	i = 2;
	while (--i);
}
void IIC_Delay()	//IIC延时,需大于4.7us,这里取8us
{
   
		unsigned char i;
	  i = 19;
	  while (--i);
}
void IIC_IO_Init()      //IO口初始化,使总线处于空闲状态
{
   
    IIC_SCL = 1;
    IIC_SDA = 1;
}
void IIC_Start()      //总线开始
{
   
	IIC_SDA = 1;
    IIC_SCL =
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值