新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC16F877A單片機(jī) I2C模塊 24CXXX存儲(chǔ)器實(shí)現(xiàn)路徑記憶

PIC16F877A單片機(jī) I2C模塊 24CXXX存儲(chǔ)器實(shí)現(xiàn)路徑記憶

作者: 時(shí)間:2016-11-24 來(lái)源:網(wǎng)絡(luò) 收藏
利用24CXXX系列E2PRAM存儲(chǔ)器實(shí)現(xiàn)機(jī)器人的路徑記憶。

首先,利用PIC16F877A單片機(jī)將機(jī)器人的路徑采集轉(zhuǎn)換成數(shù)據(jù),單片機(jī)進(jìn)行處理。但是,由于單片機(jī)RAM太小不能夠存儲(chǔ)大量的數(shù)據(jù)。因此,這里用24CXXX系列的存儲(chǔ)器存儲(chǔ)大量的數(shù)據(jù),單片機(jī)實(shí)現(xiàn)的是對(duì)數(shù)據(jù)的采集和處理。

本文引用地址:http://m.butianyuan.cn/article/201611/321068.htm

此過(guò)程用的是PIC16F877A單片機(jī)的I2C協(xié)議。

具體I2C使用如下:

1.寫(xiě)過(guò)程

(1)上電后等待一個(gè)延時(shí)(1ms)。

(2)器件尋址,給一個(gè)起始信號(hào)(SCL為高電平時(shí)SDA給一個(gè)下降沿)。發(fā)送從器件地址,高5位為10110,然后根據(jù)A1/A0(如果和器件的地址相同則那個(gè)器件會(huì)應(yīng)答)進(jìn)行讀/寫(xiě)控制(O為讀)。

(3)應(yīng)答,器件在SCL的第9個(gè)周期時(shí)SDA給出一個(gè)低電平,作為應(yīng)答信號(hào)。

(4)開(kāi)始寫(xiě)有兩種模式:字節(jié)寫(xiě)模式和頁(yè)寫(xiě)模式。

·字節(jié)模式:給出A15~A8應(yīng)答,給出A7~A0應(yīng)答;然后給出DATA和停止信號(hào) (SCL為高電平時(shí),SDA給出一個(gè)上升沿),接著要等待一個(gè)擦寫(xiě)時(shí)間。

·頁(yè)寫(xiě)模式:給出地址以后連續(xù)給出64個(gè)數(shù)據(jù)。如果多于64個(gè)數(shù)據(jù),則地址計(jì)數(shù)器自動(dòng)翻轉(zhuǎn)。(如果少于64昵,估計(jì)是沒(méi)有問(wèn)題的,但是需要實(shí)驗(yàn)驗(yàn)證。)

(5)判斷擦寫(xiě)操作是否完畢的一個(gè)方法(應(yīng)答查詢),如果器件還處于擦寫(xiě)狀態(tài),則不會(huì)應(yīng)答器件尋址;如果有應(yīng)答,則說(shuō)明擦寫(xiě)完畢。

2.讀過(guò)程

(1)上電以后等待一個(gè)延時(shí)(lms)。

(2)器件尋址。

(3)應(yīng)答。

(4)開(kāi)始讀有三種模式:立即當(dāng)前地址讀、選擇/隨機(jī)讀、連續(xù)讀。

·立即當(dāng)前地址讀:如果上次讀/寫(xiě)的操作地址為N,則現(xiàn)在是N+1。不需要ACK,但是需要Stop信號(hào)。

·選擇/隨機(jī)讀:先偽寫(xiě)(用于給出一個(gè)地址),然后再次啟動(dòng),讀取數(shù)據(jù)。

·連續(xù)讀:讀取一個(gè)以后給一個(gè)應(yīng)答,這樣器件會(huì)再給出下一個(gè)地址的數(shù)據(jù)內(nèi)容。

(5)開(kāi)始數(shù)據(jù)傳輸Start后、停止數(shù)據(jù)傳輸Stop前,SCL高電平期間,SDA上為有效數(shù)據(jù)。

最終實(shí)現(xiàn)的效果





I2C模式7位尋址數(shù)據(jù)接收過(guò)程時(shí)序圖


上一頁(yè) 1 2 下一頁(yè)

評(píng)論


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

關(guān)閉