日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
I2C總線原理與應(yīng)用
I2C總線原理與應(yīng)用
 更新時間:2008-7-26 19:54:26  點擊數(shù):3
【字體: 字體顏色
 

一.簡介

I2C(Inter-Integrated Circuit)總線是一種由Philips公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。I2C總線產(chǎn)生于在80年代,最初為音頻和視頻設(shè)備開發(fā)。由于其簡單性,如今方泛用于微控制器與各種功能模塊的連接,可以說是學(xué)單片機的人,入門之后,必定要涉及到的。

I2C 總線實際上已經(jīng)成為一個國際標(biāo)準(zhǔn)在超過100 種不同的IC 上實現(xiàn),而且得到超過50 家公司的許可,正因為其簡單和應(yīng)用廣泛,因此其功能也越來不滿足人們的要求,其速度也從原來的100Kbit/S,增加了快速模式,其速度達400Kbit/S,再后來也增加了高速模式,其速度更達3.4Mbit/S。

二.功能和特點

I2C總線是一種用于IC器件之間連接的雙向二線制總線,所謂總線它上面可以掛多少器件,并且通個兩根線連接,占用空間非常的小,總線的長度可高達25英尺,并且能夠以10Kbps的最大傳輸速率支持40個組件。它的另一優(yōu)點是多主控,只要能夠進行接收和發(fā)送的設(shè)備都可以成為主控制器,當(dāng)然多個主控不能同一時間工作。

I2C總線有兩根信號線,一根為SDA(數(shù)據(jù)線),一根為SCL(時鐘線)。任何時候時鐘信號都是由主控器件產(chǎn)生。

I2C總線在傳送數(shù)據(jù)的過程中,主要有三種控制信號:起始信號,結(jié)不信號,應(yīng)答信號

起始信號:當(dāng)SCL為高電平時,SDA由高電平轉(zhuǎn)為低電平時,開始傳送數(shù)據(jù)

結(jié)束信號:當(dāng)SCL為高電平時,SDA由低電平轉(zhuǎn)為高電平時,結(jié)束數(shù)據(jù)傳送

應(yīng)答信號:接收數(shù)據(jù)的器件在接收到8bit數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的器件發(fā)出低電平信號,表示已收到數(shù)據(jù)。這個信號可以是主控器件發(fā)出,也可以是從動器件發(fā)出?傊山邮諗(shù)據(jù)的器件發(fā)出。

這些信號中,起始信號是必需的,結(jié)束信號和應(yīng)答信號,都可以不要。

三.基本操作

下面我們以ATMEL公司的AT24C02來介紹I2C的基本操作

AT24C02是美國ATMEL公司的低功耗CMOS串行EEPROM,它是內(nèi)含256×8bit存儲空間,具有工作電壓寬(2.5~5.5V)、擦寫次數(shù)多(大于10000次)、寫入速度快(小于10ms)等特點。他在系統(tǒng)中始終為從動器件。

對AT24C02的操作主要有:字節(jié)讀,字節(jié)寫,頁面讀,頁面寫

首先發(fā)送起始信號,如下圖,起始信號后必須是控制字,

控制字格式如下,其中高四位為器件類型識別符(不同的芯片類型有不同的定義,EEPROM一般應(yīng)為1010),接著三位為片選,也就是三個地址位,最后一位為讀寫控制位,當(dāng)為1(Input)時為讀操作,為0(Output)時為寫操作。

控制字后就是相應(yīng)的操作,讀或?qū),一定不要結(jié)束,因為這個操作還沒有完成,如果結(jié)束就等于放棄操作。

先來看寫操作,寫操作分為字節(jié)寫和頁面寫兩種操作,對于頁面寫根據(jù)芯片的一次裝載的字節(jié)不同有所不同,AT24C02為8字節(jié),每寫一個字節(jié)后,地址自動加1。關(guān)于頁面寫的地址、應(yīng)答和數(shù)據(jù)傳送的時序參見圖3,字節(jié)寫可以看成是只有一個字節(jié)的頁面寫,也就是寫一個數(shù)據(jù)后停止。注意:寫一次需要一定時間,一般為10ms,要等侍這個操作完成。時序如下圖:

說明:對于AT24C02,在控制字后還必須寫入地址,這個地址是以后讀寫的起始地址。

讀操作有三種基本操作:當(dāng)前地址讀、隨機讀和順序讀。三種操作方法類似,只是讀的數(shù)據(jù)個數(shù)不同,可連續(xù)讀8個字節(jié),圖4給出的是順序讀的時序圖,圖中共讀了四個數(shù)據(jù),需要注意的是當(dāng)前的地址,如果不是想要的,可以用寫操作,重新寫入地址。非常重要的是,每讀一個數(shù)據(jù)后,必須置低SDA,作為應(yīng)答,否則,只能讀一個數(shù)據(jù),后面的數(shù)據(jù),因為收到不應(yīng)答信號,AT24C02就會認為出錯,停止操作。特別提醒的是,當(dāng)SCL為低電平時,數(shù)據(jù)是可變的,因些只有SCL為高電平時,才能讀數(shù)。(相關(guān)時序,請看例程序的,讀功能函數(shù))

四.例程序(51匯編,測試單片機為AT89C51,12M晶振)

電路連接如圖5,其中A0,A1,A2為地址線,本例中全部接地,因此全部為0。由于SCL和SDA為漏極開路輸出,所以在使用時,需加上拉電阻。

