<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 51單片機I2C總線(xiàn)驅動(dòng)程序

51單片機I2C總線(xiàn)驅動(dòng)程序

作者: 時(shí)間:2016-11-18 來(lái)源:網(wǎng)絡(luò ) 收藏
SI2I2C總線(xiàn)是PHLIPS公司推出的一種串行總線(xiàn),是具備多主機系統所需的包括總線(xiàn)裁決和高低速器件同步功能的高性能串行總線(xiàn)。

I2C總線(xiàn)只有兩根雙向信號線(xiàn)。一根是數據線(xiàn)SDA,另一根是時(shí)鐘線(xiàn)SCL。

本文引用地址:http://dyxdggzs.com/article/201611/315583.htm

一.I2C系統結構

每個(gè)接到I2C總線(xiàn)上的器件都有唯一的地址。主機與其它器件間的數據傳送可以是由主機發(fā)送數據到其它器件,這時(shí)主機即為發(fā)送器。由總線(xiàn)上接收數據的器件則為接收器。

二.數據位的有效性規定

I2C總線(xiàn)進(jìn)行數據傳送時(shí),時(shí)鐘信號為高電平期間,數據線(xiàn)上的數據必須保持穩定,只有在時(shí)鐘線(xiàn)上的信號為低電平期間,數據線(xiàn)上的高電平或低電平狀態(tài)才允許變化。

三.字節傳送與應答

每一個(gè)字節必須保證是8位長(cháng)度。數據傳送時(shí),先傳送最高位(MSB),每一個(gè)被傳送的字節后面都必須跟隨一位應答位(即一幀共有9位)。

四.驅動(dòng)程序

#define uchar unsigned char#define uint unsigned int#define somenop() _nop_(),_nop_(),_nop_(),_nop_(),_nop_(),_nop_()sbit SCL=P2^1;sbit SDA=P2^0;
  • 1
  • 2
  • 3
  • 4
  • 5

1.起始信號和終止信號

SCL線(xiàn)為高電平期間,SDA線(xiàn)由高電平向低電平的變化表示起始信號;
SCL線(xiàn)為高電平期間,SDA線(xiàn)由低電平向高電平的變化表示終止信號。

起始和終止信號都是由主機發(fā)出的,在起始信號產(chǎn)生后,總線(xiàn)就處于被占用的狀態(tài);在終止信號產(chǎn)生后,總線(xiàn)就處于空閑狀態(tài)

void I2C_Start()     //起始{SCL=1;somenop();SDA=1;somenop();SDA=0;somenop();SCL=0;somenop();}void I2C_Stop()      //終止{  SDA=0;somenop();SCL=1;somenop();SDA=1;somenop();}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

2.發(fā)送數據

void I2C_SendByte(uchar dat, uchar ack)   //發(fā)送一個(gè)字節{uchar i,j,b=0;for(i=0;i<8;i++){    SCL=0;  somenop();   SDA=(bit)(dat&0x80);     //每次取最高位進(jìn)行發(fā)送dat<<=1;        //從最高位開(kāi)始發(fā)送,左移使每一位逐漸成為最高位SCL=1;          //上升沿時(shí)發(fā)送數據somenop();      }SCL=0;somenop(); SDA=1;     somenop();SCL=1;_nop_();while((SDA==1)&&(j<250))  j++;  //等待應答,也就是等待從設備把SDA拉低SCL=0;_nop_();   }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

3.讀取數據

uchar I2C_ReadByte()     //讀一個(gè)字節{uchar i,dat=0;SCL=0;         //此處也可以不置低,因為起始和發(fā)送一個(gè)字節之后SCL都是0somenop();SDA=1;      //拉高準備數據讀取_nop_();for(i=0;i<8;i++)   //讀取8位數據{SCL=1;somenop();dat<<=1;if(SDA==1)dat=dat"0x01;somenop();SCL=0;     //下降沿時(shí)讀取數據somenop();}return dat;}


評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>