I2C總線的使用

一、I2C總線使用方法

I2C總線包括SCL,SDA 兩根信號線埠居,其中SCL是時鐘線芝硬,SDA是數(shù)據(jù)線。

對于I2C總線的操作帝璧,主要有以下幾個命令:

  1. 開始命令:
    I2C總線開始的操作過程是通過SCL為高的時候SDA有個下降沿的過程先誉;

  2. 停止命令:
    I2C停止的的操作過程是通過SCL為高的時候SDA有個上升沿的過程;

  3. 讀寫數(shù)據(jù)
    I2C讀寫每一位數(shù)據(jù)都是在SCL為高的時候完成的的烁,讀寫每一位數(shù)據(jù)的時候SCL都有一個高脈沖的過程褐耳,也就是說,在SCL為高的時候我們讀寫SDA的值渴庆,這意味著在SCL拉高之前铃芦,SDA必須為一穩(wěn)定的值,不然讀寫就不準確襟雷;

  4. 寫完從器件之后等待從器件的應答:
    在主器件完成對從器件的寫操作時候(每次會有一個字節(jié)的數(shù)據(jù))刃滓,主器件會等待從器件發(fā)送指示信號,這個指示信號是說從器件已經(jīng)接受到了主器件的數(shù)據(jù)耸弄,這個回應ACK是個低電平脈沖咧虎。并且這是由從器件的硬件來完成的,不需要主器件來軟件操作叙赚,只需要等待老客;

  5. 主器件讀完數(shù)據(jù)后向從器件發(fā)送應答信號:
    這其實包括兩種情況,一種是主器件讀完后還要繼續(xù)讀就要發(fā)送一個繼續(xù)讀的信號(其實就是發(fā)送0)震叮,另一種就是不再繼續(xù)讀了胧砰,就要發(fā)送停止讀信號(其實就是發(fā)送1)。

二苇瓣、示例代碼

51C語言

#define uchar unsigned char
#define uint  unsigned int

void delay()
{
  uint i;
  for(i=0;i<300;i++);
  for(i=0;i<300;i++);
}   
//開始
void I2C_START()
{
  SDA = 1;
  SCL = 1;
  delay();
  SDA = 0;
  delay();
}
//停止
void I2C_STOP() 
{
  SDA = 0;
  SCL = 1;
  delay();
  SDA = 1;
  delay();
}
//寫完等待從器件應答
bit write_ACK(void)
{
  uchar i;
  SCL = 1;
  delay();
  i = SDA;
  SCL = 0;
  delay();  
  if(i==1) return 0;
  else return 1;
}
//讀完發(fā)送停止讀的信號
void NACK()
{
  uchar j;
  SDA = 1;
  delay(); 
  SCL = 1; 
  delay();
  while((SDA==0)&&(j<250)) j++;
  SCL = 0;
  delay();
}

//寫字節(jié)
void I2C_writebyte(uchar dat_w)
{
  uint i;
  uchar tmp;
  tmp = dat_w;
  SCL = 0;
  delay();
  for(i=0;i<8;i++)
    {
  if((tmp<<i)&0x80)
    SDA = 1;
  else SDA = 0;
    delay();
SCL = 1;
delay();
SCL = 0;
delay();
}
SDA = 1;
delay(); 
}
//讀字節(jié)
uchar I2C_readbyte()
{
  uchar i;
  uchar dat_r,k;
  SCL = 0;
  delay();
  SDA = 1;
  delay();
  for(i=0;i<8;i++)
    {
  SCL = 0;
  delay();
  SCL = 1;
  delay();
  k = SDA;
  dat_r = (dat_r<<1)|k;
  SCL = 0;
  delay(); 
}   
return dat_r;
}
//寫地址及數(shù)據(jù)
void I2C_write_add(uchar slave_add, uchar byte_add, uchar dat_w)
{
  I2C_START();
  I2C_writebyte(slave_add);
  write_ACK();
  I2C_writebyte(byte_add);
  write_ACK();
  I2C_writebyte(dat_w);
  write_ACK();
  I2C_STOP();
}
//讀地址的數(shù)據(jù)
uchar I2C_read_add(uchar slave_add, uchar byte_add)
{
  uchar dat_r;
  I2C_START();
  I2C_writebyte(slave_add);
  write_ACK();
  I2C_writebyte(byte_add);
  write_ACK();
  I2C_START();
  I2C_writebyte((slave_add+1));
  write_ACK();
  dat_r = I2C_readbyte();
  NACK();
  I2C_STOP();
  return dat_r;
}

void main()
{
   SDA = 1;
   SCL = 1;
   I2C_write_add(0xa0,0x23,0x51);
   P1 = I2C_read_add(0xa0,0x23);
   while(1);
}

三尉间、參考資料

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市击罪,隨后出現(xiàn)的幾起案子哲嘲,更是在濱河造成了極大的恐慌,老刑警劉巖媳禁,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件眠副,死亡現(xiàn)場離奇詭異,居然都是意外死亡竣稽,警方通過查閱死者的電腦和手機囱怕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門霍弹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人娃弓,你說我怎么就攤上這事典格。” “怎么了台丛?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵耍缴,是天一觀的道長。 經(jīng)常有香客問我挽霉,道長防嗡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任炼吴,我火速辦了婚禮本鸣,結果婚禮上疫衩,老公的妹妹穿的比我還像新娘硅蹦。我一直安慰自己,他們只是感情好闷煤,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布童芹。 她就那樣靜靜地躺著,像睡著了一般鲤拿。 火紅的嫁衣襯著肌膚如雪假褪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天近顷,我揣著相機與錄音生音,去河邊找鬼。 笑死窒升,一個胖子當著我的面吹牛缀遍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播饱须,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼域醇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蓉媳?” 一聲冷哼從身側響起譬挚,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎酪呻,沒想到半個月后减宣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡玩荠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年漆腌,在試婚紗的時候發(fā)現(xiàn)自己被綠了丰歌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡屉凯,死狀恐怖立帖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情悠砚,我是刑警寧澤晓勇,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站灌旧,受9級特大地震影響绑咱,放射性物質發(fā)生泄漏。R本人自食惡果不足惜枢泰,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一描融、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧衡蚂,春花似錦窿克、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至玻募,卻和暖如春只损,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背七咧。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工跃惫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人艾栋。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓爆存,卻偏偏與公主長得像,于是被迫代替她去往敵國和親裹粤。 傳聞我的和親對象是個殘疾皇子终蒂,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 在使用單片機的過程中,I2C 通信可以說是最被廣泛使用和采納的協(xié)議之一遥诉,采用 I2C 協(xié)議可以占用更少的資源拇泣,鏈接...
    noparkinghere閱讀 2,177評論 0 8
  • IIC通信實驗 IIC簡介 I2C(Inter-Integrated Circuit)字面上的意思是集成電路之間,...
    btskyrmb閱讀 1,927評論 0 2
  • 什么是嵌入式 IEEE(Institute of Electrical and Electronics Engin...
    Leon_Geo閱讀 3,718評論 1 20
  • ???本文主要介紹嵌入式系統(tǒng)的一些基礎知識矮锈,希望對各位有幫助霉翔。 嵌入式系統(tǒng)基礎 1、嵌入式系統(tǒng)的定義 (1)定義:...
    OpenJetson閱讀 3,311評論 0 13
  • 當你想到的是全人類時苞笨,以全人類作為出發(fā)點去想债朵,你的嫉妒心就會減弱很多子眶,這是一種人生的智慧,也是你的格局所在序芦。 你想...
    時光的沙漏閱讀 259評論 0 2