新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 24C02在PIC單片機(jī)系統(tǒng)中的應(yīng)用

24C02在PIC單片機(jī)系統(tǒng)中的應(yīng)用

作者: 時(shí)間:2011-02-24 來(lái)源:網(wǎng)絡(luò) 收藏
MICROCHIP公司的PIC16系列以其精簡(jiǎn)的指令和較強(qiáng)的端口驅(qū)動(dòng)能力在各個(gè)領(lǐng)域得到廣泛的應(yīng)用。在需要儲(chǔ)存較大數(shù)量數(shù)據(jù)的控制領(lǐng)域,24C02可以解決PIC16C8×系列片內(nèi)EEPROM不足的問(wèn)題,用以保存諸如用戶設(shè)置參數(shù)、采集到的數(shù)據(jù)等。
由于部分PIC不具備I2C總線接口,在應(yīng)用時(shí)必須用軟件法加以解決。
在軟件編制時(shí)應(yīng)當(dāng)嚴(yán)格遵循I2C總線規(guī)則,并注意24C02的片內(nèi)讀寫周期時(shí)間,調(diào)整好程序流程,以避免寫不進(jìn)、讀不出的問(wèn)題。
下面將筆者在實(shí)際工作中遇到的問(wèn)題和解決的方法進(jìn)行簡(jiǎn)單的介紹,希望可以給同行一些幫助。
首先約定,數(shù)據(jù)由微處理器發(fā)送到24C02稱“寫”、“發(fā)”,反之稱“讀”、“收”。24C02支持順序讀寫和隨機(jī)讀寫,文中以隨機(jī)讀寫方式為例進(jìn)行介紹。
一、硬件電路(如圖1所示)。
使用微處理的任意兩個(gè)通用I/O端口(圖中用RA2、RA3)作為與24C02的連接,其中一個(gè)作為時(shí)鐘SCL線,另外一個(gè)作為數(shù)據(jù)SAD線。兩個(gè)端口均接22kΩ上拉電阻。
二、軟件設(shè)計(jì)
首先簡(jiǎn)要介紹一下用EEPROM的I2C總線的規(guī)則。
初始狀態(tài)時(shí),SCL、SDA兩線都為高。
當(dāng)SCL為高電平時(shí),如果SDA線跌落,認(rèn)為是“起始位”。
當(dāng)SCL為高電平時(shí),如果SDA線上升,認(rèn)為是“停止位”。
除此之外,在發(fā)送數(shù)據(jù)的過(guò)程中當(dāng)SCL為高電平時(shí),SDA應(yīng)保持穩(wěn)定。
ACK應(yīng)答位指在此時(shí)鐘周期內(nèi)由從器件(EEPROM)把SDA拉低,表示回應(yīng)。這時(shí)主器件(PIC16微處理器)的SDA口的屬性應(yīng)該變?yōu)檩斎胍员銠z測(cè)。
1.在寫數(shù)據(jù)周期應(yīng)該依次執(zhí)行以下過(guò)程:
1)發(fā)“起始位”。2)發(fā)“寫入代碼”(8bit),1010(A1A2A3)0,其中的A1、A2、A3三位是片地址,由24C02的硬件決定,文中采用000。3)收“ACK”應(yīng)答(1bit)。4)發(fā)EEPROM片內(nèi)地址(即要寫入EEPROM的什么位置)(8bit)。從00到FF中的任意一個(gè),對(duì)應(yīng)EEPROM中的相應(yīng)位。5)收“ACK”應(yīng)答(1bit)。6)發(fā)要發(fā)送的數(shù)據(jù)(8bit),即要存儲(chǔ)到EEPROM中的數(shù)據(jù)。7)發(fā)“停止位”。
接下來(lái),如圖2所示,進(jìn)入輪詢程序以便檢驗(yàn)24C02片內(nèi)寫周期是否完成。如果已經(jīng)完成則進(jìn)入下一個(gè)字節(jié)的寫操作過(guò)程。如果沒(méi)有完成則繼續(xù)等待,直到完成。
2.在讀數(shù)據(jù)周期,依次執(zhí)行以下過(guò)程:
1)發(fā)“起始位”。2)發(fā)“寫入代碼”(8bit),1010(A1A2A3)0,其中A1、A2、A3三位是片地址,由24C02的硬件決定,文中采用000。3)收“ACK”應(yīng)答(1bit)。4)發(fā)“EEPROM”片內(nèi)地址(即要讀出EEPROM的位置)(8bit)。從00到FF中的任意一個(gè),對(duì)應(yīng)EEPROM中的相應(yīng)位。5)收“ACK”應(yīng)答(1bit)。6)發(fā)“起始位”(1bit)。7)發(fā)“讀出代碼”(8bit),1010(A1A2A3)1,其中A1、A2、A3三位是片地址,由24C02的硬件接線決定,文中采用000。8)接收。9)發(fā)ACK應(yīng)答。10)發(fā)“停止位”。
要特別注意的兩個(gè)問(wèn)題是:1)24C02有一個(gè)約10ms的片內(nèi)寫周期。在這個(gè)周期內(nèi),24C02是不對(duì)外界的操作作出反應(yīng)的。2)在發(fā)送數(shù)據(jù)的過(guò)程中,要確保當(dāng)SCL為高電平時(shí),SDA保持穩(wěn)定。
解決第一個(gè)問(wèn)題的常見(jiàn)方法有兩個(gè),其一為采用延時(shí)等待,確保在寫過(guò)程中,在一個(gè)字節(jié)完成發(fā)送了停止位之后,微處理器等待足夠的時(shí)間,通常應(yīng)該超過(guò)10ms,再送下一個(gè)字節(jié),這段時(shí)間用來(lái)等待EEPROM完成片內(nèi)寫周期。另一個(gè)是采用輪詢的方式,判斷EEPROM是否完成了片內(nèi)寫周期。這種方式的主導(dǎo)思想是,當(dāng)向EEPROM發(fā)送寫標(biāo)志后,正常情況下,EEPROM應(yīng)該有ACK應(yīng)答。但是當(dāng)EEPROM在進(jìn)行片內(nèi)寫周期的時(shí)候,則不會(huì)產(chǎn)生這樣的應(yīng)答。程序據(jù)此判斷,EEPROM是否完成了片內(nèi)的寫周期程序。如果完成,則可以繼續(xù)寫入下一個(gè)要寫的內(nèi)容,否則繼續(xù)等待。
第一種方法編程較為簡(jiǎn)單,但是會(huì)浪費(fèi)大量的機(jī)器時(shí)間,并且程序的延時(shí)時(shí)間不好確定。第二種方法的優(yōu)點(diǎn)在于,雖然編程較為復(fù)雜,但是較為快速,對(duì)其余的程序模塊影響較少,便于完成程序的模塊化設(shè)計(jì)。
對(duì)于在發(fā)送數(shù)據(jù)的過(guò)程中,要確保當(dāng)SCK為高電平時(shí),SDA必須保持穩(wěn)定,應(yīng)該在程序中利用軟件給予保證。
如果可以很好的解決以上兩個(gè)問(wèn)題,數(shù)據(jù)的寫入和讀出是方便快捷和可靠的。

                                   湖南孫文康



 


評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