版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
普通高等教育“十一五”國(guó)家級(jí)規(guī)劃教材
單片微型計(jì)算機(jī)原理與接口技術(shù)(第二版)編著科學(xué)出版社北京第八章
單片微機(jī)的系統(tǒng)擴(kuò)展原理及接口技術(shù)8.1系統(tǒng)擴(kuò)展原理
系統(tǒng)擴(kuò)展是指單片微機(jī)內(nèi)部各功能部件不能滿(mǎn)足應(yīng)用系統(tǒng)要求時(shí),在片外連接相應(yīng)的外圍芯片以滿(mǎn)足應(yīng)用系統(tǒng)要求。 主要有程序存儲(chǔ)器的擴(kuò)展、數(shù)據(jù)存儲(chǔ)器的擴(kuò)展、I/O口的擴(kuò)展、中斷系統(tǒng)擴(kuò)展以及其它特殊功能接口的擴(kuò)展等。對(duì)于單片微機(jī)系統(tǒng)擴(kuò)展的方法有并行擴(kuò)展法和串行擴(kuò)展法兩種。◆并行擴(kuò)展法:利用單片微機(jī)本身具備的三組總線(xiàn)(AB、DB、CB)進(jìn)行的系統(tǒng)擴(kuò)展。◆串行擴(kuò)展法:利用SPI三線(xiàn)總線(xiàn)和I2C雙線(xiàn)總線(xiàn)等進(jìn)行串行系統(tǒng)擴(kuò)展。有的單片微機(jī)應(yīng)用系統(tǒng)同時(shí)采用并行擴(kuò)展法和串行擴(kuò)展法。(1)地址總線(xiàn)(AB) 由P0口提供低8位地址A0~A7,P2口提供高8位地址A8~A15。
P0口是地址總線(xiàn)低8位和8位數(shù)據(jù)總線(xiàn)復(fù)用口,只能分時(shí)用作地址線(xiàn)。P0口輸出的低8位地址A0~A7必須用鎖存器鎖存。 鎖存器的鎖存控制信號(hào)來(lái)自單片微機(jī)ALE引腳輸出的控制信號(hào)。在ALE的下降沿將P0口輸出的地址A0~A7鎖存。P0、P2口在系統(tǒng)擴(kuò)展中用作地址線(xiàn)后便不能作為一般I/O口使用。 地址總線(xiàn)寬度為16位,可尋址范圍為64KB。
(2)數(shù)據(jù)總線(xiàn)(DB) 由P0口提供,用D0~D7表示。P0口為三態(tài)雙向口,是應(yīng)用系統(tǒng)中使用最為頻繁的通道。單片微機(jī)與外部交換的所有數(shù)據(jù)、指令、信息,除少數(shù)可直接通過(guò)P1口外,全部通過(guò)P0口傳送。 ◆數(shù)據(jù)總線(xiàn)是并連到多個(gè)連接的外圍芯片的數(shù)據(jù)線(xiàn)上,而在同一時(shí)間里只能夠有一個(gè)是有效的數(shù)據(jù)傳送通道。哪個(gè)芯片的數(shù)據(jù)通道有效,則由地址線(xiàn)控制各個(gè)芯片的片選線(xiàn)來(lái)選擇。
(3)控制總線(xiàn)(CB)包括片外系統(tǒng)擴(kuò)展用控制線(xiàn)和片外信號(hào)對(duì)單片微機(jī)的控制線(xiàn)。●ALE:輸出P0口上地址與數(shù)據(jù)隔離信號(hào),用于鎖存P0口輸出的低8位地址的控制線(xiàn)。ALE信號(hào)的下降沿控制鎖存器鎖存地址數(shù)據(jù),通常選擇下降沿選通的鎖存器作低8位地址鎖存器。
●PSEN:讀片外程序存儲(chǔ)器中的數(shù)據(jù)。“讀”片外程序存儲(chǔ)器中數(shù)據(jù)(指令)時(shí),不能用“”信號(hào),而只能用PSEN信號(hào)?!馝A :選擇片內(nèi)或片外程序存儲(chǔ)器。當(dāng)=0時(shí),只訪問(wèn)外部程序存儲(chǔ)器。當(dāng)=1時(shí),先訪問(wèn)內(nèi)部程序存儲(chǔ)器,內(nèi)部程序存儲(chǔ)器全部訪 問(wèn)完之后,再訪問(wèn)外部程序存儲(chǔ)器。8.1.1.1.并行擴(kuò)展方式的編址技術(shù)
在單片微機(jī)應(yīng)用系統(tǒng)中,為了唯一地選擇片外某一存儲(chǔ)單元或I/O端口,需要進(jìn)行二次選擇。●必須先找到該存儲(chǔ)單元或I/O端口所在的芯片,稱(chēng)為“片選”●通過(guò)對(duì)芯片本身所具有的地址線(xiàn)進(jìn)行譯碼,然后確定唯一的存儲(chǔ)單元或I/O端口,稱(chēng)為“字選”。
“片選”保證每次讀或?qū)憰r(shí),只選中某一片存儲(chǔ)器芯片或I/O接口芯片。常用的方法有4種:“線(xiàn)選法”、“地址譯碼法”、應(yīng)用“可編程器件PAL/GAL”或“I/O口線(xiàn)”。
(1)線(xiàn)選法:一般是利用單片微機(jī)的最高幾位空余的地址線(xiàn)中一根(如P2.7)作為某一片存儲(chǔ)器芯片或I/O接口芯片的“片選”控制線(xiàn)。用于應(yīng)用系統(tǒng)中擴(kuò)展芯片較少的場(chǎng)合。
(2)譯碼法:用譯碼器對(duì)空余的高位地址線(xiàn)進(jìn)行譯碼,而譯碼器的輸出作為“片選”控制線(xiàn)。常用的譯碼器有3/8譯碼器74LS138、雙2/4譯碼器74LS139、4/16譯碼器74LS154等。
3/8譯碼器74LS138的管腳見(jiàn)圖8–3。
·G1、、:使能端。當(dāng)G1=1,==0時(shí),芯片使能。
·C、B、A:譯碼器輸入,高電平有效。
·Y:譯碼器輸出,低電平有效。#0RAM地址:0000H~1FFFH,共8KB(A15=0,A14=0,A13=0)#1芯片地址:2000H~3FFFH,共8KB(A15=0,A14=0,A13=1)
#2芯片地址:4000H~5FFFH,共8KB(A15=0,A14=1,A13=0)#3芯片地址:6000H~7FFFH,共8KB(A15=0,A14=1,A13=1)#4芯片地址:8000H~9FFFH,共8KB(A15=1,A14=0,A13=0)#5芯片地址:A000H~BFFFH,共8KB(A15=1,A14=0,A13=1)#6芯片地址:C000H~DFFFH,共8KB(A15=1,A14=1,A13=0)#7I/O地址:E000H~FFFFH,共8KBA15=1,A14=1,A13=1)
⑶可編程陣列邏輯器件PAL(ProgrammableArrayLogic)和通用陣列邏輯GAL(GenericArrayLogic)(加密性好)。 有的應(yīng)用系統(tǒng)為了硬件電路加密,采用PAL或GAL來(lái)進(jìn)行地址譯碼和分配(比如有的單片微機(jī)仿真器),你能看到的是PAL或GAL的輸入線(xiàn)和輸出線(xiàn),而無(wú)法掌握內(nèi)部邏輯關(guān)系。 ⑷輸入/輸出線(xiàn)作為譯碼線(xiàn) 可以利用空余的I/O口線(xiàn)(如P1.0),或應(yīng)用系統(tǒng)擴(kuò)展的I/O口線(xiàn)作為芯片的片選線(xiàn),當(dāng)該I/O口線(xiàn)輸出低電平時(shí),即選中了該芯片。8.1.1.2.80C51系列單片微機(jī)的系統(tǒng)并行擴(kuò)展能力 地址總線(xiàn)寬度為16位,在片外可擴(kuò)展的存儲(chǔ)器最大容量為64KB,地址為0000H~FFFFH。片外數(shù)據(jù)存儲(chǔ)器與程序存儲(chǔ)器的操作使用不同的指令和控制信號(hào),允許兩者的地址重復(fù),故片外可擴(kuò)展的數(shù)據(jù)存儲(chǔ)器與程序存儲(chǔ)器最大容量分別為64KB。片外數(shù)據(jù)存儲(chǔ)器與片內(nèi)數(shù)據(jù)存儲(chǔ)器的操作指令不同(片外RAM只能用MOVX指令)。允許兩者地址重復(fù),亦即外部擴(kuò)展數(shù)據(jù)存儲(chǔ)器地址可從0000H開(kāi)始。
I/O口擴(kuò)展與片外數(shù)據(jù)存儲(chǔ)器統(tǒng)一編址,不再另外提供地址線(xiàn)。
8.1.2.2I2C(IntelICBUS)公用雙總線(xiàn)結(jié)構(gòu)
使用兩根信號(hào)線(xiàn)(SDA和SCL)串行的方法進(jìn)行信息傳送,并允許若干兼容器件共享的雙線(xiàn)總線(xiàn),稱(chēng)為12C總線(xiàn)。12C總線(xiàn)系統(tǒng)的示意圖見(jiàn)圖8-6。
·SDA:串行數(shù)據(jù)線(xiàn),傳輸雙向的數(shù)據(jù)。
·SCL:串行時(shí)鐘線(xiàn),傳輸時(shí)鐘信號(hào),同步串行數(shù)據(jù)線(xiàn)上的數(shù)據(jù)。
8.2程序存儲(chǔ)器的擴(kuò)展8.2.1程序存儲(chǔ)器擴(kuò)展時(shí)的總線(xiàn)功能和操作時(shí)序
為片外程序存儲(chǔ)器讀選擇信號(hào)。正常運(yùn)行時(shí),該引腳不能浮空。根據(jù)連接電平的不同,單片微機(jī)有兩種取指過(guò)程:⑴當(dāng)=1時(shí),80C51單片微機(jī)所有片內(nèi)程序存儲(chǔ)器有效。當(dāng)程序計(jì)數(shù)器PC運(yùn)行于片內(nèi)程序存儲(chǔ)器的尋址范圍內(nèi)時(shí),P0口、P2口及線(xiàn)沒(méi)有信號(hào)輸出;當(dāng)程序計(jì)數(shù)器PC的值超出上述范圍后,P0口、P2口及PSEN線(xiàn)才有信號(hào)輸出。
80C51訪問(wèn)片外程序存儲(chǔ)器時(shí),使用如下的信號(hào):
·P0口:分時(shí)輸出程序存儲(chǔ)器的低8位地址和8位數(shù)據(jù)。
·ALE:在ALE的下降沿時(shí),P0口上出現(xiàn)穩(wěn)定的程序存儲(chǔ)器的低8位地址,用ALE信號(hào)鎖存這低8位地址。
·P2口:在整個(gè)取指周期中,輸出穩(wěn)定的程序存儲(chǔ)器的高8位地址。
· 線(xiàn):低電平有效。在ALE的下降沿之后, 由高變?yōu)榈停藭r(shí)片外程序存儲(chǔ)器的內(nèi)容(指令字)送到P0口,而后在 的上升沿將指令字送入指令寄存器,信號(hào)作為片外程序存儲(chǔ)器的“讀”選通信號(hào)。 (2)當(dāng)=0時(shí),80C51單片微機(jī)所有片內(nèi)程序存儲(chǔ)器無(wú)效,只能訪問(wèn)片外程序存儲(chǔ)器。伴隨著單片微機(jī)復(fù)位,P0口、P2口及 線(xiàn)均有信號(hào)輸出。單片微機(jī)片外程序存儲(chǔ)器取指操作的時(shí)序如圖8-7所示。門(mén)例:擴(kuò)展16KB片外程序存儲(chǔ)器 如圖8–9所示。在電路中是接高電平的。27128A是16KB容量的EPROM,14根地址線(xiàn)A0~A13。系統(tǒng)中只擴(kuò)展了一片程序存儲(chǔ)器,27128A的片選端可直接接地,一直有效。EA=1,程序存儲(chǔ)器先片內(nèi)4KB、即0000H~0FFFH。片外27C128的地址為1000H~4FFFH,共16KB。8.3數(shù)據(jù)存儲(chǔ)器的擴(kuò)展
常用的數(shù)據(jù)存儲(chǔ)器有動(dòng)態(tài)RAM和靜態(tài)RAM,有并行RAM和串行RAM。各種存儲(chǔ)器性能的比較
如表8-28.3.1片外并行數(shù)據(jù)存儲(chǔ)器擴(kuò)展8.3.1.1片外并行數(shù)據(jù)存儲(chǔ)器擴(kuò)展時(shí)的總線(xiàn)功能和讀、寫(xiě)操作時(shí)序
80C51對(duì)片外數(shù)據(jù)存儲(chǔ)器讀、寫(xiě)操作的指令有以下4條:
MOVXA,@Ri;片外RAM→(A),讀()
MOVX@Ri,A;(A)→片外RAM,寫(xiě)()@Ri只能提供8位地址,僅能擴(kuò)展256個(gè)字節(jié)的片外RAM。
MOVXA,@DPTR;片外RAM→(A),讀操作
MOVX@DPTR,A;(A)→片外RAM,寫(xiě)操作@DPTR能提供16位地址,可以擴(kuò)展64KB的片外RAM。
執(zhí)行“MOVX@DPTR,A”時(shí),從機(jī)器周期2開(kāi)始到S3狀態(tài),出現(xiàn)低電平。此時(shí)P0口上將送出累加器A的數(shù)據(jù),在的上升沿將數(shù)據(jù)寫(xiě)入片外數(shù)據(jù)存儲(chǔ)器中。數(shù)據(jù)為輸出。 此時(shí)P0口為地址、數(shù)據(jù)復(fù)用總線(xiàn);P2口在機(jī)器周期1的S4狀態(tài)之后出現(xiàn)鎖存的高8位地址(DPH);用控制線(xiàn)來(lái)調(diào)動(dòng)數(shù)據(jù)總線(xiàn)上的數(shù)據(jù)傳輸方向:而有效時(shí)數(shù)據(jù)為輸入,有效時(shí)數(shù)據(jù)為輸出。8.3.1.2.片外并行數(shù)據(jù)存儲(chǔ)器的擴(kuò)展
圖8–11所示的是用兩片6264擴(kuò)展16KB片外并行數(shù)據(jù)存儲(chǔ)器的電路。采用線(xiàn)選法尋址。用一根口線(xiàn)P2.7來(lái)尋址:●P2.7=0時(shí),訪問(wèn)6264(0),地址范圍為6000H~7FFFH。●P2.7=l時(shí),訪問(wèn)6264(1),地址范圍為E000H~FFFFH。⑴AT24CXX的內(nèi)部結(jié)構(gòu)與引腳圖如圖8-12所示⑵引腳說(shuō)明
1)串行時(shí)鐘(SCL)用于把所有數(shù)據(jù)同步輸入到EEPROM器件,或把數(shù)據(jù)從EEPROM器件串行同步讀出。在寫(xiě)方式中,當(dāng)SCL引腳是高電平時(shí),數(shù)據(jù)必須保護(hù)穩(wěn)定,并在SCL的下降沿把數(shù)據(jù)同時(shí)輸出。
2)串行數(shù)據(jù)(SDA)是一個(gè)雙向端口,用于把數(shù)據(jù)輸入到器件,或從器件輸出數(shù)據(jù),僅在SCL引腳為低時(shí),數(shù)據(jù)才能改變。此引腳是漏極開(kāi)路輸出,可以和任意多個(gè)漏極開(kāi)路或集極開(kāi)路引腳以"線(xiàn)或"方式連接在一起。3)器件地址A2、A1、A0,是器件的地址輸入端,用于器件的選擇。在一個(gè)單總線(xiàn)上,最多可掛8片AT24CXX(對(duì)于AT24C01A/02),可以通過(guò)A2、A1、A0的硬件連接來(lái)區(qū)分。4)寫(xiě)保護(hù)(WP)端子提供硬件數(shù)據(jù)保護(hù)。當(dāng)WP引腳接地時(shí),允許正常的讀寫(xiě);當(dāng)WP引腳接Vcc時(shí),存儲(chǔ)器被保護(hù),禁止對(duì)存儲(chǔ)器的任何寫(xiě)操作。不管WP引腳的狀態(tài)如何,器件可以被讀出。當(dāng)WP引腳不連接時(shí),此端則被拉為低電平??刂凭€(xiàn)路傳輸設(shè)備稱(chēng)為主設(shè)備,受控制的設(shè)備稱(chēng)為從設(shè)備。AT24CXX總是從設(shè)備。跟隨在啟動(dòng)條件后,主設(shè)備必須發(fā)出“設(shè)備尋址字節(jié)”,用于選擇一個(gè)接在系統(tǒng)總線(xiàn)上的從設(shè)備,其中包括設(shè)備類(lèi)別標(biāo)志,設(shè)備地址,讀或?qū)懖僮鳂?biāo)志等。然后,接收器把數(shù)據(jù)線(xiàn)SDA接到“低”,作為應(yīng)答的確認(rèn)信號(hào)(ACK)。ACK用于指示成功的數(shù)據(jù)傳輸。發(fā)送設(shè)備在發(fā)送8位數(shù)據(jù)后就釋放數(shù)據(jù)總線(xiàn),SDA變高。在發(fā)送數(shù)據(jù)時(shí),每個(gè)時(shí)鐘周期的下降沿傳輸一位數(shù)據(jù)。在第9個(gè)時(shí)鐘周期,接收器把數(shù)據(jù)線(xiàn)拉到“低”,以此向發(fā)送器確認(rèn)8位數(shù)據(jù)已被收到??偩€(xiàn)操作時(shí)序如圖8-13所示。注意,寫(xiě)周期時(shí)間Tw是從一寫(xiě)序列的有效停止信號(hào)開(kāi)始到內(nèi)部的擦/寫(xiě)周期結(jié)束之間的時(shí)間,一般Tw>10ms。1)起始信號(hào)在SCL為高時(shí),SDA從高到低的變化則為一個(gè)起始信號(hào),它必須發(fā)生在任何命令以前,起始和停止時(shí)序如圖8-14所示。2)停止信號(hào)在SCL為高時(shí),一個(gè)低到高的變化則是一個(gè)停止信號(hào),在一個(gè)讀序列以后,停止命令將把EEPROM置于低功耗方式,起始和停止時(shí)序如圖8-14所示。
3)確認(rèn)(輸出回答)所有的地址和數(shù)據(jù)都是以8bit的形式串行發(fā)送到EEPROM或從EEPROM中送出。在第9個(gè)時(shí)鐘周期,EEPROM送出一個(gè)“0”以確認(rèn)它所接收的每一個(gè)字節(jié)(見(jiàn)圖8-13c)。
4)器件尋址(器件地址)在起始信號(hào)后器件要求一個(gè)8bit的器件地址,地址前4位是器件編號(hào)地址“1010”序列。對(duì)AT24CXX系列的EEPROM,這點(diǎn)是共同的。地址后3位A2、A1、A0是引腳地址,必須與它們對(duì)應(yīng)的硬件連線(xiàn)的輸入信號(hào)相對(duì)應(yīng)。器件地址的第8位是讀/寫(xiě)操作選擇位,此位為高,則啟動(dòng)讀操作;若此位為低,則啟動(dòng)寫(xiě)操作。完成器件地址的比較后,器件輸出一個(gè)“0”,如果比較失敗,芯片將轉(zhuǎn)入備用狀態(tài)。AT24CXX器件的尋址(器件地址)格式見(jiàn)表8-3。表中,P0、P1、P2表示頁(yè)尋址,R/W=1時(shí),是讀操作;R/W=0時(shí),為寫(xiě)操作。5)寫(xiě)操作AT24CXX寫(xiě)操作示意圖如圖8-15所示。 ①字節(jié)寫(xiě)寫(xiě)操作序列如圖8-15a所示。
EEPROM進(jìn)入一個(gè)內(nèi)部寫(xiě)操作時(shí)序周期,把數(shù)據(jù)寫(xiě)入非易失性存儲(chǔ)器。在這個(gè)寫(xiě)操作周期中,所有的輸入都被禁止,在寫(xiě)操作完成以后EEPROM才會(huì)響應(yīng)。②頁(yè)寫(xiě)寫(xiě)操作序列如圖8-15b所示。AT24CXX具有執(zhí)行8B頁(yè)寫(xiě)的能力,頁(yè)寫(xiě)的啟動(dòng)和字節(jié)寫(xiě)的操作啟動(dòng)是相同的,但是在第一個(gè)數(shù)據(jù)字節(jié)被串行輸入到EEPROM后,單片微機(jī)不送停止信號(hào),而是在EEPROM確認(rèn)收到第一個(gè)數(shù)據(jù)字節(jié)以后,單片微機(jī)發(fā)送其它7個(gè)數(shù)據(jù)字節(jié),EEPROM每收到一個(gè)數(shù)據(jù)字節(jié)后將響應(yīng)一個(gè)0。單片微機(jī)必須用一個(gè)停止信號(hào)終止頁(yè)寫(xiě)過(guò)程。每收到一個(gè)數(shù)據(jù)以后,數(shù)據(jù)線(xiàn)字節(jié)地址的低3位加1,而高位是不改變的,以保持存儲(chǔ)器頁(yè)位置不變。如果多于8個(gè)數(shù)據(jù)字節(jié)被送到EEPROM,則數(shù)據(jù)字節(jié)地址重復(fù)滾動(dòng),以前輸入的數(shù)據(jù)將被覆蓋。一旦內(nèi)部的寫(xiě)操作時(shí)序周期被啟動(dòng),EEPROM的輸入就被禁止,可以啟動(dòng)確認(rèn)詢(xún)問(wèn)來(lái)判斷器件內(nèi)部是否寫(xiě)完。這種詢(xún)問(wèn)是發(fā)送一個(gè)啟動(dòng)信號(hào),接著再發(fā)送一個(gè)器件地址字節(jié),讀/寫(xiě)位代表要求的操作。只有當(dāng)內(nèi)部的寫(xiě)周期完成后,EEPROM才會(huì)送出一個(gè)0,以允許后續(xù)的讀或?qū)憽?)讀操作AT24CXX讀操作示意圖如圖8-16所示。除了在器件地址字節(jié)的讀/寫(xiě)選擇位上置1外,讀操作的啟動(dòng)方法和寫(xiě)操作的一樣。有三種讀操作:當(dāng)前地址讀、隨機(jī)地址讀和順序讀。
①當(dāng)前地址讀
AT24CXX內(nèi)部數(shù)據(jù)字節(jié)地址計(jì)數(shù)器含有上次讀或?qū)懖僮鞯臄?shù)據(jù)字節(jié)的地址加1的值。例如,上次讀或?qū)懖僮鞯牡刂穯卧獮閚,內(nèi)部地址計(jì)數(shù)器將指向n+1的地址單元。只要芯片的電源保持著,那么在操作過(guò)程中該地址就保持有效。在讀操作中,地址滾動(dòng)是從存儲(chǔ)器的最后一個(gè)頁(yè)面的最后一個(gè)字節(jié)翻轉(zhuǎn)到第一頁(yè)面的第一個(gè)字節(jié)。而在寫(xiě)操作中,地址滾動(dòng)是從當(dāng)前頁(yè)面的最后一個(gè)字節(jié)翻轉(zhuǎn)到同一頁(yè)面的第一個(gè)字節(jié)。一旦讀/寫(xiě)選擇位置1的器件,地址被時(shí)鐘同步輸入,且又被EEPROM確認(rèn)后,則當(dāng)前地址的數(shù)據(jù)字被串行同步送出。此時(shí),單片微機(jī)不是用輸入0來(lái)響應(yīng),而是把確認(rèn)拉到高電平,接著再產(chǎn)生一個(gè)停止信號(hào)來(lái)終止當(dāng)前地址讀操作。AT24CXX的當(dāng)前地址讀時(shí)序如圖8-16a所示。②隨機(jī)讀隨機(jī)讀操作允許單片微機(jī)隨機(jī)讀取任何一個(gè)存儲(chǔ)單元,此類(lèi)讀操作包括兩個(gè)步驟:首先需要一個(gè)空字節(jié)寫(xiě)序列,單片微機(jī)產(chǎn)生一個(gè)啟動(dòng)條件,發(fā)出讀/寫(xiě)選擇位置0的器件地址和單片微機(jī)要讀的數(shù)據(jù)字的地址,這個(gè)步驟把所要求的數(shù)據(jù)字的地址加載到EEPROM內(nèi)部地址計(jì)數(shù)器;第二步是單片微機(jī)收到EEPROM的數(shù)據(jù)字地址確認(rèn)(ACK)信息以后必須發(fā)出一個(gè)讀/寫(xiě)選擇位置1的器件地址字節(jié),以啟動(dòng)當(dāng)前地址讀操作EEPROM確認(rèn)器件地址,并且從單片微機(jī)要讀取的地址中輸出8位串行數(shù)據(jù)。此時(shí),單片微機(jī)不是用輸入“0”來(lái)響應(yīng),而是把確認(rèn)拉到高電平,接著產(chǎn)生一個(gè)停止信號(hào)來(lái)結(jié)束隨機(jī)讀操作。AT24CXX的隨機(jī)讀時(shí)序如圖8-16b所示。③順序讀順序讀可以由當(dāng)前地址讀或隨機(jī)地址讀啟動(dòng)。在單片微機(jī)收到一個(gè)數(shù)據(jù)字節(jié)以后,用一個(gè)確認(rèn)來(lái)響應(yīng)。只要EEPROM收到確認(rèn),它就繼續(xù)執(zhí)行數(shù)據(jù)字節(jié)地址加l,串行同步輸出順序的數(shù)據(jù)字節(jié)。當(dāng)?shù)刂愤_(dá)到存儲(chǔ)器地址界限時(shí),將發(fā)生地址重復(fù)滾動(dòng),然后順序讀仍將進(jìn)行下去。當(dāng)單片微機(jī)不用0來(lái)響應(yīng),而接著產(chǎn)生一個(gè)停止條件時(shí),順序讀操作被終止。AT24CXX的順序讀時(shí)序如圖8-16c所示AT24C02與80C51單片微機(jī)的連接原理圖如圖8-17所示。
U1、U2、U3、U4的器件地址分別是1010000R/W、1010001R/W、1010010R/W、1010011R/W。⑴主控器的寫(xiě)操作主控器向被尋址的被控器發(fā)送n個(gè)數(shù)據(jù)字節(jié),整個(gè)傳輸過(guò)程中數(shù)據(jù)傳送方向不變。其數(shù)據(jù)傳送格式如下:
其中∶黑底框?yàn)橹骺仄靼l(fā)送,被控器接收;其余為主控器接收,被控器發(fā)送(下同)。
A 應(yīng)答信號(hào)
A 非應(yīng)答信號(hào)
S 起始信號(hào)
P 停止信號(hào)
SLAW 尋址字節(jié)
data1~datan 寫(xiě)入被控器的n個(gè)數(shù)據(jù)字節(jié)⑵主控器的讀操作主控器從被控器中讀出n個(gè)字節(jié)的操作,整個(gè)傳輸過(guò)程中除尋址字節(jié)外,都是被控器發(fā)送,主控器接收的過(guò)程。數(shù)據(jù)傳送格式如下:
A 應(yīng)答信號(hào)
A 非應(yīng)答信號(hào)
S 起始信號(hào)
P 停止信號(hào)
SLAR 尋址字節(jié)(讀) data1~datan 被主控器讀出的n個(gè)數(shù)據(jù)字節(jié)主控器發(fā)送停止信號(hào)前應(yīng)發(fā)送非應(yīng)答位,向被控器表明讀操作結(jié)束從上述數(shù)據(jù)傳送格式可以看出:
1)無(wú)論何種方式起始、停止,尋址字節(jié)都由主控器發(fā)送,數(shù)據(jù)字節(jié)的傳送方向則遵循尋址字節(jié)中方向位的規(guī)定。
2)尋址字節(jié)只表明器件地址及傳送方向,器件內(nèi)部的n個(gè)數(shù)據(jù)地址由器件設(shè)計(jì)者在該器件的I2C總線(xiàn)數(shù)據(jù)操作格式中,指定第一個(gè)數(shù)據(jù)字節(jié)作為器件內(nèi)的單元地址(SUBADR)數(shù)據(jù),并且設(shè)置地址自動(dòng)加減功能,以減少單元地址尋址操作。
3)每個(gè)字節(jié)傳送都必須有應(yīng)答信號(hào)(A或A)相隨。4)I2C總線(xiàn)被控器在接收到起始信號(hào)后都必須復(fù)位它們的總線(xiàn)邏輯,以便對(duì)將要開(kāi)始的被控器地址的傳送進(jìn)行預(yù)處理。對(duì)于內(nèi)部沒(méi)有I2C總線(xiàn)的單片微機(jī)按照I2C總線(xiàn)的原理及時(shí)序要求用軟件虛擬I2C總線(xiàn),采用系統(tǒng)內(nèi)的兩根I/O口線(xiàn)虛擬I2C總線(xiàn)的SDA和SCL。虛擬I2C總線(xiàn)的通用軟件包可提供使用,對(duì)于非80C51只要改變助記符指令即可。應(yīng)用時(shí)注意幾點(diǎn):1)通用軟件包為一完整的子程序集合,使用時(shí)可預(yù)先安放在程序存儲(chǔ)器的任何空間,通用軟件包與系統(tǒng)硬件無(wú)關(guān)。
2)注意子程序嵌套所須的堆??臻g。3)通用軟件包中直接與應(yīng)用程序編寫(xiě)有關(guān)的子程序?yàn)閃RNBYT和RDNBYT。相應(yīng)的I2C總線(xiàn)讀寫(xiě)指令為:
MOVSLA,#SLAW ;尋址被控器件(寫(xiě)) MOVNUMBYT,#n ;規(guī)定傳送字節(jié)數(shù)
LCALLWRNBYT ;調(diào)用發(fā)送n個(gè)字節(jié)數(shù)據(jù)子程序
MOVSLA,#SLAR ;尋址被控器件(讀) MOVNUMBYT,#n ;規(guī)定傳送字節(jié)數(shù)
LCALLRDNBYT ;調(diào)用接收n個(gè)字節(jié)數(shù)據(jù)子程序⒈ 啟動(dòng)I2C總線(xiàn)
STA﹕SETB SDA SETB SCL NOP NOP CLR SDA NOP NOP CLR SCL RET⒉ 停止I2C總線(xiàn)數(shù)據(jù)傳送
STOP:CLR SDA SETB SCL NOP NOP SETB SDA NOP NOP CLR SCL RET⒊ 發(fā)送應(yīng)答位
I2C總線(xiàn)上第9個(gè)時(shí)鐘脈沖對(duì)應(yīng)于應(yīng)答位,相應(yīng)數(shù)據(jù)線(xiàn)上“0”為“ACK”,“0”為“ACK”。
MACK﹕CLR SDA SETB SCL NOP NOP CLR SCL SETB SDA RET⒋ 發(fā)送非應(yīng)答位
MNACK:SETB SDA SETB SCL NOP NOP CLR SCL CLR SDA RET⒌ 應(yīng)答位檢查 被控器收到字節(jié)后,必須向主控器發(fā)應(yīng)答位。
CACK:SETB SDA SETB SCL CLR F0 MOV A,P1 JNB ACC.7,CEND ;讀SDA SETB F0 CEND:CLR SCL NOP NOP RET⒍ 向SDA線(xiàn)上發(fā)送一個(gè)數(shù)據(jù)字節(jié)(數(shù)據(jù)在A中) WRBYT﹕MOVR0,#08H ;長(zhǎng)度
WLP﹕RLC A ;發(fā)送數(shù)據(jù)左移
JC WR1 AJMP WR0 WLP1﹕DJNZ R0,WLP RET WR1﹕SETB SDA ;發(fā)送“1”(SCL=1時(shí),SDA保持“1” ) SETB SCL NOP NOP CLR SCL CLR SDA AJMP WLP1 WR0﹕CLR SDA ;發(fā)送“0” SETB SCL NOP NOP CLR SCL AJMP WLP1⒎ 從SDA線(xiàn)上讀取一個(gè)數(shù)據(jù)字節(jié)
RDBYT﹕MOV R0,#08H ;8位
RLP﹕SETB SDA ;P1.7為輸入狀態(tài)
SETB SCL ;使SDA有效
MOV A,P1 JNB ACC.7,RD0 AJMP RD1 RLP1﹕DJNZ R0,RLP RET RD0﹕CLR C ;讀入“0”,拼裝
MOV A,R2 RLC A MOV R2,A CLR SCL AJMP RLP1 RD1﹕SETB C ;讀入“1”,拼裝
MOV A,R2 RLC A MOV R2,A CLR SCL ;使SCL為0,繼續(xù)可以接收
AJMP RLP1⒏ 模擬I2C總線(xiàn)發(fā)送幾個(gè)字節(jié)數(shù)據(jù)(數(shù)據(jù)格式見(jiàn)前) WRNBYT﹕PUSH PSW MOVPSW,#18H ;換工作寄存器區(qū)
WRNBYT0﹕MOVR0,NUMBYT WRNBYT1﹕LCALL STA ;啟動(dòng)
MOV A,SLA ;尋址字節(jié)SLAW/R LCALL WRBYT ;發(fā)一個(gè)字節(jié)
LCALL CACK ;檢查應(yīng)答位
JB F0,WRNBYT1 ;非應(yīng)答位,重發(fā)
MOV R1,#MTD ;發(fā)送數(shù)據(jù)緩沖區(qū)首址
WRDA﹕MOV A,@R1 LCALL WRBYT ;發(fā)送
LCALL CACK JB F0,WRNBYT0 INC R1 DJNZ R0,WRDA ;判發(fā)送完?
LCALLSTOP ;停止
POP PSW RET⒐ 模擬I2C總線(xiàn)接收幾個(gè)字節(jié)數(shù)據(jù)
RDNBYT﹕PUSH PSW RDNBYT1﹕MOVPSW,#18H LCALL STA MOV A,SLA ;尋址字節(jié)
LCALL WRBYT LCALL CACK JB F0,RDNBYT1 ;非應(yīng)答位,重寫(xiě)
RDN﹕MOV R1,#MRD ;接收緩沖區(qū)首址
RDN1﹕LCALL RDBYT MOV @R1,A DJNZ NUMBYT,ACK ;N個(gè)字節(jié)接收完?
LCALL MNACK ;接收完,需發(fā)非應(yīng)答位
LCALL STOP POP PSW RET ACK﹕LCALLMACK INC R1 SJMP RDN1例:已知AT24CXX器件地址為1010,A2、A1、A0為引腳地址,若A2、A1、A0全接地,則尋址地址SLAW(寫(xiě))=A0H,而SLAR(讀)=A1H。讀AT24C02,將其中50H~57H中的數(shù)據(jù)讀出,并存入片內(nèi)RAM的60H~67H中。 ORG 0000H VAT24R﹕MOVMTD,#50H ;發(fā)送數(shù)據(jù)緩沖區(qū)
MOV SAL,#SLAW ;寫(xiě)尋址地址
MOV NUMBYT,#1 LCALL WRNBYT MOV SLA,#SLAR ;接收緩沖區(qū)
MOV NUMBYT,#08H LCALL RDNBYT ;調(diào)用子程序
ACALL RMOV8 ;調(diào)用數(shù)據(jù)轉(zhuǎn)移子程序
SJMP $ RMOV8﹕MOV R0,#MRD ;將8個(gè)數(shù)據(jù)從MRD轉(zhuǎn)移到60H~67H MOV R1,#60H MOV R2,#08H RMOV﹕MOV A,@R0 MOV @R1,A INC R0 INC R1 DJNZ R2,RMOV RET
1.單片微機(jī)為什么需要I/O接口電路
存儲(chǔ)器是半導(dǎo)體電路,與單片微機(jī)具有相同的電路形式,數(shù)據(jù)信號(hào)也是相同的(電平信號(hào)),能相互兼容直接使用,存儲(chǔ)器與單片微機(jī)之間采用同步定時(shí)工作方式。 存儲(chǔ)器與單片微機(jī)之間的連接相當(dāng)簡(jiǎn)單,除地址線(xiàn)、數(shù)據(jù)線(xiàn)之外,就是讀或?qū)戇x通信號(hào),實(shí)現(xiàn)起來(lái)非常方便。
8.4I/O的擴(kuò)展及應(yīng)用
8.4.1I/O擴(kuò)展概述
CPU和外部設(shè)備之間的數(shù)據(jù)傳送卻十分復(fù)雜。①高速CPU與工作速度快慢差異很大的慢速外部設(shè)備的矛盾。②外部設(shè)備的數(shù)據(jù)信號(hào)是多種多樣的。③外部設(shè)備種類(lèi)繁多。④外設(shè)的數(shù)據(jù)傳送有近距離的,也有遠(yuǎn)距離的。單片微機(jī)必須在單片微機(jī)和外設(shè)之間有一個(gè)接口電路,通過(guò)接口電路對(duì)單片微機(jī)與外設(shè)之間的數(shù)據(jù)傳送進(jìn)行協(xié)調(diào)。
接口電路主要有如下幾項(xiàng)功能:①速度協(xié)調(diào)速度上的差異,使得數(shù)據(jù)的I/O傳送只能以異步方式進(jìn)行,在確認(rèn)外設(shè)已為數(shù)據(jù)傳送作好準(zhǔn)備的前提下才能進(jìn)行I/O操作。②三態(tài)緩沖數(shù)據(jù)輸入時(shí),輸入設(shè)備向CPU傳送的數(shù)據(jù)也要通過(guò)數(shù)據(jù)總線(xiàn),為了維護(hù)數(shù)據(jù)總線(xiàn)上數(shù)據(jù)傳送的有秩序,只允許當(dāng)前時(shí)刻正在進(jìn)行數(shù)據(jù)傳送的數(shù)據(jù)源使用數(shù)據(jù)總線(xiàn),其它數(shù)據(jù)源都必須與數(shù)據(jù)總線(xiàn)處于隔離狀態(tài)。要求接口電路能為三態(tài)緩沖功能。③數(shù)據(jù)轉(zhuǎn)換包括:模數(shù)轉(zhuǎn)換、數(shù)模轉(zhuǎn)換、串并轉(zhuǎn)換和并串轉(zhuǎn)換等。
⒉接口與端口 外設(shè)之間在數(shù)據(jù)傳送方面的聯(lián)系。其功能主要是通過(guò)電路實(shí)現(xiàn)的,稱(chēng)之為接口電路。
在接口電路中應(yīng)該包含有數(shù)據(jù)寄存器以保存輸入輸出數(shù)據(jù)、狀態(tài)寄存器以保存外設(shè)的狀態(tài)信息、命令寄存器以保存來(lái)自CPU的有關(guān)數(shù)據(jù)傳送的控制命令。由于在數(shù)據(jù)的傳送中,CPU需要對(duì)這些寄存器的狀態(tài)口和保存命令的命令口尋址等,通常把接口電路中這些已編址并能進(jìn)行讀或?qū)懖僮鞯募拇嫫鞣Q(chēng)之為端口(port),或簡(jiǎn)稱(chēng)口。一個(gè)接口電路就對(duì)應(yīng)著多個(gè)端口地址。對(duì)它們像存儲(chǔ)單元一樣進(jìn)行編址。
⒊數(shù)據(jù)隔離技術(shù)
輸入輸出的數(shù)據(jù)都要通過(guò)系統(tǒng)的數(shù)據(jù)總線(xiàn)進(jìn)行傳送,為了正確地進(jìn)行數(shù)據(jù)的傳送,就必須解決數(shù)據(jù)總線(xiàn)的隔離問(wèn)題。 對(duì)于輸出設(shè)備的接口電路,要提供鎖存器,當(dāng)允許接收輸出數(shù)據(jù)時(shí)閂鎖打開(kāi),否則關(guān)閉。對(duì)于輸入設(shè)備的接口電路,要使用三態(tài)緩沖電路或集電極開(kāi)路門(mén)。⑴三態(tài)緩沖電路具有三態(tài)輸出的門(mén)電路,也稱(chēng)之為三態(tài)門(mén)(TSL),低電平狀態(tài)、高電平狀態(tài)和高阻抗三種狀態(tài)。當(dāng)三態(tài)緩沖器的輸出為高或低電平時(shí),就是對(duì)數(shù)據(jù)總線(xiàn)的驅(qū)動(dòng)狀態(tài);當(dāng)三態(tài)緩沖器的輸出為高阻抗時(shí),就是對(duì)總線(xiàn)的隔離狀態(tài)。三態(tài)緩沖器的控制邏輯如表8–4所示。
對(duì)三態(tài)緩沖電路的主要性能要求有:
·速度快,信號(hào)延遲時(shí)間短。例如典型三態(tài)緩沖器的延遲時(shí)間只有8-13ns。
·較高的驅(qū)動(dòng)能力。
·高阻抗時(shí)對(duì)數(shù)據(jù)總線(xiàn)不呈現(xiàn)負(fù)載,最多只能拉走不大于0.04mA電流。⑵集電極開(kāi)路門(mén) 集電極開(kāi)路門(mén)是從基本的與非門(mén)電路演變過(guò)來(lái)的,把集電極回路中的電阻除去,讓集電極開(kāi)路,就得到了集電極開(kāi)路門(mén)電路??梢宰鳛榧姌O開(kāi)路的電路有反相器、與非門(mén)以及與或非門(mén)等。 集電極開(kāi)路器件的輸出是低電平起作用,如果其中一個(gè)為低電平,則總的輸出即為低電平。只有當(dāng)所有連在一起的集電極開(kāi)路器件的輸出端均為高電平時(shí)總的輸出才是高電平。對(duì)于這種邏輯關(guān)系有時(shí)也稱(chēng)之為”線(xiàn)或”。
⒋I/O編址技術(shù)
接口電路要對(duì)其中的端口進(jìn)行編址。對(duì)端口編址是為I/O操作而進(jìn)行的,也稱(chēng)為I/O編址。常用的I/O編址有獨(dú)立編址方式和統(tǒng)一編址方式。⑴獨(dú)立編址方式 優(yōu)點(diǎn)是I/O地址空間和存儲(chǔ)器地址空間相互獨(dú)立,但需要專(zhuān)門(mén)設(shè)置一套I/O指令和控制信號(hào),從而增加了系統(tǒng)的開(kāi)銷(xiāo)。⑵統(tǒng)一編址方式 統(tǒng)一編址就是把系統(tǒng)中的I/O和存儲(chǔ)器統(tǒng)一進(jìn)行編址。在這種編址方式中,把接口中的寄存器(端口)與存儲(chǔ)器中的存儲(chǔ)單元同等對(duì)待。稱(chēng)之為存儲(chǔ)器映像(Memorymapped)編址。80C51使用統(tǒng)一編址方式。在接口電路中的I/O編址也采用16位地址,和存儲(chǔ)單元的地址長(zhǎng)度一樣。
⒌I/O數(shù)據(jù)傳送的控制方式
有無(wú)條件傳送方式、查詢(xún)方式、中斷方式和直接存儲(chǔ)器存?。―MA)4種方式。在單片微機(jī)中主要使用前三種方式。⑴無(wú)條件傳送方式 無(wú)條件傳送也稱(chēng)為同步程序傳送。在進(jìn)行I/O操作時(shí),不需要測(cè)試外部設(shè)備的狀態(tài),可以根據(jù)需要隨時(shí)進(jìn)行數(shù)據(jù)傳送操作。⑵程序查詢(xún)方式 查詢(xún)方式又稱(chēng)之為有條件傳送方式,即數(shù)據(jù)的傳送是有條件的。為了實(shí)現(xiàn)查詢(xún)方式的數(shù)據(jù)輸入輸出傳送,需要由接口電路提供外設(shè)狀態(tài),并以軟件方法進(jìn)行狀態(tài)測(cè)試。因此這是一種軟硬件方法結(jié)合的數(shù)據(jù)傳送方式。
⑶程序中斷方式 當(dāng)外設(shè)為數(shù)據(jù)傳送作好準(zhǔn)備之后,就向CPU發(fā)出中斷請(qǐng)求,CPU響應(yīng)中斷請(qǐng)求之后,轉(zhuǎn)去為外設(shè)的數(shù)據(jù)輸入輸出服務(wù)。待服務(wù)完成之后,CPU再繼續(xù)執(zhí)行被中斷的原程序。
80C51的4個(gè)8位雙向口,都具有數(shù)據(jù)I/O操作功能。⒈有關(guān)I/O口的指令
由于80C51采用統(tǒng)一編址方式,沒(méi)有專(zhuān)門(mén)的I/O指令。4個(gè)I/O口均屬于內(nèi)部的SFR。8.4.280C51單片微機(jī)I/O口直接應(yīng)用
⑴I/O口的數(shù)據(jù)傳送指令 向口輸出數(shù)據(jù)的指令有:MOV Px,AMOV Px,RnMOV Px,@RiMOV Px,direct
從口輸入數(shù)據(jù)的指令有:MOV A,PxMOV Rn,PxMOV @Ri,PxMOV direct,Px⑵I/O口的位操作指令位傳送指令 MOV Px.y C位清0指令 CLR Px.y 位置1指令 SETB Px.y 位取反 CPL Px.y 位為1轉(zhuǎn)移 JB Px.y rel位為0轉(zhuǎn)移 JNB Px.y rel位為1轉(zhuǎn)移并清零 JBC Px.y rel⑶I/O口其它操作指令邏輯與指令
ANL Px,A 邏輯和指令
ORL Px,A 邏輯異與指令
XRL Px,A 加1指令
INC Px 減1指令
DEC Px 減1條件轉(zhuǎn)移指令
DJNZ Px, rel數(shù)值比較轉(zhuǎn)移指令
CJNE A,Px, rel例:執(zhí)行指令MOV P1,#7FH執(zhí)行結(jié)果為:P1.7引腳輸出為低電平,其余7個(gè)引腳都輸出高電平。
⒈簡(jiǎn)單輸出口的擴(kuò)展
輸出口的主要功能是進(jìn)行數(shù)據(jù)保持(鎖存),一般應(yīng)用鎖存器芯片實(shí)現(xiàn)。比如常用74LS377芯片,該芯片是一個(gè)具有“使能”控制端的8D鎖存器。一個(gè)時(shí)鐘輸入端CK,一個(gè)鎖存允許信號(hào)G,當(dāng)G=0時(shí),CK的上跳變將把8位D輸入端的數(shù)據(jù)打入8位鎖存器,這時(shí)Q輸出端將保持D端輸入的數(shù)據(jù)。80C51與74LS377的接口見(jiàn)圖8–18。例:將一個(gè)數(shù)據(jù)字節(jié)從74LS377輸出
MOV DPTR,#7FFFH ;地址指針指向74LS377 MOV A,#DATA ;將輸出數(shù)據(jù)送A MOVX@DPTR,A ;輸出數(shù)據(jù)8.4.380C51簡(jiǎn)單I/O的擴(kuò)展
⒉簡(jiǎn)單輸入口的擴(kuò)展 對(duì)于常態(tài)數(shù)據(jù)的輸入,只需采用8位三態(tài)門(mén)控制電路芯片即可。圖8-19是用74LS244通過(guò)P0口擴(kuò)展的8位并行輸入口,圖中,三態(tài)門(mén)由P2.6和RD相或控制,其端口地址為BFFFH。例:數(shù)據(jù)輸入
MOV DPTR,#0BFFFH ;指向74LS244口地址
MOVX A,@DPTR ;讀入數(shù)據(jù)8.4.4可編程I/O并行接口芯片8255A
的擴(kuò)展及應(yīng)用
在單片微機(jī)I/O擴(kuò)展中常用的并行可編程接口芯片有:8255A可編程通用并行接口芯片。8155 帶RAM和定時(shí)器、計(jì)數(shù)器的可編程并行接口芯片。8279 可編程鍵盤(pán)/顯示器接口芯片。8.4.4.1
8255A的邏輯結(jié)構(gòu)和引腳
8255A是一個(gè)40引腳的雙列直插式芯片,其邏輯結(jié)構(gòu)如圖8–20所示。按功能可把8255A分為三個(gè)邏輯電路部分,即:口電路、總線(xiàn)接口電路和控制邏輯電路。 ⑴口電路
A口和B口是單純的數(shù)據(jù)口。
C口則既可以作數(shù)據(jù)口,又可以作控制口使用。
A組:A口和C口高4位合在一起。
B組:B口和C口低4位合在一起。⑵總線(xiàn)接口電路實(shí)現(xiàn)8255A和單片微機(jī)的信號(hào)連接。 ①數(shù)據(jù)總線(xiàn)緩沖器為8位雙向三態(tài)緩沖器,可直接和80C51的數(shù)據(jù)線(xiàn)相連,與I/O操作有關(guān)的數(shù)據(jù)、控制字和狀態(tài)信息都是通過(guò)該緩沖器進(jìn)行傳送。 ②讀/寫(xiě)控制邏輯
·CS—片選信號(hào)
·RD—讀信號(hào)
·WR—寫(xiě)信號(hào)
·A0、A1—端口選擇信號(hào)。8255A共有4個(gè)可尋址的端口(即A口、B口、C口和控制寄存器),用二位地址編碼即可實(shí)現(xiàn)選擇。參見(jiàn)表8–5?!ESET—復(fù)位信號(hào)。復(fù)位之后,控制寄存器清除,各端口被置為輸入方式。 讀寫(xiě)控制邏輯用于實(shí)現(xiàn)8255A的硬件管理,包括芯片的選擇,口的尋址以及規(guī)定各端口和單片微機(jī)之間的數(shù)據(jù)傳送方向。詳見(jiàn)表8–38255A接口工作狀態(tài)選擇表.⑶控制邏輯電路 控制邏輯電路包括A組控制和B組控制,合在一起構(gòu)成8位控制寄存器。用于存放各口的工作方式控制字。8.4.4.28255A工作方式及I/O操作
⑴8255A的工作方式 有三種工作方式,方式0、方式1、方式2.
①方式0基本輸入/輸出方式 可供使用的是兩個(gè)8位口(A口和B口)及兩個(gè)4位口(C口高4位部分和低4位部分)。4個(gè)口可以是輸入和輸出的任何組合。適用于無(wú)條件數(shù)據(jù)傳送,也可以把C口的某一位作為狀態(tài)位,實(shí)現(xiàn)查詢(xún)方式的數(shù)據(jù)傳送。②方式1選通輸入/輸出方式
A口和B口分別用于數(shù)據(jù)的輸入/輸出。而C口則作為數(shù)據(jù)傳送的聯(lián)絡(luò)信號(hào)。具體定義見(jiàn)表8–6。A口和B口的聯(lián)絡(luò)信號(hào)都是三個(gè),如果A或B只有一個(gè)口按方式1使用,則剩下的另外13位口線(xiàn)仍然可按方式0使用。如果兩個(gè)口都按方式1使用,則還剩下2位口線(xiàn),這兩位口線(xiàn)仍然可以進(jìn)行位狀態(tài)的輸入輸出。
適用于查詢(xún)或中斷方式的數(shù)據(jù)輸入/輸出。
③方式2雙向數(shù)據(jù)傳送方式 只有A口才能選擇這種工作方式,A口既能輸入數(shù)據(jù)又能輸出數(shù)據(jù)。在這種方式下需使用C口的5位線(xiàn)作控制線(xiàn),信號(hào)定義如表8–6所示。適用于查詢(xún)或中斷方式的雙向數(shù)據(jù)傳送。如果把A口置于方式2下,則B口只能工作于方式0.⑵數(shù)據(jù)輸入操作 用于輸入操作的聯(lián)絡(luò)信號(hào)有:
·STB—選通脈沖,輸入低電平有效。 當(dāng)外設(shè)送來(lái)STB信號(hào)時(shí),輸入數(shù)據(jù)裝入8255A的鎖存器。
·IBF—輸入緩沖器滿(mǎn)信號(hào),輸出高電平有效。
IBF信號(hào)有效,表明數(shù)據(jù)已裝入鎖存器,它是一個(gè)狀態(tài)信號(hào)。
·INTR—中斷請(qǐng)求信號(hào),高電平有效,當(dāng)IBF為高,信號(hào)由低變高(后沿)時(shí),中斷請(qǐng)求信號(hào)有效。向單片微機(jī)發(fā)出中斷請(qǐng)求。 數(shù)據(jù)輸入過(guò)程:當(dāng)外設(shè)準(zhǔn)備好數(shù)據(jù)輸入后,發(fā)出信號(hào),輸入的數(shù)據(jù)送入緩沖器。然后IBF信號(hào)有效。查詢(xún)方式:IBF作為狀態(tài)信號(hào)供查詢(xún)使用。中斷方式:當(dāng)信號(hào)由低變高時(shí),產(chǎn)生INTR信號(hào),向單片微機(jī)發(fā)出中斷。單片微機(jī)在響應(yīng)中斷后執(zhí)行中斷服務(wù)程序時(shí)讀入數(shù)據(jù),并使INTR信號(hào)變低,同時(shí)也使IBF信號(hào)同時(shí)變低。以通知外設(shè)準(zhǔn)備下一次數(shù)據(jù)輸入。⑶數(shù)據(jù)輸出操作用于數(shù)據(jù)輸出操作的聯(lián)絡(luò)信號(hào)有:
·ACK—外設(shè)響應(yīng)信號(hào)輸入,低電平有效。當(dāng)外設(shè)取走輸出數(shù)據(jù),并處理完畢后向單片微機(jī)發(fā)回的響應(yīng)信號(hào)。
·OBF——輸出緩沖器滿(mǎn)信號(hào),輸出,低電平有效。當(dāng)單片微機(jī)把輸出數(shù)據(jù)寫(xiě)入8255A鎖存器后,該信號(hào)有效,并送去啟動(dòng)外設(shè)以接收數(shù)據(jù)。
·INTR—中斷請(qǐng)求信號(hào),輸出,高電平有效。數(shù)據(jù)輸出過(guò)程:外設(shè)接收并處理完一組數(shù)據(jù)后,發(fā)回ACK信號(hào)。該信號(hào)使OBF變高,表明輸出緩沖器已空。查詢(xún)方式:OBF可作為狀態(tài)信號(hào)供查詢(xún)使用。中斷方式:當(dāng)ACK信號(hào)結(jié)束時(shí),INTR有效,向單片微機(jī)發(fā)出中斷請(qǐng)求。在中斷服務(wù)過(guò)程中,把下一個(gè)輸出數(shù)據(jù)寫(xiě)入8255A的輸出緩沖器。寫(xiě)入后OBF有效,表明輸出數(shù)據(jù)已到,并以此信號(hào)啟動(dòng)外設(shè)工作,取走并處理8255A中的輸出數(shù)據(jù)。
8.4.4.38255A控制字及初始化編程
有兩種控制字,即8255A工作方式控制字和C口位置位/復(fù)位控制字。⑴工作方式控制字
用于確定各口的工作方式及數(shù)據(jù)傳送方向。其格式如圖8-21所示。
D7是該控制字的特征位,固定為1。⑵C口位置位/復(fù)位控制字
C口的每一位都可以進(jìn)行置位或復(fù)位。
8255A的位置位/復(fù)位控制字格式如圖8–22所示。
D7是該控制字的特征位,固定為0。 控制字每次只能對(duì)C口中的一位進(jìn)行置位或復(fù)位。
8.4.4.48255A與80C51的接口及應(yīng)用8255A與80C51的接口電路見(jiàn)圖8–23。PA地址:7FFCH(A15=0,A1=0,A0=0)PB地址:7FFDH(A15=0,A1=0,A0=1)PC地址:7FFEH(A15=0,A1=1,A0=0)
控制寄存器地址;7FFFH(A15=0,A1=1,A0=1)
例:對(duì)8255A各口作如下設(shè)置:A口方式0,B口方式0,從A口輸入,從B口、C口輸出。工作方式控制字為,即90H。
MOVA,#90H ;設(shè)A口、B口為方式0
;A口輸入,B口、C口輸出 MOV DPTR,#7FFFH MOVX @DPTR,A
MOV DPTR,#7FFCH
;從A口輸入
MOVX A,@DPTR MOV DPTR,#7FFDH
;從B口輸出
MOVX @DPTR,A
MOV DPTR,#7FFEH
;從C口輸出
MOVX @DPTR,A例:把C口的第5位PC5置為1。
MOV DPTR,#7FFFH MOV A,#00001011
;PC5置位
MOVX @,DPTR,A8.4.5串行I/O接口芯片PCF8574的擴(kuò)展及應(yīng)用
應(yīng)用虛擬I2C總線(xiàn)可以用來(lái)擴(kuò)展輸入/輸出接口。
PCF8574是飛利浦公司生產(chǎn)的一種單片CMOS電路,具有I2C總線(xiàn)接口和8位準(zhǔn)雙向口,可直接驅(qū)動(dòng)LED發(fā)光管;還有中斷邏輯線(xiàn);3個(gè)硬件地址引腳使I2C總線(xiàn)系統(tǒng)最多可掛接8片PCF8574。8.4.5.1PCF8574結(jié)構(gòu)框圖與引腳功能. PCF8574結(jié)構(gòu)框圖如圖8-24所示。圖8-25給出了PCF8574/PCF8574A的引腳圖。
·SDA:串行數(shù)據(jù)線(xiàn),雙向。
·SCL:串行時(shí)鐘線(xiàn),輸入。
·P7~P0:8位準(zhǔn)雙向輸入/輸出口。準(zhǔn)雙向口的每一位可作輸入或輸出。上電復(fù)位時(shí),口的每一位均為高電平。某位在作輸入前,應(yīng)置為高電平。
·A2~A0:地址輸入線(xiàn)。INT·:中斷輸出線(xiàn),低電平有效。8.4.5.2PCF8574的尋址方式及操作 1.PCF8574/PCF8574A的地址
PCF8574的從地址如下:D7 D6 D5 D4 D3 D2 D1 D00 1 0 0 A2 A1 A0 R/W⒉讀操作(輸入)讀操作將PCF8574口的數(shù)據(jù)傳給控制器(主器件)。對(duì)PCF8574讀操作的時(shí)序見(jiàn)圖8-26所示。3.寫(xiě)操作(輸出)寫(xiě)操作為控制器(主器件)將數(shù)據(jù)傳給PCF8574口。對(duì)PCF8574寫(xiě)操作的時(shí)序見(jiàn)圖8-27所示。8.4.5.3PCF8574的應(yīng)用
1.應(yīng)用PCF8574擴(kuò)展8位輸入口電路圖如圖8-28所示。將開(kāi)關(guān)的狀態(tài)讀入片內(nèi)RAM30H單元中。程序如下:
RDS:ACALLSTA ;開(kāi)始
MOVA,#41H ;PCF8574為讀方式
ACALLWRBYT ACALLCACK ;檢查ACK信號(hào)
JBF0,RDS ACALLRDBYT ;讀數(shù)據(jù)
MOV30H,A …2.應(yīng)用PCF8574擴(kuò)展8位輸出口電路圖如圖8-29所示。程序如下:
WRS:ACALL STA ;開(kāi)始
MOVA,#40H ;PCF8574為寫(xiě)方式
ACALL WRBYT ACALL CACK ;檢查ACK信號(hào)
JBF0,WRS MOVA,#XXH ;指示燈的亮熄取決于不同的立即數(shù)
ACALL WRBYT ACALL CACK ;檢查ACK信號(hào)
JB F0,WRS8.5D/A轉(zhuǎn)換器接口的擴(kuò)展及應(yīng)用
8.5.1概述
1.
D/A轉(zhuǎn)換器及其接口電路的一般特點(diǎn)
將數(shù)字信號(hào)轉(zhuǎn)換成模擬信號(hào)的器件,為計(jì)算機(jī)系統(tǒng)的數(shù)字信號(hào)和模擬環(huán)境的連續(xù)信號(hào)之間提供了一種接口。 輸出是由數(shù)字輸入和參考源Vref組合進(jìn)行控制的。 大多數(shù)常用的數(shù)/模轉(zhuǎn)換器的數(shù)字輸入是二進(jìn)制或BCD碼形式的,輸出可以是電流也可以是電壓,而多數(shù)是電流。 在多數(shù)電路中,數(shù)/模轉(zhuǎn)換器的輸出需要用運(yùn)算放大器組成的電流一電壓轉(zhuǎn)換器將電流輸出轉(zhuǎn)換成電壓輸出。
2.?dāng)?shù)/模轉(zhuǎn)換器接口電路的一般特點(diǎn)
(1)內(nèi)部無(wú)鎖存器 如DAC800(8位)、AD7520(10位)、AD7521(12位)。最適合與80C51的P1、P2等具有輸出鎖存功能的I/O口直接接口。 當(dāng)它們與P0口相接口時(shí),則需在其輸入端增加鎖存器。(2)內(nèi)部帶鎖存器 目前應(yīng)用的數(shù)/模轉(zhuǎn)換器,不僅具有數(shù)據(jù)鎖存器,有的還提供地址譯碼電路,有些包含雙重、甚至多重的數(shù)據(jù)緩沖結(jié)構(gòu),如DAC0832、DAC1230、AD7542以及AD7549等。 與80C51中的P0口相接口較為適合。
目前DAC除了可以并行方式與單片微機(jī)連接外,還可使用串行方式與單片微機(jī)連接,比如使用三線(xiàn)SPI數(shù)字通信協(xié)議的10位DACTLC5615、12位DACAD5320;使用I2C總線(xiàn)的8位DACMAX518等。
⒈DAC0832的技術(shù)特性●輸入數(shù)字量為8位參考電壓Vref的工作范圍為+10~-10V,單電源電壓Vcc的范圍為+5V~+15V●電流建立時(shí)間為1μsCMOS工藝低功耗20mW●具有單緩沖、雙緩沖和直通三種數(shù)據(jù)輸入工作方式。8.5.28位D/A轉(zhuǎn)換器芯片DAC0832
⒉DAC0832的內(nèi)部邏輯結(jié)構(gòu)
DAC0832的內(nèi)部邏輯結(jié)構(gòu)如圖8-30所示。芯片內(nèi)有一個(gè)8位輸入寄存器,一個(gè)8位DAC寄存器,形成兩級(jí)緩沖結(jié)構(gòu)。在一些場(chǎng)合(比如X-Y繪圖儀的單片微機(jī)控制),能夠使多個(gè)數(shù)模轉(zhuǎn)換器分時(shí)輸入數(shù)據(jù)之后,同時(shí)輸出模擬電壓。⒊DAC0832的引腳及其功能引腳如圖8-31所示?!馛S:片選。與ILE信號(hào)結(jié)合,可對(duì)WR1是否起作用進(jìn)行控制?!瘛LE:允許數(shù)據(jù)輸入鎖存?!馱R1:寫(xiě)信號(hào)1,用于將CPU數(shù)據(jù)總線(xiàn)送來(lái)的數(shù)據(jù)鎖存于輸入 寄存器中,WR1有效時(shí),CS和ILE必須同時(shí)有效?!ぁ馱R2:寫(xiě)信號(hào)2,用于將輸入寄存器中的數(shù)據(jù)傳送到DAC寄 存器中,并鎖存起來(lái)。當(dāng)WR2有效時(shí),XFER也必須同時(shí)有效。 ●XFER:傳送控制信號(hào),控制WR2,選通DAC寄存器?!馜I7~DI0:8位數(shù)字輸入?!馡out1:DAC電流輸出1,當(dāng)數(shù)字量為全1時(shí),輸出電流最大;當(dāng)數(shù)字量為全0時(shí)輸出電流最小。
●·Iout2:DAC電流輸出2?!瘛bf:反饋電阻(15KΩ),已固化在芯片中。Rbf作為運(yùn)算放大器反饋電阻,為DAC提供電壓輸出?!瘛ref:參考電壓輸入,通過(guò)它將外加高精度電壓源與內(nèi)部的電阻網(wǎng)絡(luò)相連接。Vref可在+10~一10V范圍內(nèi)選擇?!馰CC:數(shù)字電路電源?!瘛GND:數(shù)字地。
·●AGND:模擬地。8.5.3DAC0832的擴(kuò)展與應(yīng)用
8.5.3.1DAC0832的單緩沖方式的接口電路和應(yīng)用
使DAC0832內(nèi)部的輸入寄存器或DAC寄存器中有一個(gè)處于直通方式,另一個(gè)處于受控的鎖存狀態(tài),或者二個(gè)寄存器同時(shí)處于受控的鎖存狀態(tài)。單緩沖方式的接口電路見(jiàn)圖8–32。例:產(chǎn)生鋸齒波 由圖8–32可知,輸入寄存器和DAC寄存器同時(shí)受控鎖存。DAC0832的地址為7FFFH(P2.7=0)。
ORG 0000H SJMP MAIN ORG 0030HMAIN:MOVDPTR,#7FFFH ;輸入輸入寄存器和DAC寄存器地址 MOV R0,#0 ;轉(zhuǎn)換初值LP:MOV A,R0 MOVX @DPTR,A;送出模擬量
INCR0SJMPLP 8.5.3.2DAC0832的雙緩沖方式的接口電路和應(yīng)用
見(jiàn)圖8-33。
用P2.5控制第一片DAC0832的輸入鎖存器,地址為DFFFH;用P2.6控制第二片DAC0832的輸入鎖存器,地址為BFFFH;用P2.7同時(shí)控制二片DAC0832的第二級(jí)緩沖,地址為7FFFH。若第一片的數(shù)據(jù)在R0中,第二片的數(shù)據(jù)在R1中,送數(shù)程序?yàn)椋?/p>
MOV DPTR,#0DFFFH;把數(shù)據(jù)送第一片0832的 ;輸入鎖存器
MOV A,R0 MOVX @DPTR,A
MOV DPTR,#0BFFFH;把數(shù)據(jù)送第二片0832 ;的輸入鎖存器
MOV A,R1 MOVX @DPTR,A MOV DPTR,#7FFFH;兩片0832同時(shí)輸出模擬量 MOVX @DPTR,A產(chǎn)生鋸齒波產(chǎn)生三角波產(chǎn)生任意波 8.6A/D轉(zhuǎn)換器接口的擴(kuò)展及應(yīng)用
8.6.1概述
將連續(xù)的模擬信號(hào)轉(zhuǎn)換成二進(jìn)制數(shù)的器件,是一個(gè)將模擬信號(hào)值編制成對(duì)應(yīng)的二進(jìn)制碼的編碼器。數(shù)/模轉(zhuǎn)換器則是一個(gè)解碼器。常用的模/數(shù)轉(zhuǎn)換器有:計(jì)數(shù)式A/D轉(zhuǎn)換器、雙積分式A/D轉(zhuǎn)換器、逐位比較式A/D轉(zhuǎn)換器及并行直接比較式A/D轉(zhuǎn)換器、∑/△A/D轉(zhuǎn)換器等。
完整的模/數(shù)轉(zhuǎn)換器應(yīng)該包含輸入、輸出信號(hào):●模擬輸入信號(hào)Vin和參考電壓Vref
●數(shù)字輸出信號(hào)
●啟動(dòng)轉(zhuǎn)換信號(hào)
●轉(zhuǎn)換完成(結(jié)束)信號(hào)或者“忙”信號(hào)
●數(shù)據(jù)輸出允許信號(hào)對(duì)A/D轉(zhuǎn)換的控制一般分為三個(gè)過(guò)程:①通過(guò)控制口發(fā)出啟動(dòng)轉(zhuǎn)換信號(hào),命令模/數(shù)轉(zhuǎn)換器開(kāi)始轉(zhuǎn)換。②判斷A/D轉(zhuǎn)換是否結(jié)束。③轉(zhuǎn)換結(jié)束,發(fā)出數(shù)據(jù)輸出允許信號(hào),讀入轉(zhuǎn)換完成的數(shù)據(jù)。
目前廠家生產(chǎn)有許多可以通過(guò)串行總線(xiàn)進(jìn)行擴(kuò)展的ADC,如具有SPI總線(xiàn)的MAX187,具有I2C總線(xiàn)的MAX127等。
采用CMOS工藝制成的8位8通道逐次逼近式模數(shù)轉(zhuǎn)換器。轉(zhuǎn)換時(shí)間為100μs左右??捎脝我浑娫垂╇?,此時(shí)模擬電壓輸入范圍為0~5V,無(wú)需調(diào)零和滿(mǎn)刻度調(diào)整。非調(diào)整誤差為±1LSB。三態(tài)鎖存輸出。低功耗為15mW。8.6.28位8通道A/D芯片ADC0809⒈ADC0809的內(nèi)部邏輯結(jié)構(gòu)
示于圖8-34。8路模擬開(kāi)關(guān)、模擬開(kāi)關(guān)的地址鎖存和譯碼電路比較器256R電阻網(wǎng)絡(luò)電子開(kāi)關(guān)逐位比較寄存器SAR三態(tài)輸出鎖存緩沖器以及控制定時(shí)電路
⒉ADC0809的引腳及功能
引腳分配如圖8-35所示?!馎DDA、ADDB、ADDC:模擬通道的地址選擇線(xiàn)。
8路模擬開(kāi)關(guān)的3位地址選通輸入端與對(duì)應(yīng)的輸入通道的關(guān)系見(jiàn)表8–7?!馎LE:地址鎖存允許信號(hào)。由高到低的負(fù)跳變有效,鎖存ADDA、ADDB、ADDC的狀態(tài),選通相應(yīng)的模擬通道?!?–1~2–8:數(shù)字輸出線(xiàn)。
●IN0~I(xiàn)N7:模擬量輸入通道。輸入信號(hào)為單極性,電壓范圍0~VCC。若信號(hào)過(guò)小還需加以放大。在A/D轉(zhuǎn)換過(guò)程中模擬量的值不應(yīng)變化,對(duì)變化速度快的模擬量,在輸入前應(yīng)增加采樣保持電路。
●START:?jiǎn)?dòng)信號(hào)。在此端上加一正脈沖信號(hào),脈沖的上升沿將內(nèi)部寄存器全部清0,在其下降沿A/D開(kāi)始轉(zhuǎn)換?!馝OC:轉(zhuǎn)換結(jié)束信號(hào)。在START信號(hào)的上升沿之后0~8個(gè)時(shí)鐘周期內(nèi),EOC變?yōu)榈碗娖?。?dāng)轉(zhuǎn)換結(jié)束時(shí),EOC變?yōu)楦唠娖剑@時(shí)轉(zhuǎn)換得到的數(shù)據(jù)可供讀出?!馩E:輸出允許信號(hào)。當(dāng)OE有效時(shí),A/D的輸出鎖存緩沖器開(kāi)放,將其中的數(shù)據(jù)放到外面的數(shù)據(jù)線(xiàn)上?!馛LK:時(shí)鐘。時(shí)鐘頻率范圍為10K~1280KHz。
ADC0809的時(shí)序如圖8-36所示。
tWS:最小啟動(dòng)脈寬,典型值為100ns,最大值為200ns。
tWE:最小ALE脈寬,典型值為100ns,最大值為200ns。
tD:模擬開(kāi)關(guān)延時(shí),典型值為1μs,最大值為2.5μs。
tC:轉(zhuǎn)換時(shí)間,當(dāng)fCLK=640KHz時(shí),典型值為100μs,最大值為116μs。
tEOC:轉(zhuǎn)換結(jié)束延時(shí),最大值為8個(gè)時(shí)鐘周期+2μs。
8.6.3.1ADC0809與80C51的接口
如圖8-37所示。
P0口直接與ADC0809的數(shù)據(jù)線(xiàn)相接。
ADDA、ADDB、ADDC分別連到A0、A1、A2。
80C51的ALE信號(hào)經(jīng)分頻連到ADC0809的CLK腳。
P2.7作為讀寫(xiě)口的選通地址線(xiàn)。 片外A/D轉(zhuǎn)換通道的地址為7FF8H~7FFFH。
8.6.3ADC0809的擴(kuò)展及應(yīng)用在軟件編制時(shí),令P2.7(A15)=0,A0、A1、A2給出被選擇的模擬通道的地址,執(zhí)行一條輸出指令,就產(chǎn)生一個(gè)正脈沖,鎖存通道地址和啟動(dòng)A/D轉(zhuǎn)換;執(zhí)行一條輸入指令,讀取A/D轉(zhuǎn)換結(jié)果。例:采用延時(shí)等待A/D轉(zhuǎn)換結(jié)束方式,分別對(duì)8路模擬信號(hào)輪流采樣一次,并依次把結(jié)果存入數(shù)據(jù)存儲(chǔ)器。
ORG 0000H SJMPMAIN ORG 0030HMAIN:MOVR1,#20H MOV DPTR,#7FF8H
;指向通道0地址
MOVR7,#08H ;共需轉(zhuǎn)換8個(gè)通道LOOP:MOVX@DPTR,A;啟動(dòng)A/D轉(zhuǎn)換①
LCALLD128μs;延時(shí)等待A/D轉(zhuǎn)換結(jié)束②
MOVXA,@DPTR;讀入A/D轉(zhuǎn)換值③
MOV @R1,A INC DPTR ;指向下一通道地址
INC R1 DJNZR7,LOOP;8個(gè)通道未轉(zhuǎn)換完,則繼續(xù)。D128μs:
… ;延時(shí)128μs子程序
RET
8.6.3.2ADC0809與80C51中斷方式的接口
如圖8–26所示。將ADC0809作為外擴(kuò)的并行I/O口,由P2.7和WR同時(shí)有效來(lái)啟動(dòng)A/D轉(zhuǎn)換,A、B、C分別與地址線(xiàn)A0、A1、A2相連,其端口地址為7FF8H~7FFFH。EOC經(jīng)反相后接80C51的外部中斷引腳。例:采集8路模擬量,并存入20H地址開(kāi)始的內(nèi)部RAM中。
ORG 0000H SJMP MAIN ORG0003H ;外部中斷0入口地址
LJMP INTDATA
ORG 0100H ;數(shù)據(jù)采集程序MAIN:MOV R0,#20H ;數(shù)據(jù)緩沖區(qū)首址
MOV R2,#8 ;8通道計(jì)數(shù)器
MOV DPTR,#7FF8H
;指向0通道START:CLR F0 ;清中斷發(fā)生標(biāo)志
MOVX @DPTR,A ;啟動(dòng)A/D(P2.7=0,/WR=0)①SETB IT0 ;置外部中斷0為邊沿觸發(fā)
SETB EX0 ;允許外部中斷0SETB EA ;開(kāi)中斷
LOOP:JNB F0,LOOP ;中斷發(fā)生標(biāo)志是否為0②DJNZ R2,START ;8個(gè)通道轉(zhuǎn)換是否結(jié)束
SJMP MAIN
INTDATA:MOVXA,@DPTR ;讀數(shù)據(jù)
(P2.7=0,RD=0), ;硬件撤銷(xiāo)中斷③
MOV @R0,A ;存數(shù)據(jù)
INC R0INC DPTR ;指向下一通道
SETB F0 ;置中斷發(fā)生標(biāo)志
RETI8.7鍵盤(pán)接口
在過(guò)程控制和智能化儀表中,通常是用單片微機(jī)進(jìn)行實(shí)時(shí)控制和數(shù)據(jù)處理的,為實(shí)現(xiàn)人機(jī)對(duì)話(huà),鍵盤(pán)是個(gè)必不可少的功能配置。利用按鍵可以實(shí)現(xiàn)向單片微機(jī)輸入數(shù)據(jù)、傳送命令、功能切換等,是人工干預(yù)單片微機(jī)系統(tǒng)的主要手段。
鍵盤(pán)有兩種類(lèi)型:編碼鍵盤(pán)和非編碼鍵盤(pán)。 編碼鍵盤(pán)必須具有必要的硬件,鍵按下后便產(chǎn)生對(duì)應(yīng)的代碼,在新鍵按下之前,一直保持該碼.鍵的數(shù)目增多時(shí),硬件變得復(fù)雜。 非編碼鍵盤(pán)只有兩個(gè)動(dòng)作狀態(tài):閉合或斷開(kāi),由1或0來(lái)表示。單片微機(jī)常用機(jī)械觸點(diǎn)按鍵組成非編碼矩陣鍵盤(pán)。單片微機(jī)應(yīng)用系統(tǒng)中用得較多的是非編碼鍵盤(pán)。1).鍵盤(pán)輸入的特點(diǎn)鍵盤(pán)實(shí)質(zhì)上是一組按鍵開(kāi)關(guān)的集合。按鍵所用開(kāi)關(guān)為機(jī)械彈性開(kāi)關(guān),利用了機(jī)械觸點(diǎn)的合、斷作用。一個(gè)電壓信號(hào)通過(guò)機(jī)械觸點(diǎn)的斷開(kāi)、閉合過(guò)程,其波形如圖8-l所示,在閉合及斷開(kāi)的瞬間均伴隨有一連串的抖動(dòng),抖動(dòng)時(shí)間的長(zhǎng)短一般為5~10ms。按鍵的穩(wěn)定閉合期長(zhǎng)短則是由操作人員的按鍵動(dòng)作決定的,一般為十分之幾秒到幾秒的時(shí)間。
鍵盤(pán)輸入應(yīng)解決的問(wèn)題
2).按鍵的確認(rèn)鍵的閉合與否,反應(yīng)在電壓上就是呈現(xiàn)出高電平或低電平。為了確保單片微機(jī)對(duì)一次按鍵動(dòng)作只確認(rèn)一次按鍵,必須消除抖動(dòng)的影響。 3).消除按鍵抖動(dòng)的措施通常有硬件、軟件兩種消除方法。(1)雙穩(wěn)態(tài)消抖 用兩個(gè)與非門(mén)構(gòu)成一個(gè)RS觸發(fā)器。(2)軟件消抖在檢測(cè)到鍵按下時(shí),執(zhí)行一段延時(shí)10ms的子程序后,再確認(rèn)該鍵電平是否仍保持閉合狀態(tài)電平,如果閉合狀態(tài)電平,則確認(rèn)為真正有鍵按下。8.7.1鍵盤(pán)接口的工作原理1.鍵盤(pán)的工作原理 鍵盤(pán)可分為兩類(lèi):獨(dú)立式鍵盤(pán)和矩陣式鍵盤(pán)
(1)獨(dú)立式鍵盤(pán) 各個(gè)鍵相互獨(dú)立,每個(gè)按鍵獨(dú)立地與一根數(shù)據(jù)輸入線(xiàn)相連接,如圖8–39所示。
圖8–39中(a)為中斷方式,任何一個(gè)按鍵按下時(shí),通過(guò)門(mén)電路都會(huì)向CPU申請(qǐng)中斷,在中斷服務(wù)程序中,讀入P1口的值,從而判斷是哪一個(gè)按鍵被按下。
圖8–39中(b)為查詢(xún)方式,當(dāng)任何一個(gè)鍵被壓下時(shí),與之連接的數(shù)據(jù)輸入線(xiàn)將被拉成低電平。 對(duì)按鍵是否被按下,需采用軟件消抖的辦法,以消除按鍵在閉合和斷開(kāi)瞬間所伴隨有一連串抖動(dòng)所帶來(lái)的不利影響。
(2)矩陣式鍵盤(pán) 如圖8–4
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024建筑工程地勘合同正規(guī)范本
- 專(zhuān)用藥品配送代理合同2024年范本版B版
- 2025高考生物備考說(shuō)課稿:胚胎工程
- 福建省南平市武夷山第三中學(xué)2022年高三數(shù)學(xué)理上學(xué)期期末試題含解析
- 福建省南平市吳屯中學(xué)2020-2021學(xué)年高三數(shù)學(xué)文期末試題含解析
- 福建省南平市松溪縣職業(yè)中學(xué)高二化學(xué)聯(lián)考試卷含解析
- 2024版飛機(jī)購(gòu)銷(xiāo)合同
- 專(zhuān)利與商標(biāo)權(quán)歸屬合同范本2024一
- 母愛(ài)市場(chǎng)之策略洞察
- 外籍人才中介合同(2篇)
- 大華基線(xiàn)解碼器解碼上墻的操作
- 干部業(yè)績(jī)相關(guān)信息采集表
- 八年級(jí)上綜合性學(xué)習(xí) 我們的互聯(lián)網(wǎng)時(shí)代 練習(xí)卷(含答案)
- 2022-2023學(xué)年四川省成都市高新區(qū)八年級(jí)(下)期末語(yǔ)文試卷(含解析)
- 中西文化概論(第三版)PPT完整全套教學(xué)課件
- 6.3 貴州省基本概況與主要文旅資源《地方導(dǎo)游基礎(chǔ)知識(shí)》(第四版)PPT
- 航空二類(lèi)人員準(zhǔn)入考核試題題庫(kù)及答案
- 2023年版人教版高一必修第一冊(cè)物理測(cè)試題(含答案)
- 新課標(biāo)背景下:英語(yǔ)學(xué)科“教-學(xué)-評(píng)”一體化的設(shè)計(jì)與實(shí)施
- (2022年整理)人民幣含硬幣教具正反面完美打印版
- 保險(xiǎn)公估作業(yè)指導(dǎo)書(shū)x
評(píng)論
0/150
提交評(píng)論