新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 24C02在PIC單片機系統中的應用

        24C02在PIC單片機系統中的應用

        作者: 時間:2016-11-23 來源:網絡 收藏
        MICROCHIP公司的PIC16系列單片機以其精簡的指令和較強的端口驅動能力在各個領域得到廣泛的應用。在需要儲存較大數量數據的控制領域,24C02可以解決PIC16C8×系列單片機片內EEPROM不足的問題,用以保存諸如用戶設置參數、采集到的數據等。

        由于部分PIC單片機不具備I2C總線接口,在應用時必須用軟件法加以解決。
        在軟件編制時應當嚴格遵循I2C總線規則,并注意24C02的片內讀寫周期時間,調整好程序流程,以避免寫不進、讀不出的問題。
        下面將筆者在實際工作中遇到的問題和解決的方法進行簡單的介紹,希望可以給同行一些幫助。
        首先約定,數據由微處理器發送到24C02稱“寫”、“發”,反之稱“讀”、“收”。24C02支持順序讀寫和隨機讀寫,文中以隨機讀寫方式為例進行介紹。
        一、硬件電路(如圖1所示)。
        使用微處理的任意兩個通用I/O端口(圖中用RA2、RA3)作為與24C02的連接,其中一個作為時鐘SCL線,另外一個作為數據SAD線。兩個端口均接22kΩ上拉電阻
        二、軟件設計
        首先簡要介紹一下用EEPROM的I2C總線的規則。
        初始狀態時,SCL、SDA兩線都為高。
        當SCL為高電平時,如果SDA線跌落,認為是“起始位”。
        當SCL為高電平時,如果SDA線上升,認為是“停止位”。
        除此之外,在發送數據的過程中當SCL為高電平時,SDA應保持穩定。
        ACK應答位指在此時鐘周期內由從器件(EEPROM)把SDA拉低,表示回應。這時主器件(PIC16微處理器)的SDA口的屬性應該變為輸入以便檢測。
        1.在寫數據周期應該依次執行以下過程:
        1)發“起始位”。2)發“寫入代碼”(8bit),1010(A1A2A3)0,其中的A1、A2、A3三位是片地址,由24C02的硬件決定,文中采用000。3)收“ACK”應答(1bit)。4)發EEPROM片內地址(即要寫入EEPROM的什么位置)(8bit)。從00到FF中的任意一個,對應EEPROM中的相應位。5)收“ACK”應答(1bit)。6)發要發送的數據(8bit),即要存儲到EEPROM中的數據。7)發“停止位”。
        接下來,如圖2所示,進入輪詢程序以便檢驗24C02片內寫周期是否完成。如果已經完成則進入下一個字節的寫操作過程。如果沒有完成則繼續等待,直到完成。
        2.在讀數據周期,依次執行以下過程:
        1)發“起始位”。2)發“寫入代碼”(8bit),1010(A1A2A3)0,其中A1、A2、A3三位是片地址,由24C02的硬件決定,文中采用000。3)收“ACK”應答(1bit)。4)發“EEPROM”片內地址(即要讀出EEPROM的位置)(8bit)。從00到FF中的任意一個,對應EEPROM中的相應位。5)收“ACK”應答(1bit)。6)發“起始位”(1bit)。7)發“讀出代碼”(8bit),1010(A1A2A3)1,其中A1、A2、A3三位是片地址,由24C02的硬件接線決定,文中采用000。8)接收。9)發ACK應答。10)發“停止位”。

        本文引用地址:http://www.104case.com/article/201611/320359.htm

        要特別注意的兩個問題是:1)24C02有一個約10ms的片內寫周期。在這個周期內,24C02是不對外界的操作作出反應的。2)在發送數據的過程中,要確保當SCL為高電平時,SDA保持穩定。
        解決第一個問題的常見方法有兩個,其一為采用延時等待,確保在寫過程中,在一個字節完成發送了停止位之后,微處理器等待足夠的時間,通常應該超過10ms,再送下一個字節,這段時間用來等待EEPROM完成片內寫周期。另一個是采用輪詢的方式,判斷EEPROM是否完成了片內寫周期。這種方式的主導思想是,當向EEPROM發送寫標志后,正常情況下,EEPROM應該有ACK應答。但是當EEPROM在進行片內寫周期的時候,則不會產生這樣的應答。程序據此判斷,EEPROM是否完成了片內的寫周期程序。如果完成,則可以繼續寫入下一個要寫的內容,否則繼續等待。
        第一種方法編程較為簡單,但是會浪費大量的機器時間,并且程序的延時時間不好確定。第二種方法的優點在于,雖然編程較為復雜,但是較為快速,對其余的程序模塊影響較少,便于完成程序的模塊化設計。
        對于在發送數據的過程中,要確保當SCK為高電平時,SDA必須保持穩定,應該在程序中利用軟件給予保證。
        如果可以很好的解決以上兩個問題,數據的寫入和讀出是方便快捷和可靠的。



        關鍵詞: 24C02PIC單片機系

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 紫云| 漯河市| 南宁市| 朝阳市| 洪泽县| 台前县| 洛浦县| 沁水县| 琼结县| 缙云县| 昌乐县| 麻栗坡县| 吴桥县| 芮城县| 柳河县| 抚宁县| 扶沟县| 福建省| 兴城市| 临泽县| 大安市| 元氏县| 林芝县| 南昌市| 交城县| 叙永县| 凤凰县| 靖州| 泰安市| 基隆市| 荣成市| 灌云县| 虞城县| 景洪市| 元朗区| 洪洞县| 岢岚县| 涡阳县| 建湖县| 洮南市| 桐庐县|