IIC总线协议

 II2C C总线的简单的概述

1.( 总线(Inter Integrated Circuit Bus Inter Integrated Circuit Bus):是 ):是Philips Philips公司 公司 推出的串行总线标准(为二线制)。总线上扩展的外围器件及外设接 推出的串行总线标准(为二线制)。

2.总线上扩展的外围器件及外设接 口通过总线寻址,是具备总线仲裁和高低速设备同步等功能的高性能 口通过总线寻址,是具备总线仲裁和高低速设备同步等功能的高性能 多主机总线。

3.特点:组成系统结构简单,占用空间小,芯片管脚的数量少,无需片 选信号,价格低。允许若干兼容器件共享总线,应用比较广泛。总线 选信号,价格低。允许若干兼容器件共享总线,应用比较广泛。总线 的长度可达 的长度可达7.6m 7.6m,传送速度可达 ,传送速度可达400kbps 400kbps,标准速率为 ,标准速率为 100kbps 100kbps。支持多个组件。支持多主控器件(某时刻只能有一个主 。支持多个组件。支持多主控器件(某时刻只能有一个主 控器件),

这是一种比较常用的总线协议,简单,易动。如下图所示:

在单片机芯片的传输系统中,和很多的外围器件的信息传输用的往往都是IIC,目前我所接触的C52单片机芯片主要用的都是这个,EEROM存储,A/D转换,之类都是。

IIC协议(状态规定)

(1).IIC总线其实说的再多也就是两根线而已,SDA(数据传输线)和SCL(时钟信号线),利用两种的线的不同状态去表示信息传送的时候的一些关系,对了忘了说了IIC总线是全双工的,就是传送是同时双向的

(2).在学习IIC时,要明白一个概念,那就是主设备,和从设备。此时就会有两种状态,主发从收,主收从发。其实如果反过来理解也就是一种状态。在设备发送一个信息的时候就是主设备,反之就是从设备。

(3).在上面的(1),讲过两种线的不同状态去表示传送中的关系,总结一下就以下几种:

a.  开始信号:这个是IIC使用时,第一个必须发的信号状态,在SCL为高电平的时候,SDA从低电平上升到高电平,同时上升后保持5us以上(单片机中就是使用_nop_()4个以上,其实你也可以自己去算一下,但是个人觉得没有必要,除非你的很严格)。

b.结束信号:在SCL是高电平的同时,SDA一开始也是高电平,将SDA=0,保持的时间和上面的一样,最后注意将SCL拉低。

c.应答信号:在每次信息传输结束后,都要有主设备将SDA=1,保持一段时间以后(和上面一样),从设备拉低SDA,则表示信息已经接收到了;如果从设备不在接收信息了,一定不要给出SDA=0;给出SDA=1,我测试过,这个必须做。

控制字

由于图片原因不要介意,这个就是IIC总线的控制字的规定。

前四位就是确定使用的是那个设备,EEROM还是A/D,或者别的,这个所谓器件类型识别符,网上都可以搜到,后面的器件片选信号就是设备本身的A2.A1.A0的值,就是硬件地址,我使用的时候一般接地了。最后一位就是判定传输的方向到底是发送还是接收,发送0,接收1.。这个就是比较容易弄了,大家记住就行了。

实际的传输方向和总结:

我目前用过的就是A/D和EEROM,这个两种,所以我就这个两种给大家做一下总结:

A/D(接收):

start信号---------》  发送地址-----------》 发送控制字------------》 start信号 ------------》  发送地址  ----------》 receive 数据----------》 给出不应答的信号就是(SDA=1)-------》stop信号(结束);

EEROM (接收)

start信号---------》发送发送数据控制字------------》  发送地址  ----------》start信号 ------------》发送接收数据的控制字------------》 receive 数据------------》stop信号(结束);

我目前编程的顺序就是这样,给大家做一个思路上的参考;

代码:

这是关于的A/D的输出控制电压转化的数字信号,输出在一排发光二极管显示的代码,仅供参考。

#include <reg52.h>
#include <intrins.h>
#define nops() do {_nop_();_nop_();_nop_();_nop_();}while(0);
unsigned char LSAVE=0x90;
sbit SDA=P2^0;
sbit SCL=P2^1;
sbit DS1302 = P2^4;
sbit WE=P2^7;
sbit DU=P2^6;//12ò?LED
//oˉêyéù?÷
bit ACK();
void doACK(bit b);
void LEDstart();
void LEDend();
unsigned char Recieve();
void Senddata(unsigned char y);
void doACK(bit b){
if(b){
SDA=0;
SCL=1;
nops();
}
else
{ SDA=1;
SCL=1;
nops();
}
SCL=0;
}
bit ACK(){
SCL=1;
SDA=1;
nops();
if(SDA)
{
SCL=0;
LEDend();
return 1;
}
else{
SCL=0;
return 0;
}

}
void LEDstart(){
SDA=1;
SCL=1;
nops();
SDA=0;
nops();
SCL=0;
}

void LEDend(){
SDA=0;
SCL=1;
nops();
SDA=1;
nops();
SDA=0;
}

unsigned char Recieve(){
unsigned char i,dee;
dee=0x00;
for(i=0;i<8;i++){
dee<<=1;
dee|=(unsigned char)SDA;
SCL=1;
nops();
SCL=0;
}
return dee;
}
void Senddata(unsigned char y){
unsigned char i;
for(i=0;i<8;i++){
if (y & 0x80)
SDA = 1;
else
SDA = 0;
SCL=1;
y<<=1;
nops();
SCL=0;
}
}
bit ADdata(unsigned char com,unsigned char *dat){
unsigned char dee;
LEDstart();
Senddata(LSAVE);
if(ACK())
return 1;
Senddata(com);
if(ACK())
return 1;
LEDstart();
Senddata(LSAVE+1);
if(ACK())
return 1;
dee=Recieve();
doACK(0);//±?D?òa2?????ó|
LEDend();
nops();
*dat=dee;

}

void Serial(){//′??úí¨D??ùDèμ???′??÷
SCON=0x50;
PCON=0x00;
TMOD=0x20;
TL1=0xfd;
TH1=0xfd;
TR1=1;
}

void send(unsigned char ans){//·¢?íD??¢
SBUF=ans;
while(TI==0);
TI=0;

}
void main(){

unsigned char i=0;
unsigned char ans=0;
//Serial();
DS1302 = 0;
while(1){
i=ans;//??×?ans?μ×??D??
ADdata(0x42,&ans);//??μ?D?μ?ans?μ
if(i!=ans)//è?1?ans?μ??±?ê±2??ü??±?P1μ??μ
P1=ans;

}
}

(有编码错误请原谅)

作者辛勤劳动,如有转载请标明出处,尊重劳动,人人有责。(标明我的博客ID+网址就行了);欢迎大家挑刺!!!

时间: 2024-11-03 21:54:23

IIC总线协议的相关文章

IIC总线协议基础1

文档类别 文档标识 IIC总线协议基础1 当前版本 V0.2 作    者 Louis 完成时间 2015-05-27 IIC总线协议基础1 IIC总线协议基础1. 1 1.            IIC时序基础知识... 2 1.1        信号线... 2 1.2        开始和结束条件... 2 1.3        数据保持时间... 2 1.4        应答ACK和非应答NACK. 3 1.4.1         应答 ACK. 3 1.4.2         非应答

IIC总线协议和时序

IIC标准速率为100Kbit/s,快速模式400Kbit/s,支持多机通信,支持多主控模块,但是同一时刻只允许有一个主控.由数据线SDA和时钟SCL构成串行总线:每个电路模块都有唯一地址.I2C设备的操作可分为写单个字节存储,写多个字节存储,读单个存储字节和读多个存储字节,操作如下: a)   总线空闲状态 I2C总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态.此时各个器件的输出级的场效应管均处于截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高. b)   启动

