IIC总线的C51程序中的个别指令的问题?

//开始总线voidStart(){SDA=1;?SCL=1;?SDA=0;?SCL=0;?}//结束总线voidStop(){SCL=0;?SDA=0;?SCL=1;?... //开始总线
void Start()
{
SDA=1; ?
SCL=1; ?
SDA=0; ?
SCL=0; ?
}

//结束总线
void Stop()
{
SCL=0; ?
SDA=0; ?
SCL=1; ?
SDA=1; ?
}

//测试ACK
bit TestAck()
{
bit ErrorBit;
SDA=1; ?
SCL=1; ?
ErrorBit=SDA; ??
SCL=0; ??
return(ErrorBit);
}

//写入8个bit到24c02
Write8Bit(uchar input)
{
uchar temp;
for(temp=8;temp!=0;temp--)
{
SDA=(bit)(input&0x80);
SCL=1; ??
SCL=0; ??
input=input<<1;
}
}

//写入一个字节到24c02中
void Write24c02(uchar ch,uchar address)
{
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(address);
TestAck();

Write8Bit(ch);
TestAck();

Stop();
DelayMs(10);
}
打问号的,不知有没有高手帮忙解释一下,谢谢,最好是能讲一下时序???谢谢啊,
谢谢你的回答,不过你发的这些的资料我都有,也明白;我只是不太懂在程序中,IIC指令在传送数据时的具体执行过程,即SDA与SCL信号在程序中具体传送时序或过程 比如
SDA=1; SDA为高电平信号,在IIC未用时高电平(上拉)
SCL=1; scl为高电平信号,在IIC未用时高电平(上拉)
SDA=0; SDA由高到低跳变,scl仍为高,为起始信号
SCL=0;
我主要是想问,信号的高、低脉宽只是运行一个或几个指令周期来区分的吗?
就是它的指令时序是怎么样的?
展开
 我来答
worldk
2010-06-07 · TA获得超过148个赞
知道答主
回答量:84
采纳率:0%
帮助的人:87.5万
展开全部

在目前比较流行的几种串行扩展总线中,IIC总线以其严格的规范和众多带IIC接口的外围器件而获得广泛的应用。 IIC总线是PHILIPS公司推出的芯片间串行传输总线。它以1根串行数据线(SDA)和1根串行时钟线(SCL)实现了全双工的同步数据传输。随着IIC总线研究的深入,它已经广泛应用于视/音频领域、IC卡行业和一些家电产品中,在智能仪器、仪表和工业测控领域也越来越多地得到应用。

1. IIC总线硬件结构

IIC串行总线有两根信号线:一根双向的数据线SDA;另一根是时钟线SCL。所有接到IIC总线上的设备的串行数据都接到总线的SDA线,各设备的时钟线SCL接到总线的SCL。 

总线对设备接口电路的制造工艺和电平都没有特殊的要求(NMOS、CMOS都可以兼容)。数据传送率按IIC总线可高达每秒十万位,高速方式可高达每秒四十万位。

 总线的运行(数据传输)由主控器控制。主控器启动数据的传送(发出启动信号),发出时钟信号,传送结束时发出停止信号,通常主控器是微处理器。被主控器寻访的设备都称为从机。为了进行通讯,每个接到IIC总线的设备都有一个唯一的地址,以便于主控器寻访。

2. IIC总线时序 

 在IIC总线传输过程中,将两种特定的情况定义为开始和停止条件(如图1):当SCL保持“高”,SDA由“高”变为“低”时为开始条件;SCL保持“高”,SDA由“低”变为“高”是为停止条件。开始和停止条件由主控器产生。使用硬件接口可以很容易地检测开始和停止条件,没有这种接口的微机必须以每时钟周期至少两次对SDA取样以检测这种变化。

                        图1   总线开始/停止 

SDA线上的数据在时钟“高”期间必须是稳定的,只有当SCL线上的时钟信号为低时,数据线上的“高”或“低”状态才可以改变。

输出到SDA线上的每个字节必须是8位,每次传输的字节不受限制,每个字节必须有一个应答为ACK。如果一接收器件在完成其他功能(如一内部中断)前不能接收另一数据的完整字节时,它可以保持时钟线SCL为低,以促使发送器进入等待状态,当接收器械准备好接受数据的其它字节并释放时钟SCL后,数据传输继续进行。IIC数据总线传送时序如图2。

            图2 总线数据传送时序

数据传送具有应答是必须的。与应答对应的时钟脉冲由主控器产生,发送器在应答期间必须下拉SDA线。当寻址的被控器件不能应答时,数据保持为高,接着主控器产生停止条件终止传输。在传输的过程中,当用到主控接收器的情况下,主控接收器必须发出一数据结束信号给被控发送器,被控发送器必须释放数据线,以允许主控器产生停止条件。合法的数据传输格式如图3所示:

  

超始位 被控接收器地址 R/W 应答位 数据 应答位 、、、、 停止位 

 图3

IIC总线在开始条件后的首字节决定哪个被控器将被主控器选择,例外的是“通用访问”地址,它可以寻址所有期间。当主控器输出一地址时,系统中的每一器件都将开始条件后的前七位地址和自己地址比较。如果相同,该器件认为自己被主控器寻址,而作为被控接收器或被控发送器则取决于R/W位。

3. IIC总线特点

由上面的介绍可以看出IIC总线的特点主要表现在以下几个方面: (1) 硬件结构上具有相同的硬件接口界面。IIC总线系统中,任何一个IIC总线接口的外围器件,不论其功能差别有多大,都是通过串行数据线(SDA)和串行时钟线(SCL)连接到IIC总线上。这一特点给用户在设计应用系统中带来了极大的便利性。用户不必理解每个IIC总线接口器件的功能如何,只要将器件的SDA和SCL引脚连到IIC总线上,然后对该器件模块进行独立的电路设计,从而简化了系统设计的复杂性,提高了系统抗干扰的能力,符合EMC (Electromagnetic Compatibility)设计原则。 (2) 总线接口器件地址具有很大的独立性。在单主系统中,每个IIC接口芯片具有惟一的器件地址,由于不能发出串行时钟信号而只能作为从器件使用。各器件之间互不干扰,相互之间不能进行通信,各个器件可以单独供电。FPGA与IIC器件之间的通信是通过独一无二的器件地址来实现的。 (3) 软件操作的一致性。由于任何器件通过IIC总线与DSP进行数据传送的方式是基本一样的,这就决定了IIC总线软件编写的一致性。 (4) PHILIPS公司在推出IIC总线的同时,也为IIC总线制订了严格的规范,如:接口的电气特性、信号时序、信号传输的定义等。规范的严密性,结构的独立性和硬、软件接口界面的一致性,极大地方便了IIC总线设计的模块化和规范化。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xjtu_drum/archive/2006/09/13/1219159.aspx

ddrpc133
2010-06-19
知道答主
回答量:10
采纳率:0%
帮助的人:12.8万
展开全部
你好
首先,IIC 的 数据pin(SDA) 和时钟pin(SCL)应该加上拉
SDA=1 表示将 数据pin 设置为高电平,在SDA=0之前一直维持高电平
希望这个表示你能看懂:
-------------________
SDA=1 SDA=0
前提: 设置SDA=1
设置SDA=0之前,SDA 一直维持高电平
高电平维持时间有IC的指令周期决定

假设一个指令周期为 300us
那么
SDA=1;
SDA=0;
就只有300us 的高电平。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式