模拟IIC协议时序
IIC是飞利浦公司开发的两线式串行总线,主要应用在单片机和外围电子器件之间的数据通讯。
IIC总线优点是节约总线数,稳定,快速,是目前芯片制造上非常流行的一种总线,大多数单片机已经片内集成了IIC总线接口,无需用户自己模拟,只需配置相关寄存器即可使用,但是,为了更好地理解IIC总线协议,可以自行按照IIC时序图进行模拟,加深理解。
IIC总线有两条串行线,其一是时钟线SCK,其二是数据线SDA。
在寻常的应用之中,单片机常常作为主机,外围器件作为从机使用。
每一个从机器件都拥有唯一的一个地址,这个地址在芯片手册上会有详细的介绍,一般还需要自行配置芯片管脚上的高低电平,来实现确定从机地址的目的。
硬件设计上,SCK线和SDA线通过典型的4.7K电阻进行上拉,保证两条线空闲时保持高电平状态。
SDA上的数据在SCK高电平期间必须稳定,SDA上的数据在SCK期间才可以被更改。
IIC总线的时序分析:

起始信号:在SCK高电平期间,SDA一个下降沿,即构成了IIC的起始信号。
终止信号:在SCK高电平期间,SDA一个上升沿,即构成了IIC的终止信号。
程序上的模拟如下所示:
1->IIC起始信号模拟程序:
void IIC_start(void)
{
SCK=;
SDA=;
IIC_delay();
SDA=;
IIC_delay();
SCK=;
IIC_delay();
}
2->IIC终止信号模拟程序:
void IIC_end(void)
{
SCK=;
SDA=;
IIC_delay();
SCK=;
IIC_delay();
SDA=;
IIC_delay();
}
IIC发送数据:
在IIC一次发送8位数据,数据发送时,总是高位在前,分8次传送出去。

IIC发送数据模拟程序:
void IIC_write(unsigned char dat)
{
unsigned char temp;
for(temp=0x80;temp!=;temp>>=)
{
if(temp&dat==)
{
SDA=;
}
else
{
SDA=;
}
IIC_delay();
SCK=;
IIC_delay();
SCK=;
}
}
IIC接收应答模拟程序:
bit Get_IIC_ack(void)
{
bit ack;
SDA=; //释放数据线,准备接收应答
SCK=;
if(SDA==)
{
ack=;//无应答信号
}
else
{
ack=;//有应答信号
}
SCK=;
IIC_delay();
return ack;
}
IIC读取数据模拟程序:
unsigned char IIC_Read(void)
{
unsigned char temp;
unsigned char dat;
SDA=; //释放总线准备接收
for(temp=0x80;temp!=;temp>>=)
{
IIC_delay();
SCK=;
if(SDA==)
{
dat|=temp;
}
else
{
dat&=~temp;
}
SCK=;
}
return dat;
}
IIC非应答信号模拟程序:
void IIC_No_ack(void)
{
SDA=;
SCK=;
IIC_delay();
SCK=;
IIC_delay();
}
IIC应答信号模拟程序:
void IIC_ack(void)
{
SDA=;
SCK=;
IIC_delay();
SCK=;
IIC_delay();
}
模拟IIC协议时序的更多相关文章
- 模拟SPI协议时序
SPI是串行外设接口总线,摩托罗拉公司开发的一种全双工,同步通信总线,有四线制和三线制. 在单片机系统应用中,单片机常常是被用来当做主机(MASTER),外围器件被当做从机(SLAVE). 所以,在以 ...
- IIC协议建模——读写EEPROM
案例采用明德扬设计思想完成.IIC协议是非常常用的接口协议,在电子类岗位招聘要求中经常出现它的身影.关于IIC协议这里只做简要介绍,详细信息请自行百度或查阅相关Datasheet,网上资料非常多.该篇 ...
- IIC协议解释(转)
IIC协议解释 推荐资源: http://m.elecfans.com/article/574049.html and https://blog.csdn.net/firefl ...
- IIC协议解释
IIC协议解释 (1)概述 I2C(Inter-Integrated Circuit BUS) 集成电路总线,该总线由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量 ...
- IIC协议解析
(1)概述 I2C(Inter-Integrated Circuit BUS) 集成电路总线,该总线由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距 ...
- stm32软件模拟IIC读取PX4FLOW光流传感器数据
这段时间在做全国光电设计大赛,用到了px4的px4flow光流传感器,用软件模拟iic读取数据不定期会导致px4flow死机,查了资料和光流的源码,发现这个光流用了stm32的硬件iic,所以对软件模 ...
- FPGA基础设计(四):IIC协议
很多数字传感器.数字控制的芯片(DDS.串行ADC.串行DAC)都是通过IIC总线来和控制器通信的.不过IIC协议仍然是一种慢速的通信方式,标准IIC速率为100kbit/s,快速模式速率为400kb ...
- 用I/O口模拟IIC总线协议遇到的一些问题
最近做的一个项目,是基于IIC总线通信的传感器系统.由于另外一个传感器使用的是类IIC协议,而不是标准IIC,所以MCU不能与其通信,最后没有办法,只有通过I/O口模拟的方式实现IIC的总线通信.具体 ...
- 【STM32】IIC的基本原理(实例:普通IO口模拟IIC时序读取24C02)(转载)
版权声明:本文为博主原创文章,允许转载,但希望标注转载来源. https://blog.csdn.net/qq_38410730/article/details/80312357 IIC的基本介绍 ...
随机推荐
- [河南省ACM省赛-第三届] AMAZING AUCTION (nyoj 251)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=251 规则: 1.若某竞标价唯一,则胜出 2.若不存在唯一竞标价,则投标次数最少竞标价中标 ...
- Egret 学习之 入口函数 及开始编写程序(三)
1,Egret的程序入口: C和java是以一个main函数作为入口,但egret类似于ActionScript 是以一个文档类作为入口,确切的说是以这个文档类的构造函数作为入口: 2,文档类的构造函 ...
- SAP HANA 是什么?
HANA(High-Performance Analytic Appliance)高性能分析设备 HANA是一个软硬件结合体,提供高性能的数据查询功能,用户可以直接对大量实时业务数据进行查询和分析,而 ...
- ios 开发证书 appids 描述文件关系
当你准备进行真机测试或者发布应用到App Store上去的时候, 免不了要申请相应的证书.(Development--测试证书. Distribution--发布证书) 进入证书管理相应网站https ...
- Github命令详解
Git bash: ***创建本地版本库: $ cd d: $ mkdir git $ cd git $ mkdir test $ git init //初始化本地库 ***创建文件并添加到版本库 ...
- $.ajax()方法详解 jquery中的ajax方法
jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(p ...
- 动态Order by
),) set @order='' ' select * from T_Table order by then ID end desc, then CreateTime end desc
- Java多线程和死锁
一 .多线程: 售票窗口简单实例: public class SaleTicket { public static class Sale implements Runnable{ ; // @Over ...
- Python入门学习
1.访问www.python.org/download下载并安装Python3版本 2.命令行输入python启动交互式命令shell,>>>代表当前行用户的输入 3.基本算数运算: ...
- EditText文本中用正则匹配是否包含数字,及判断文本只能是纯汉字或纯字母
遇到判断EditText中文本,是否为制定格式 EditText et; Button btn; @Override protected void onCreate(Bundle savedInsta ...