十天学会单片机Day5 IIC总线AT2402芯片(EEPROM)应用

1.采用串行总线技术可以使系统的硬件设计大大简化.系统的体积减小.可靠性提高.同时,系统的更改和扩充极为容易. 常用的串行扩展总线有: IIC (Inter IC BUS)总线.单总线(1-WIRE BUS).SPI(Serial Peripheral Interface)总线及Microwire/PLUS等. 2.IIC IIC总线只有两根双向信号线.一根是数据线SDA,另一根是时钟线SCL. IIC总线通过上拉电阻接正电源.当总线空闲时,两根线均为高电平.连到总线上的任一器件输出的低电平,都

十天学会单片机Day6 学会看数据手册 (IIC总线PCF859芯片( A/D D/A)应用)

1.实际电路 2.引脚图 3.地址 高四位为固定地址1001,A2A1A0可编程地址,通过观察实际电路,可知A2A1A0 为000.最低位为读写为,1为读,0为写. 4.控制字 控制寄存器的高半字节用于 允许模拟输出 将模拟输入编程为单端或差分输入 低半字节选择一个由高半字节定义的模拟输入通道.如果自动增量标志(AUTO-INCREMENT FLAG)置1,每次A/D转换后通道号将自动增加. 5.开始 停止信号 1 void Start() 2 { 3 SDA = 1; 4 delay(); 5

IIC(Inter-Integrated Circuit)总线协议浅谈

1.IIC协议的思想 IIC协议可以比喻成“老师点名”:老师相当于主机,学生相当于从机,学生的名字相当于IIC设备的地址.当老师点到某一个学生名字时,每个学生都能听到,但只有被叫到的学生才能回答(响应),被叫学生与老师的对话相当于主机与从机之间的交流(读写). 2.IIC协议的时序   图1 IIC总线概念图 IIC总线的工作方式如图1所示,总线有两条信号线SDA和SCL,SDA是双向三态串行数据,SCL是单向串行时钟.IIC总线可以挂载多个IIC设备,并且相互进行通信由时序控制, IIC协议的

Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析

关于Exynos4412 IIC 裸机开发请看 :Exynos4412 裸机开发 -- IIC总线 ,下面回顾下 IIC 基础概念 一.IIC 基础概念 IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备.IIC总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信.例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇.可随时监

IIC总线硬件工作原理(待完善)

一.IIC基础概念 IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备.IIC总线最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信.例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇.可随时监控内存.硬盘.网络.系统温度等多个参数,增加了系统的安全性,方便了管理. 1.IIC特点 简单:接口在组件上,占用空间小     高效:能够以10Kbp

(转)IIC总线工作原理(1)

转载:http://www.eefocus.com/article/08-07/48416s.html图11-1给出一个由MCU作为主机,通过IIC总线带3个从机的单主机IIC总线系统.这是最常用.最典型的IIC总线连接方式. 物理结构上,IIC系统由一条串行数据线SDA和一条串行时钟线SCL组成.主机按一定的通信协议向从机寻址和进行信息 传输.在数据传输时,由主机初始化一次数据传输,主机使数据在SDA线上传输的同时还通过SCL线传输时钟.信息传输的对象和方向以及信息传输的开始和终 止均由主机决

IIC总线学习基础以及24C02芯片学习(一)

一.IIC总线基础知识 1.IIC总线的特性:A.只有两条总线线路,一条串行数据线SDA,一条串行时钟线SCL.B.每一个连接到总线的器件都可以通过唯一的地址和一直存在的主机/从机关联,并由软件设定地址,也可以由硬件设定地址.主机可以作为主机发送器和主机接收器. 2.关于IIC的几个知识点: 二.24C02EEPROM芯片 1.EEPPROM是电可擦除存储芯片.掉电数据不丢失.管脚和定义如图: 2.24C02的写字节时序: