原创 学习笔记:I2c总线原理及应用(3)

2012-3-28 20:42 1361 11 12 分类: MCU/ 嵌入式

 

(4)数据帧格式

    在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/W),用“0”表示主机发送数据(W),“1”表示主机接收数据(R)。数据传输一般由主机产生停止位终止。但是,如果主机仍希望在总线上通讯,它可以产生重复起始条件和寻址另一个从机,而不是首先产生一个停止条件。在这种传输中可能有不同的读/写格式组合。

1.gif

 

单片机IO口模拟I2C总线发送与接收数据

 

/****************************************************************

函数名称:Send_Byte

函数功能:发送一字节数据

入口参数:dat  //要发送的8位数据

出口参数:

备 注:

*****************************************************************/

void  Send_Byte(unsigned char dat)

{

unsigned char i;

 

for(i=0;i<8;i++)  

{

if((dat< )&0x80)>

sda=1;   

else  

sda=0;                

_nop_();

scl=1;               //置时钟线为高,通知从机开始接收数据位

_nop_(); 

_nop_();            

_nop_();

_nop_();

_nop_();         

scl=0; 

}

 

_nop_();

_nop_();

sda=1;               //8位发送完后释放数据线,准备接收应答位

_nop_();

_nop_();   

scl=1;

_nop_();

_nop_();

_nop_();

if(sda==1)

ack=0;     

else 

ack=1;        //判断是否接收到应答信号

scl=0;

_nop_();

_nop_();

}

 

/****************************************************************

函数名称:Rcv_Byte

函数功能:接收一字节数据

入口参数:无

出口参数:dat  //将接收到出来的一字节数据赋给dat变量,并返回dat

备 注:

*****************************************************************/

unsigned char Rcv_Byte()

{

unsigned char dat;

unsigned char i;

 

sda=1;          //置数据线为输入方式

for(i=0;i<8;i++)

{

   _nop_();           

   scl=0;       //置时钟线为低,准备接收数据位

   _nop_();

   _nop_();      

   _nop_();

   _nop_();

   _nop_();

   scl=1;        //置时钟线为高使数据线上数据有效

   _nop_();

   _nop_();

   dat<<=1;

   if(sda==1) //读数据位,接收的数据位放入dat中

dat++;    

   _nop_();

   _nop_(); 

}

scl=0;    

_nop_();

_nop_();

return(dat);

}

 

(5)7位总线寻址

    I2c总线的寻址过程是通常在起始条件后的第一个字节决定了主机选择哪一个从机。第一个字节的头7位组成了从机地址。最低位(LSB)是第8位,它决定了报文的方向。最低位为0表示主机写数据到被选中从机,1表示主机向从机读数据。

   当发送了一个地址后,系统中的每个器件都在起始条件后将头7位与它自己的地址比较。如果一样,器件会认为它被主机寻址,至于是从机-接收器还是从机-发送器由第8位决定。

    从机地址由一个固定和一个可编程的部分组成。可编程地址位的数量由它可使用的管脚决定。固定部分通常决定了所连接器件的类型。

 
i2c
PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户347025 2012-8-27 11:46

学习中……
相关推荐阅读
用户419752 2012-05-08 04:22
学习笔记:AT24C02串行EEPROM的应用
   AT24C02是Atmel公司生产的低功耗CMOS型EEPROM,内含2K bit,即256字节存储空间。它采用I2C总线方式进行数据读写,可工作于标准模式、快速模式和高速模式。硬件电路...
用户419752 2012-03-28 20:51
学习笔记:PCF8591的应用
PCF8591是单片、单电源低功耗8位CMOS数据采集器件,具有4个模拟输入、一个输出和一个串口I2C总线接口。3个地址引脚A0、A1、A2用于硬件地址编址,允许将最多8个器件连接至I2C总线而不...
用户419752 2012-03-28 20:43
学习笔记:AQM-300空气质量传感器的应用
  AQM-300是深圳祥帆电子生产的空气质量传感器,它有低功耗、稳定性好、应用简单,灵敏度高等特点。能检测到氨气、氢气、酒精、一氧化碳、甲烷、丙烷、甘烷、苯乙烯、丙二醇、酚、甲苯、乙苯、二甲...
用户419752 2012-03-28 20:38
学习笔记:I2c总线原理及应用(2)
  (3)数据传输     发送到SDA线上的每个字节必须为8位。每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应位(即一帧9位)。首先传输的是数据的最高位(MSB)。如果从机...
用户419752 2012-03-28 20:36
学习笔记:I2c总线原理及应用(1)
    I2c总线支持任何IC生产过程(NMOS\CMOS\双极性)。两线----串行数据线(SDA)和串行时钟线(SCL)在连接到总线的器件间传递信息。每个器件都有唯一的地址识别,而且都可以...
我要评论
1
11
关闭 站长推荐上一条 /3 下一条