程序功是將數(shù)據(jù)66H寫入AT24C02地址單元00,數(shù)據(jù)88H寫01單元,再將00單元讀出放入單片機的40H單元,01單元讀出放入41H單元,再將其分別寫入AT24C02的02和03地址單元,最后將00,02讀出比較,01與03比較,如果相等,LED發(fā)光。以下是程序。可將本程序復(fù)制,編譯后,燒錄后測試。 (程序看似復(fù)雜,其實很多功能是重復(fù)的)

        SCL EQU P3.0        ;時鐘        SDA EQU P3.1        ;數(shù)據(jù)        LED EQU P1.0        ;操作成功指示,低電平點亮        ORG 0X0000        LJMP MAIN        ;啟動功能函數(shù),NOP用于滿足AT24C02的速度要求START:  CLR SCL             ;先將SCL置低才改變SDA,以免誤操作        NOP        NOP        SETB SDA        NOP        NOP        SETB SCL        NOP        NOP        CLR SDA        NOP        NOP        RET        ;結(jié)束功能函數(shù)STOP:   CLR SCL             ;先將SCL置低才改變SDA,以免誤操作        NOP        NOP        CLR SDA        NOP        NOP        SETB SCL        NOP        NOP        SETB SDA        NOP        NOP        RET                ;應(yīng)答函數(shù)ACK:    CLR SCL             ;先將SCL置低才改變SDA,以免誤操作        NOP        NOP        CLR SDA             ;發(fā)低電平應(yīng)答        NOP        NOP        SETB SCL        NOP        NOP        RET                ;寫一個字節(jié)        ;R2為要寫的數(shù)據(jù),R3為每字節(jié)的位數(shù),這兒為8位        ;返回時C為應(yīng)答信號,可以不理會這個值WRITE:  MOV R3,#8        MOV A,R2WRLOOP: CLR SCL        RLC A        NOP        MOV SDA,C        NOP        NOP        SETB SCL        NOP        NOP        DJNZ R3,WRLOOP        CLR SCL             ;以下處理AT24C02的應(yīng)答信號        NOP        NOP        SETB SDA            ;置高SDA,用作輸入,如果AT24C02拉低,表示正確        NOP        NOP        SETB SCL        NOP        NOP        MOV C,SDA           ;讀取應(yīng)答信號        RET                ;讀一個字節(jié)        ;返回時R2為讀得的數(shù)READ:   MOV R3,#8RDLOOP: CLR SCL        NOP        NOP        SETB SDA            ;拉高SDA,用作輸入        NOP        NOP        SETB SCL        NOP        NOP        MOV C,SDA        RLC A        DJNZ R3,RDLOOP        MOV R2,A        RET                ;延時,用以保證寫操作完成,寫地址信號不用延時DELAY:  MOV 0X31,#20AA:     MOV 0X32,#200        DJNZ 0X32,$        DJNZ 0X31,AA        RET        MAIN:   ACALL START         ;啟動        MOV R2,#0XA0        ;將控制字“1010 0000”傳到R2,最后一位表示寫        ACALL WRITE         ;調(diào)用寫函數(shù)        MOV R2,#0X00        ;設(shè)置要寫的地址        ACALL WRITE        MOV R2,#0X66        ;寫入第一個字節(jié),66H,寫入到00單元        ACALL WRITE        MOV R2,#0X88        ;寫入第一個字節(jié),88H,寫入到01單元        ACALL WRITE        ACALL STOP          ;停止操作        ACALL DELAY         ;等待寫完成                ACALL START         ;啟動        MOV R2,#0XA0        ;寫控制字        ACALL WRITE        MOV R2,#00          ;設(shè)置要讀地址        ACALL WRITE                ACALL START        MOV R2,#0XA1        ;將控制字“1010 0001”傳到R2,最后一位表示讀        ACALL WRITE         ;寫入控制字        ACALL READ          ;調(diào)用讀命令        ACALL ACK           ;應(yīng)答        MOV 0X40,R2         ;將讀得的數(shù)據(jù)傳到40H        ACALL READ          ;讀下一位,將讀得的數(shù)據(jù)傳到41H        ACALL ACK        MOV 0X41,R2        ACALL STOP          ;停止讀操作                ACALL START        MOV R2,#0XA0        ;寫控制字,表示以下這寫操作        ACALL WRITE        MOV R2,#0X02        ;設(shè)置地址        ACALL WRITE        MOV R2,0X40         ;將上面讀得的數(shù)寫入到02單元        ACALL WRITE        MOV R2,0X41         ;將上面讀得的數(shù)寫入到03單元        ACALL WRITE        ACALL STOP          ;停止操作        ACALL DELAY         ;等待寫完成                ACALL START         ;啟動        MOV R2,#0XA0        ;寫入控制字,表示以下為寫操作        ACALL WRITE        MOV R2,#00          ;寫入讀的起始地址        ACALL WRITE                ACALL START         ;啟動        MOV R2,#0XA1        ;寫入控制字,表示以下為讀操作        ACALL WRITE        ACALL READ        ACALL ACK        MOV 0X40,R2         ;以下連續(xù)讀出四個字節(jié)        ACALL READ        ACALL ACK        MOV 0X41,R2        ACALL READ        ACALL ACK        MOV 0X42,R2        ACALL READ        ACALL ACK        MOV 0X43,R2        ACALL STOP                MOV A,0X42          ;以下為比較讀出結(jié)果與寫入是否相等        CJNE A,#0X66,ENDALL        MOV A,0X43        CJNE A,#0X88,ENDALL        CLR LEDENDALL: SJMP $        END
  • 上一篇: 12位A/D轉(zhuǎn)換器ADS7804與51單片機的接口及程序設(shè)計
  • 下一篇: 8279顯示電子鐘的設(shè)計與程序源代碼
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設(shè)備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責(zé)信息內(nèi)容的真實性、準(zhǔn)確性和合法性。
    機電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1