版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目7具有記憶功能的計(jì)數(shù)器設(shè)計(jì)7.1項(xiàng)目要求
7.2理論知識(shí)
7.3項(xiàng)目分析及實(shí)施
7.4項(xiàng)目拓展
7.5項(xiàng)目總結(jié)習(xí)題
7.1項(xiàng)目要求
本項(xiàng)目要求以STC89C52單片機(jī)為核心,設(shè)計(jì)一個(gè)計(jì)數(shù)器,該計(jì)數(shù)器具有記憶功能,即在每次系統(tǒng)運(yùn)行之后,可以接著上次的計(jì)數(shù)值繼續(xù)計(jì)數(shù)。
項(xiàng)目重難點(diǎn):
(1)串行EEPROM的擴(kuò)展;
(2)串行器件的時(shí)序分析;
(3)串行器件的軟件編程;
(4)I2C總線的原理。技能培養(yǎng):
(1)掌握單片機(jī)系統(tǒng)擴(kuò)展的方法;
(2)掌握單片機(jī)外部存儲(chǔ)器的訪問方法;
(3)掌握I2C總線型器件的時(shí)序分析及軟件編程方法;
(4)掌握單片機(jī)與外部存儲(chǔ)器的接口電路設(shè)計(jì)。
7.2理論知識(shí)
7.2.1
I2C總線的概念
I2C總線產(chǎn)生于20世紀(jì)80年代,是一種由PHILIPS公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。
I2C總線只有二根信號(hào)線,一根是雙向的數(shù)據(jù)線SDA,另一根是時(shí)鐘線SCL。在CPU與被控IC之間、IC與IC之間進(jìn)行雙向傳送。各種被控制電路均并聯(lián)在這條總線上,但就像電話機(jī)只有撥通各自的號(hào)碼才能工作一樣,每個(gè)電路和模塊都有唯一的地址。在信息的傳輸過程中,I2C總線上并接的每一模塊電路既是主控器(或被控器),又是發(fā)送器(或接收器),這取決于它所要完成的功能。CPU發(fā)出的控制信號(hào)分為地址碼和控制量?jī)刹糠?,地址碼用來選址,即接通需要控制的電路,確定控制的種類;控制量決定應(yīng)該調(diào)整的類別(如對(duì)比度、亮度等)及需要調(diào)整的量。這樣,各控制電路雖然掛在同一條總線上,卻彼此獨(dú)立,互不相關(guān)。圖7-1所示為I2C器件與微控制器的連接結(jié)構(gòu)。圖7-1
I2C總線系統(tǒng)硬件結(jié)構(gòu)圖
I2C總線具有以下特點(diǎn):
(1)兩條總線線路:一條串行數(shù)據(jù)線(SDA),一條串行時(shí)鐘線(SCL)。
(2)每個(gè)連接到總線的器件都可以使用軟件根據(jù)它的唯一的地址來識(shí)別。
(3)傳輸數(shù)據(jù)的設(shè)備間是簡(jiǎn)單的主從關(guān)系。
(4)當(dāng)某個(gè)器件向總線上發(fā)送信息時(shí),它就是發(fā)送器(也叫主器件),而當(dāng)其從總線上接收信息時(shí),又成為接收器(也叫從器件)。
(5)它是一個(gè)多主機(jī)總線,兩個(gè)或多個(gè)主機(jī)同時(shí)發(fā)起數(shù)據(jù)傳輸時(shí),可以通過沖突檢測(cè)和仲裁來防止數(shù)據(jù)被破壞;其仲裁原則為:當(dāng)多個(gè)主器件同時(shí)想占用總線時(shí),如果某個(gè)主器件發(fā)送高電平,而另一個(gè)主器件發(fā)送低電平,則發(fā)送電平與此時(shí)SDA總線電平不符的那個(gè)器件將自動(dòng)關(guān)閉其輸出級(jí)。
(6)串行的8位雙向數(shù)據(jù)傳輸,位速率在標(biāo)準(zhǔn)模式下可達(dá)100kb/s,在快速模式下可達(dá)400kb/s,在高速模式下可達(dá)3.4Mb/s。
I2C總線在傳送數(shù)據(jù)過程中共有3種類型信號(hào):起始信號(hào)、終止信號(hào)和應(yīng)答信號(hào)。
(1)起始信號(hào)(S):SCL為高電平時(shí),SDA由高電平向低電平跳變,開始傳送數(shù)據(jù);
(2)終止信號(hào)(P):SCL為高電平時(shí),SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù);
(3)應(yīng)答信號(hào)(ACK):接收器在接收到8位數(shù)據(jù)后,在第9個(gè)時(shí)鐘周期,拉低SDA電平。
開始信號(hào)和結(jié)束信號(hào)都是由主機(jī)發(fā)出的,在開始信號(hào)產(chǎn)生后,總線就處于被占用的狀態(tài);在結(jié)束信號(hào)產(chǎn)生后,總線就處于空閑狀態(tài)。I2C總線的時(shí)序圖如圖7-2所示。圖7-2
I2C總線起始信號(hào)和結(jié)束信號(hào)
I2C總線協(xié)議規(guī)定:I2C總線進(jìn)行數(shù)據(jù)傳送時(shí),時(shí)鐘信號(hào)為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定,只有在時(shí)鐘線上的信號(hào)變?yōu)榈碗娖狡陂g,數(shù)據(jù)線上的高電平或低電平狀態(tài)才允許變化,如圖7-3所示。圖7-3
I2C總線數(shù)據(jù)位有效性規(guī)定7.2.2
I2C總線的數(shù)據(jù)傳輸格式及過程
I2C總線上傳送的數(shù)據(jù)信息包括地址信息和真正的數(shù)據(jù)信息。在進(jìn)行一次數(shù)據(jù)傳輸前,主機(jī)首先發(fā)送“起始信號(hào)”,接著傳送從機(jī)地址,在第一個(gè)字節(jié)的第8位是數(shù)據(jù)的傳送方向。主機(jī)發(fā)送完地址信息并得到“應(yīng)答信號(hào)”后,就可以進(jìn)行數(shù)據(jù)傳送(最高位在前),每次傳送完一個(gè)字節(jié),得到“應(yīng)答信號(hào)”后再進(jìn)行下一個(gè)字節(jié)的傳送。在全部數(shù)據(jù)傳送完畢后,主機(jī)發(fā)送“終止信號(hào)”,表示本次數(shù)據(jù)傳送結(jié)束。I2C總線上進(jìn)行一次數(shù)據(jù)傳輸?shù)母袷饺鐖D7-4所示。圖7-4
I2C總線數(shù)據(jù)傳輸格式7.2.3
I2C總線的尋址
I2C總線規(guī)定:在發(fā)送完起始信號(hào)后的第一個(gè)字節(jié)接著發(fā)出從機(jī)的地址信號(hào)(即尋址信號(hào)),從機(jī)的地址有7位和10位兩種。第一個(gè)字節(jié)的最低位為方向位(R/W)。主機(jī)發(fā)送地址時(shí),總線上的每個(gè)從機(jī)都將發(fā)送來的地址碼與自己的地址進(jìn)行比較,如果相同,則認(rèn)為自己正被主機(jī)尋址,然后根據(jù)方向位將自己確定為發(fā)送設(shè)備或接收設(shè)備。
從機(jī)的地址由固定部分和可編程部分組成。在一個(gè)系統(tǒng)中可能希望接入多個(gè)相同的從機(jī),從機(jī)地址中可編程部分決定了可以接入總線的該類器件的最大數(shù)目。當(dāng)從機(jī)為7位地址時(shí),尋址字節(jié)各位的含義如圖7-5所示。
在7位尋址方式中,在總線的一次數(shù)據(jù)傳輸過程中,可以有以下幾種組合方式:
(1)主機(jī)向從機(jī)寫數(shù)據(jù),整個(gè)傳送過程中數(shù)據(jù)傳輸方向保持不變。數(shù)據(jù)格式如圖7-6所示。圖7-6組合方式一圖7-5
7位尋址字節(jié)各位的含義
(2)主機(jī)從從機(jī)讀數(shù)據(jù),整個(gè)傳送過程中數(shù)據(jù)傳輸方向保持不變。數(shù)據(jù)格式如圖7-7所示。
(3)復(fù)合格式。主機(jī)先向從機(jī)寫完數(shù)據(jù)之后,接著從從機(jī)讀數(shù)據(jù)。當(dāng)需要改變傳輸方向時(shí),起始信號(hào)和從機(jī)地址都被重復(fù)產(chǎn)生一次。但兩次方向位(R/W)正好相反。數(shù)據(jù)格式如圖7-8所示。圖7-8組合方式三圖7-7組合方式二在10位尋址方式中,可能有的數(shù)據(jù)傳輸格式有:
(1)主機(jī)向從機(jī)寫數(shù)據(jù),傳輸方向不改變。當(dāng)起始信號(hào)后有10位數(shù)據(jù)時(shí),每個(gè)從機(jī)將第一個(gè)字節(jié)的從機(jī)地址與自己的地址比較,并測(cè)試方向位是否為0。此時(shí),很可能超過一個(gè)器件發(fā)現(xiàn)地址相同,并產(chǎn)生一個(gè)應(yīng)答信號(hào)(A1)。所有發(fā)現(xiàn)地址相同的從機(jī)將第二個(gè)字節(jié)的從機(jī)地址與自己的地址比較,此時(shí)只有一個(gè)從機(jī)發(fā)現(xiàn)地址相同并產(chǎn)生一個(gè)應(yīng)答信號(hào)(A2),匹配的從機(jī)將保持被主機(jī)尋址,直到接收到終止信號(hào)。數(shù)據(jù)傳輸格式如圖7-9所示。圖7-9組合方式一
(2)主機(jī)從從機(jī)讀數(shù)據(jù),傳輸方向不變。在起始信號(hào)后的第一個(gè)字節(jié),主機(jī)發(fā)送“11110XX0”,這時(shí)數(shù)據(jù)傳輸方向是“0”,表示主機(jī)寫數(shù)據(jù)到從機(jī),這是因?yàn)檫€有8位地址碼未發(fā)送,在第二個(gè)字節(jié),主機(jī)繼續(xù)發(fā)送其余的8位地址碼。當(dāng)主機(jī)得到被尋址的從機(jī)應(yīng)答信號(hào)之后,再次發(fā)送起始信號(hào)(Sr),在這個(gè)起始信號(hào)之后,緊接著發(fā)出一個(gè)字節(jié)從機(jī)地址,剛才被尋址的從機(jī)檢查第二次起始信號(hào)后的第一個(gè)字節(jié)的前7位和第一次起始信號(hào)后的前7位是否相同,并檢查第8位是否為“1”,如果匹配,則從機(jī)認(rèn)為它是真正被尋址的器件,再次發(fā)送應(yīng)答信號(hào)。此后這個(gè)匹配的從機(jī)一直保持被尋址,主機(jī)從從機(jī)這里讀走數(shù)據(jù),直到主機(jī)發(fā)出終止信號(hào)。數(shù)據(jù)傳輸格式如圖7-10所示。
(3)復(fù)合格式。主機(jī)先向從機(jī)寫數(shù)據(jù),接著從相同的從機(jī)讀數(shù)據(jù)。數(shù)據(jù)傳輸格式如圖7-11所示。圖7-11組合方式三圖7-10組合方式二
(4)組合格式。主機(jī)先寫數(shù)據(jù)到一個(gè)7位地址的從機(jī),接著寫數(shù)據(jù)到一個(gè)10位地址的從機(jī)。數(shù)據(jù)傳輸格式如圖7-12所示。圖7-12組合方式四7.2.4
I2C總線應(yīng)答信號(hào)
I2C總線規(guī)定:每傳送一個(gè)字節(jié)的數(shù)據(jù)后,都要有一個(gè)應(yīng)答信號(hào),以確定數(shù)據(jù)傳送是否被對(duì)方收到。應(yīng)答信號(hào)由接收設(shè)備產(chǎn)生,在SCL信號(hào)為高電平期間,接收設(shè)備將SDA拉成低電平,表示數(shù)據(jù)傳輸正確,產(chǎn)生應(yīng)答。I2C總線應(yīng)答信號(hào)時(shí)序圖如圖7-13所示。圖7-13
I2C總線應(yīng)答信號(hào)時(shí)序圖 7.3項(xiàng)目分析與實(shí)施
1.任務(wù)要求和分析
1)任務(wù)要求
要求以STC89C52單片機(jī)為控制核心,設(shè)計(jì)最大計(jì)數(shù)值為9999的計(jì)數(shù)器,該計(jì)數(shù)器對(duì)外部脈沖進(jìn)行計(jì)數(shù),并將結(jié)果顯示在數(shù)碼管上,由獨(dú)立按鍵控制計(jì)數(shù)器的運(yùn)行、停止和清零。在系統(tǒng)斷電之前,當(dāng)按下“停止/保存”鍵時(shí),系統(tǒng)會(huì)自動(dòng)記錄計(jì)數(shù)器的當(dāng)前計(jì)數(shù)值,下次系統(tǒng)上電之后,按下“運(yùn)行”鍵,系統(tǒng)會(huì)從上次的計(jì)數(shù)值接著繼續(xù)計(jì)數(shù)。按下“清零”鍵,計(jì)數(shù)器從零開始重新計(jì)數(shù)。
2)任務(wù)分析
51單片機(jī)內(nèi)部具有2個(gè)16位的定時(shí)/計(jì)數(shù)器,只需要讓其工作在計(jì)數(shù)模式,就可以對(duì)外部脈沖計(jì)數(shù)。為了記錄計(jì)數(shù)值,我們?cè)趩纹瑱C(jī)外部擴(kuò)展具有I2C總線結(jié)構(gòu)的EEPROM存儲(chǔ)器芯片,EEPROM存儲(chǔ)器具有掉電不丟失的特點(diǎn),我們可以將計(jì)數(shù)值存入這個(gè)存儲(chǔ)器。
在系統(tǒng)的硬件電路設(shè)計(jì)方面,就需要考慮外接存儲(chǔ)器芯片與51單片機(jī)的接口電路設(shè)計(jì)。
在系統(tǒng)的軟件程序設(shè)計(jì)方面,由于51單片機(jī)不具有硬件I2C總線控制單元,所以必須通過軟件指令模擬I2C總線的工作時(shí)序。
2.器件及設(shè)備選擇
目前,具有I2C總線接口的EEPROM有許多種,主要有fairchild(仙童)公司的FM24C02/04/08/16,Nationalsemiconductor(國家半導(dǎo)體)公司的NM24C02/03/04/08,Atmel公司的AT24C01/02/04/08/16等。這里選擇Atmel公司的AT24C08作為存儲(chǔ)芯片。
1)AT24C08引腳介紹
AT24C08是Atmel公司生產(chǎn)的串行電可擦的可編程存儲(chǔ)器,數(shù)據(jù)保存周期可達(dá)100年。同系列的產(chǎn)品有AT24C01/
02/04/08/16等。AT24C08芯片的封裝有直插式和貼片式兩種,芯片引腳圖如圖7-14所示。圖7-14
AT24C08引腳各引腳名稱及功能如下:
(1)A0~A2:可編程地址輸入端;
(2)GND:電源地;
(3)SDA:串行數(shù)據(jù)輸入/輸出端;
(4)SCL:串行時(shí)鐘輸入端;
(5)WP:寫保護(hù)輸入端,用于硬件數(shù)據(jù)保護(hù)。當(dāng)該引腳為低電平時(shí),可以進(jìn)行正常的讀/寫操作;當(dāng)該引腳為高電平時(shí),存儲(chǔ)器具有寫保護(hù)功能,主機(jī)只能對(duì)其進(jìn)行讀操作;
(6)VCC:電源。
2)器件存儲(chǔ)器組織及尋址
AT24C08的存儲(chǔ)容量為8kbit,內(nèi)部分成64頁,每頁16個(gè)字節(jié),共10246個(gè)字節(jié)。同系列AT24C01/04/08/16的存儲(chǔ)器容量分別為:
AT24C01的存儲(chǔ)容量為1kbit,內(nèi)部分成16頁,每頁8個(gè)字節(jié),共128個(gè)字節(jié);
AT24C02的存儲(chǔ)容量為2kbit,內(nèi)部分成32頁,每頁8個(gè)字節(jié),共256個(gè)字節(jié);
AT24C04的存儲(chǔ)容量為4kbit,內(nèi)部分成32頁,每頁16個(gè)字節(jié),共512個(gè)字節(jié);
AT24C16的存儲(chǔ)容量為16kbit,內(nèi)部分成128頁,每頁16個(gè)字節(jié),共2048個(gè)字節(jié)。由于I2C總線可掛接多個(gè)串行接口器件,在I2C總線中每個(gè)器件應(yīng)有唯一的器件地址。AT24C系列的器件地址為7位數(shù)據(jù)(即一個(gè)I2C總線系統(tǒng)中理論上可掛接128個(gè)不同地址的器件),它和1位數(shù)據(jù)方向位構(gòu)成一個(gè)器件尋址字節(jié),最低位D0為方向位(讀/寫)。器件尋址字節(jié)中的最高4位(D7~D4)為器件型號(hào)地址,不同的I2C總線接口器件的型號(hào)地址是廠家給定的。AT24C系列EEPROM的型號(hào)地址皆為1010,器件地址中的低3位為引腳地址A2A1A0,對(duì)應(yīng)器件尋址字節(jié)中的D3、D2、D1位,在硬件設(shè)計(jì)時(shí)由連接的引腳電平給定。AT24C系列存儲(chǔ)器芯片因容量不同,對(duì)3位尋址碼有不同的規(guī)定。如表7-1所示。表7-1
AT24C系列器件識(shí)別控制字
3)器件寫操作時(shí)序
串行EEPROM的寫操作一般有兩種方式:一種是字節(jié)寫入方式,一種頁面寫入方式。
(1)字節(jié)寫入方式。這種方式下,主機(jī)一次只向從機(jī)寫一個(gè)字節(jié)的數(shù)據(jù)。主機(jī)先發(fā)送起始信號(hào),然后發(fā)送一個(gè)字節(jié)的含有器件地址的寫操作控制字,得到從機(jī)應(yīng)答信號(hào)之后,再送一個(gè)字節(jié)的存儲(chǔ)器單元子地址,再次得到從機(jī)應(yīng)答信號(hào)之后,主機(jī)就可以發(fā)送要寫入的數(shù)據(jù)到從機(jī),從機(jī)接收完畢給出應(yīng)答信號(hào),主機(jī)發(fā)送終止信號(hào)給從機(jī)。字節(jié)寫入的時(shí)序如圖7-15所示。圖7-15字節(jié)寫入時(shí)序圖
(2)頁寫入方式。這種方式下,主機(jī)一次可以向從機(jī)連續(xù)寫入一頁的數(shù)據(jù)(每頁的字節(jié)數(shù)隨器件型號(hào)而不同)。這種方式與字節(jié)寫入的起始部分是相同的。主機(jī)先發(fā)送起始信號(hào),然后發(fā)送一個(gè)字節(jié)的含有器件地址的寫操作控制字,得到從機(jī)應(yīng)答信號(hào)之后,再送一個(gè)字節(jié)需要被連續(xù)寫入的存儲(chǔ)器單元首地址,再次得到從機(jī)應(yīng)答信號(hào)之后,主機(jī)就可以連續(xù)發(fā)送最多一頁的數(shù)據(jù),這些數(shù)據(jù)存放在剛才指定起始地址開始的連續(xù)單元中。每寫入一個(gè)字節(jié),從機(jī)都會(huì)發(fā)出應(yīng)答信號(hào),寫入完畢后,主機(jī)發(fā)送終止信號(hào)給從機(jī)。頁寫入的時(shí)序圖如圖7-16所示。對(duì)于AT24C01/02采用頁寫入時(shí),每次最多寫入8個(gè)字節(jié);對(duì)于AT24C04/08/16采用頁寫入時(shí),每次最多寫入16個(gè)字節(jié)。圖7-16頁寫入時(shí)序圖
4)器件讀操作時(shí)序
串行EEPROM的讀操作一般有三種方式:一種是當(dāng)前地址讀;一種是隨機(jī)讀;一種是連續(xù)地址讀。
(1)當(dāng)前地址讀。這種方式下,器件內(nèi)部數(shù)據(jù)字地址計(jì)數(shù)器的內(nèi)容是最后一次讀/寫操作訪問的存儲(chǔ)單元地址加1。只要芯片不掉電,這個(gè)地址一直有效。當(dāng)主機(jī)發(fā)送完起始信號(hào)后,接著發(fā)送一個(gè)字節(jié)的含有器件地址的讀操作控制字,從機(jī)發(fā)送應(yīng)答信號(hào),隨后從機(jī)就會(huì)將當(dāng)前地址單元的數(shù)據(jù)隨時(shí)鐘送上數(shù)據(jù)線。主機(jī)讀取完數(shù)據(jù)之后,產(chǎn)生一個(gè)非應(yīng)答信號(hào)(保持?jǐn)?shù)據(jù)線高電平),隨后發(fā)送終止信號(hào)。當(dāng)前地址讀操作的時(shí)序如圖7-17所示。圖7-17當(dāng)前地址讀時(shí)序圖
(2)隨機(jī)地址讀。隨機(jī)地址讀的方式就是在當(dāng)前地址讀方式的時(shí)序之前加上需要讀取的單元地址,時(shí)序圖如圖7-18所示。主機(jī)發(fā)送起始信號(hào)后,先寫入一個(gè)含有器件地址的寫操作控制字,從機(jī)發(fā)送應(yīng)答信號(hào);主機(jī)再次寫入一個(gè)字節(jié)的需要讀取的存儲(chǔ)單元地址,從機(jī)再次發(fā)送應(yīng)答信號(hào);接著主機(jī)重新發(fā)送一個(gè)起始信號(hào)并寫入一個(gè)含有器件地址的讀操作控制字,隨后剛才被尋址的器件就會(huì)隨時(shí)鐘將指定存儲(chǔ)單元中數(shù)據(jù)送到數(shù)據(jù)線上。主機(jī)讀取完數(shù)據(jù)之后,產(chǎn)生一個(gè)非應(yīng)答信號(hào)(保持?jǐn)?shù)據(jù)線高電平),隨后發(fā)送終止信號(hào)。圖7-18隨機(jī)地址讀時(shí)序
(3)連續(xù)地址讀(頁讀)。連續(xù)地址讀與隨機(jī)地址讀的時(shí)序基本相似。主機(jī)在得到從機(jī)的應(yīng)答之后,就可以從指定地址連續(xù)讀一頁的數(shù)據(jù)。當(dāng)連續(xù)讀操作時(shí),每讀一個(gè)字節(jié)數(shù)據(jù),器件內(nèi)部數(shù)據(jù)字地址計(jì)數(shù)器內(nèi)容自動(dòng)加1,指向下一個(gè)單元。若內(nèi)部數(shù)據(jù)字地址計(jì)數(shù)器內(nèi)容達(dá)到此頁最后一個(gè)字節(jié)地址后,下一次讀操作,內(nèi)部數(shù)據(jù)字地址計(jì)數(shù)器內(nèi)容就會(huì)變成此頁的首地址,隨后主機(jī)就會(huì)從此頁第一個(gè)地址開始繼續(xù)讀取數(shù)據(jù)。主機(jī)讀取完數(shù)據(jù)之后,產(chǎn)生一個(gè)非應(yīng)答信號(hào)(保持?jǐn)?shù)據(jù)線高電平),隨后發(fā)送終止信號(hào)。連續(xù)地址讀時(shí)序圖如圖7-19所示。圖7-19連續(xù)地址讀時(shí)序
3.任務(wù)實(shí)施
1)具有記憶功能的計(jì)數(shù)器硬件電路設(shè)計(jì)
計(jì)數(shù)器硬件電路主要包含顯示模塊、記憶模塊、按鍵模塊以及單片機(jī)。顯示模塊中使用數(shù)碼管作為顯示器件,其接口電路在項(xiàng)目2中已有介紹。記憶模塊使用AT24C08串行存儲(chǔ)器,它與單片機(jī)的接口主要是SCL、SDA引腳的連接,我們SCL接P2.1引腳,SDA接P2.0引腳。按照本書配套的實(shí)驗(yàn)板原理圖,在proteus軟件下繪制出的硬件原理圖如圖7-20所示。圖7-20中的I2C總線調(diào)試器并不是硬件電路必須的部分,只是為了幫助程序調(diào)試。
系統(tǒng)運(yùn)行起來后,通過按下“運(yùn)行”鍵啟動(dòng)計(jì)數(shù)器工作,當(dāng)需要停止計(jì)數(shù)并保存數(shù)據(jù)時(shí),按下“停止/保存”鍵,若要給計(jì)數(shù)器清零,按下“清零”鍵。圖7-20具有記憶功能的計(jì)數(shù)器硬件電路原理圖
2)具有記憶功能的計(jì)數(shù)器軟件程序設(shè)計(jì)
本任務(wù)中,軟件程序主要有顯示模塊、AT24C08讀寫模塊,顯示模塊,主程序模塊。
對(duì)于AT24C08的讀寫必須按照I2C總線協(xié)議進(jìn)行。51單片機(jī)不具有硬件I2C總線控制單元,所以只能通過軟件程序來模擬I2C總線的工作時(shí)序。為了保證數(shù)據(jù)傳輸?shù)目煽啃裕瑯?biāo)準(zhǔn)I2C總線的時(shí)序?qū)ζ鹗夹盘?hào)、終止信號(hào)、應(yīng)答信號(hào)和非應(yīng)答信號(hào)都有嚴(yán)格的時(shí)序要求,如圖7-21所示。在用軟件程序模擬I2C總線時(shí)序時(shí),主要的函數(shù)模塊有:起始信號(hào)函數(shù)、終止信號(hào)函數(shù)、應(yīng)答信號(hào)函數(shù)、非應(yīng)答信號(hào)函數(shù)、寫一個(gè)字節(jié)函數(shù)、讀一個(gè)字節(jié)函數(shù)、連續(xù)寫幾個(gè)字節(jié)函數(shù)(頁寫)、連續(xù)讀幾個(gè)字節(jié)函數(shù)。圖7-21
I2C總線幾種信號(hào)的時(shí)序要求
I2C總線具體軟件模擬程序如下:程序中通過宏定義:
“#definedelay_5us(){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}”產(chǎn)生微妙級(jí)的延時(shí),系統(tǒng)的晶振頻率為22.1184MHz,一條空指令“_nop_();”的執(zhí)行時(shí)間為一個(gè)機(jī)器周期,約0.54μs,9條空指令總延時(shí)4.88μs,達(dá)到了起始信號(hào)、終止信號(hào)、應(yīng)答信號(hào)、非應(yīng)答信號(hào)的延時(shí)要求。
本任務(wù)的主函數(shù)流程圖如圖7-22所示,鍵掃描及處理模塊的流程圖如圖7-23所示。圖7-22主函數(shù)流程圖圖7-23鍵掃描及處理模塊流程圖程序分析:
(1)在計(jì)數(shù)器初始化函數(shù)init_t1()中,語句
TH1=55536/256;//裝入初始值
TL1=55536%256;//裝入初始值
表示為計(jì)數(shù)器裝入的初始值為“55536”,這是因?yàn)槲覀冊(cè)O(shè)計(jì)的計(jì)數(shù)器計(jì)數(shù)范圍為0~9999,共10000個(gè)脈沖,當(dāng)計(jì)數(shù)器記錄脈沖達(dá)到10000時(shí),產(chǎn)生中斷,由此計(jì)數(shù)初值為“55536”。
(2)變量“count_num”記錄當(dāng)前計(jì)數(shù)器記錄了多少個(gè)脈沖,在主函數(shù)main()中對(duì)應(yīng)的語句為
count_num=TH1*256+TL1-55536;//當(dāng)前記錄脈沖數(shù)
這里之所以減去“55536”是因?yàn)橛?jì)數(shù)器是從“55536”開始計(jì)數(shù)的。
(3)在鍵掃描及處理函數(shù)key_scan()中,語句
TH1=((read_data[0]*256+read_data[1])+55536)/256;//將讀回的數(shù)據(jù)裝入TH1、TL1
TL1=((read_data[0]*256+read_data[1])+55536)%256;
中,“read_data[0]*256”是因?yàn)樵谧x出計(jì)數(shù)值時(shí),將高位放在read_data[0]中,乘以“256”相當(dāng)于左移8位,恢復(fù)它原來的權(quán)值。這里加“55536”是因?yàn)橛?jì)數(shù)初值為“55536”。從AT24C08中讀回的計(jì)數(shù)值加上“55536”才是再次啟動(dòng)計(jì)數(shù)器時(shí)計(jì)數(shù)器的初值。
(4)程序中包含的頭文件“I2C.h”是對(duì)“IIC.c”文件中各函數(shù)的聲明。在程序調(diào)試時(shí),只需將“IIC.c”文件和“couter.c”文件添加到一個(gè)工程中,并在“couter.c”文件中包含頭文件“I2C.h”,就可以直接在“couter.c”文件中使用“IIC.c”文件中的所有函數(shù)。這體現(xiàn)了模塊程序設(shè)計(jì)的思想,以后有關(guān)單片機(jī)控制I2C總線的AT24C系列的器件就可以直接使用“IIC.c”模塊,節(jié)省程序開發(fā)時(shí)間。
(5)“I2C.h”文件的內(nèi)容如下:
3)軟硬件聯(lián)合調(diào)試
將程序生成的HEX文件鏈接到Proteus軟件下繪制的原理單片機(jī)模塊中,按下“仿真運(yùn)行”后,會(huì)自動(dòng)彈出I2C總線調(diào)試器窗口,如圖7-24所示。點(diǎn)擊原理圖中的“運(yùn)行”鍵,I2C總線調(diào)試器窗口會(huì)連續(xù)顯示兩行的內(nèi)容,如圖7-24中前兩行所示,因?yàn)辄c(diǎn)擊“運(yùn)行”鍵后,會(huì)連續(xù)從AT24C08中讀兩個(gè)字節(jié)的數(shù)據(jù),當(dāng)點(diǎn)擊“停止/保存”鍵后,在I2C總線調(diào)試器窗口顯示的是存放數(shù)據(jù)的地址及數(shù)據(jù)。圖中“A0、A1”為寫入的控制,方向分別為“寫和讀”;“S”為啟動(dòng)信號(hào),“Sr”為重啟動(dòng)信號(hào),“A”為應(yīng)答信號(hào),“N”為非應(yīng)答信號(hào),“P”為終止信號(hào)。圖7-24
I2C總線調(diào)試器窗口當(dāng)按下Protues軟件中的“暫停”按鈕后,在“Debug”菜單下,選擇“I2CMemoryInternalMemory”,會(huì)彈出如圖7-25所示的窗口,在這個(gè)窗口中可以觀察I2C存儲(chǔ)器中每個(gè)單元的內(nèi)容。圖7-25
I2C存儲(chǔ)器內(nèi)部存儲(chǔ)單元觀察窗口
7.4項(xiàng)目拓展
7.4.1數(shù)據(jù)存儲(chǔ)器擴(kuò)展
I2C總線型存儲(chǔ)器是采用串行的方式讀/寫數(shù)據(jù)。51單片機(jī)的P0口和P2口的第二功能是作為擴(kuò)展外部存儲(chǔ)器的地址線來使用,這時(shí)可以擴(kuò)展并行方式的程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器。一般我們會(huì)選擇片內(nèi)程序存儲(chǔ)器較大的單片機(jī)型號(hào),免去擴(kuò)展外部程序存儲(chǔ)器的麻煩。但是單片機(jī)內(nèi)部數(shù)據(jù)存儲(chǔ)器一般較小,51單片機(jī)的數(shù)據(jù)存儲(chǔ)器只有128B,當(dāng)單片機(jī)用于實(shí)時(shí)數(shù)據(jù)采集系統(tǒng)時(shí),需要處理的數(shù)據(jù)量較大,此時(shí)會(huì)出現(xiàn)片內(nèi)數(shù)據(jù)存儲(chǔ)器不夠用的情況,需要擴(kuò)展外部數(shù)據(jù)存儲(chǔ)器。
51單片機(jī)屬總線結(jié)構(gòu)型單片機(jī),系統(tǒng)擴(kuò)展通常采用總線結(jié)構(gòu)形式。所謂總線,就是指連接系統(tǒng)中各擴(kuò)展部件的一組公共信號(hào)線。單片機(jī)系統(tǒng)的擴(kuò)展通常有:程序存儲(chǔ)器擴(kuò)展、數(shù)據(jù)存儲(chǔ)器擴(kuò)展、I/O口擴(kuò)展。
圖7-26所示為以51單片機(jī)為核心的系統(tǒng)擴(kuò)展結(jié)構(gòu)。整個(gè)擴(kuò)展系統(tǒng)以8051芯片為核心,通過三類總線把各擴(kuò)展部件連接起來。圖7-26
51單片機(jī)系統(tǒng)擴(kuò)展結(jié)構(gòu)圖數(shù)據(jù)總線(DataBus,DB):用于在單片機(jī)與存儲(chǔ)器之間或單片機(jī)與I/O端口之間傳送數(shù)據(jù)。單片機(jī)系統(tǒng)數(shù)據(jù)總線的位數(shù)與單片機(jī)處理數(shù)據(jù)的字長(zhǎng)一致。
控制總線(ControlBus,CB):控制總線實(shí)際上就是一組控制信號(hào)線,包括單片機(jī)發(fā)出的,以及從其他部件送給單片機(jī)的各種控制或聯(lián)絡(luò)信號(hào)。對(duì)于一條控制信號(hào)線來說,其傳送方向是單向的,但是由不同方向的控制信號(hào)線組合的控制總線則表示為雙向的。
51單片機(jī)的P0口是一個(gè)地址/數(shù)據(jù)分時(shí)復(fù)用口。當(dāng)擴(kuò)展外部存儲(chǔ)器時(shí),在某些時(shí)鐘周期,P0口傳送低8位地址,這時(shí)ALE為高電平有效;而在其他時(shí)鐘周期時(shí)傳送數(shù)據(jù),這時(shí)ALE為無效的低電平。當(dāng)需要訪問外部存儲(chǔ)器時(shí),先從P0送出需要訪問外部存儲(chǔ)器單元的低8位地址,然后再從P0口送出數(shù)據(jù),所以必須先將送出的地址信息鎖存。利用P0口輸出低八位地址和ALE同時(shí)有效的條件,即可用鎖存器把低8位地址鎖存下來。所以系統(tǒng)的低8位地址是從鎖存器輸出端送出的,而P0口本身則又可直接傳送數(shù)據(jù)。高8位地址總線則是直接由P2口組成的。51單片機(jī)與外部存儲(chǔ)器的接口電路如圖7-27所示。圖7-28為51單片機(jī)訪問外部數(shù)據(jù)存儲(chǔ)器時(shí)的時(shí)序。圖7-27
51單片機(jī)與外部存儲(chǔ)器的接口電路圖7-28
51單片機(jī)訪問外部數(shù)據(jù)存儲(chǔ)器時(shí)序7.4.2常見數(shù)據(jù)存儲(chǔ)器芯片擴(kuò)展舉例
1.常見數(shù)據(jù)存儲(chǔ)器芯片介紹
目前廣泛用于單片機(jī)系統(tǒng)擴(kuò)展數(shù)據(jù)存儲(chǔ)器的芯片主要有INTEL公司62系列MOS型靜態(tài)隨機(jī)存儲(chǔ)器,具體芯片型號(hào)有6116(2KB)、6264(8KB)、62128(16KB)、62256(32KB)、62512(64KB)等。
圖7-29所示為幾種存儲(chǔ)器的引腳圖。圖7-29常見靜態(tài)隨機(jī)存儲(chǔ)器引腳圖在進(jìn)行數(shù)據(jù)存儲(chǔ)器擴(kuò)展時(shí)序要考慮以下三點(diǎn):
(1)依據(jù)系統(tǒng)容量,并考慮市場(chǎng)價(jià)格,選定合適的芯片。
(2)確定所擴(kuò)展存儲(chǔ)器的地址范圍,并依照選定芯片的引腳功能和排列圖,將引腳接入單片機(jī)系統(tǒng)中。
(3)所選RAM芯片工作速度匹配。
2.數(shù)據(jù)存儲(chǔ)器與單片機(jī)的接口電路
以6264為例,51單片機(jī)與6264芯片的具體接口電路如圖7-30所示。圖7-30接口電路采用部分譯碼。當(dāng)采用部分譯碼時(shí),P2口其余未接地址線的引腳,不能再作I/O口使用。
以下程序是往地址為0000H~00FFH的單元中依次存入00H~FFH的數(shù)據(jù)。程序中的核心語句是:“XBYTE[i]=i%256;”這條語句的作用是對(duì)外部存儲(chǔ)器寫數(shù)據(jù),表示往地址為i的存儲(chǔ)單元放入數(shù)據(jù)“i%256”數(shù)據(jù)。
XBYTE是一個(gè)地址指針(可當(dāng)成一個(gè)數(shù)組名或數(shù)組的首地址),它在文件absacc.h中由系
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 整體出租倉庫合同范例
- 廣告公司租車合同范例
- 云南車站保潔合同范例
- 山地開荒整地合同范例
- 帶金額合同范例
- 完整版100以內(nèi)加減法混合運(yùn)算4000道157
- 銅陵學(xué)院《機(jī)器人離線編程實(shí)訓(xùn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 銅川職業(yè)技術(shù)學(xué)院《文案策劃實(shí)訓(xùn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 桐城師范高等專科學(xué)?!稊?shù)碼影錄技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 小學(xué)數(shù)學(xué)一年級(jí)第二學(xué)期口算計(jì)算共5048道題
- 消防評(píng)估立項(xiàng)申請(qǐng)報(bào)告
- ISO56002-2023創(chuàng)新管理體系指南中文
- 13產(chǎn)房分娩安全核查制度-附核查表
- 基于Web的高校教材管理系統(tǒng)的設(shè)計(jì)與開發(fā)
- 養(yǎng)生餐廳調(diào)查研究報(bào)告
- 臨床醫(yī)學(xué)研究進(jìn)展展望新興領(lǐng)域與發(fā)展趨勢(shì)培訓(xùn)課件
- 北京市2022-2023學(xué)年三年級(jí)上學(xué)期語文期末試卷(含答案)2
- 普外科-臨床重點(diǎn)??平ㄔO(shè)項(xiàng)目自查總結(jié)報(bào)告
- 2023-2024年三年級(jí)上冊(cè)科學(xué)(教科版) 期末模擬試卷(三)(含解析)
- 消防爬梯施工方案
- 關(guān)于工程師思維素養(yǎng)課件
評(píng)論
0/150
提交評(píng)論