單片機(jī)嵌入式系統(tǒng)原理及應(yīng)用賈好來(lái)單片機(jī)系統(tǒng)擴(kuò)展與接口技術(shù)參考PPT_第1頁(yè)
單片機(jī)嵌入式系統(tǒng)原理及應(yīng)用賈好來(lái)單片機(jī)系統(tǒng)擴(kuò)展與接口技術(shù)參考PPT_第2頁(yè)
單片機(jī)嵌入式系統(tǒng)原理及應(yīng)用賈好來(lái)單片機(jī)系統(tǒng)擴(kuò)展與接口技術(shù)參考PPT_第3頁(yè)
單片機(jī)嵌入式系統(tǒng)原理及應(yīng)用賈好來(lái)單片機(jī)系統(tǒng)擴(kuò)展與接口技術(shù)參考PPT_第4頁(yè)
單片機(jī)嵌入式系統(tǒng)原理及應(yīng)用賈好來(lái)單片機(jī)系統(tǒng)擴(kuò)展與接口技術(shù)參考PPT_第5頁(yè)
已閱讀5頁(yè),還剩218頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1,第9章 8051單片機(jī)系統(tǒng)擴(kuò)展與接口技術(shù),2,單片機(jī)應(yīng)用系統(tǒng)必然包含合適的外圍器件。外圍器件與單片機(jī)的接口是單片機(jī)應(yīng)用系統(tǒng)至關(guān)重要的環(huán)節(jié)。 本章主要講述8051單片機(jī)與常見(jiàn)的程序存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)器、數(shù)字I/O通道的接口技術(shù),模擬輸入輸出通道和單片機(jī)的接口技術(shù),3,本章內(nèi)容,9.1 8051程序存儲(chǔ)器的擴(kuò)展 9.2 8051數(shù)據(jù)存儲(chǔ)器擴(kuò)展 9.3 8051的I/O接口擴(kuò)展 9.4 鍵盤(pán)與顯示器接口 9.5 8051單片機(jī)和A/D及D/A的接口 9.6 單總線1-Wire接口的溫度傳感器DS18B20及其應(yīng)用,4,9.1 8051程序存儲(chǔ)器的擴(kuò)展,存儲(chǔ)器分類: 只讀存儲(chǔ)器(ROM):ROM中的

2、信息一旦寫(xiě)入之后,就不能隨意更改,特別是不能在程序運(yùn)行的過(guò)程中寫(xiě)入新的內(nèi)容,故稱之為只讀存儲(chǔ)器。ROM又分為:掩膜ROM、可編程ROM、EPROM、E2PROM、Flash ROM等。 隨機(jī)存儲(chǔ)器(RAM):RAM在程序運(yùn)行過(guò)程中可根據(jù)需要隨時(shí)更改其中的內(nèi)容,斷電后不能保存數(shù)據(jù)。 E2PROM(EEPROM): 是一種用電信號(hào)編程、電信號(hào)擦除的ROM芯片,寫(xiě)入的速度比較慢,但斷電后能夠保存信息,5,Flash ROM: 又稱閃爍存儲(chǔ)器,是非易失性、電擦除型存儲(chǔ)器。其特點(diǎn)是可快速在線修改其存儲(chǔ)單元中的數(shù)據(jù),標(biāo)準(zhǔn)改寫(xiě)次數(shù)可達(dá)1萬(wàn)次。與E2PROM相比,F(xiàn)lash ROM的讀寫(xiě)速度都很快。由于其性能

3、比E2PROM要好,所以目前大有取代E2PROM的趨勢(shì)。 MCS-51系列單片機(jī)具有64KB的程序存儲(chǔ)器空間, 其中8051、 8751型單片機(jī)含有4 KB 的片內(nèi)程序存儲(chǔ)器, 而8031型單片機(jī)則無(wú)片內(nèi)程序存儲(chǔ)器。 當(dāng)采用8051、 8751型單片機(jī)而程序超過(guò)4KB, 或采用8031型單片機(jī)時(shí), 就需要進(jìn)行程序存儲(chǔ)器的擴(kuò)展,6,9.1.1 8051外部程序存儲(chǔ)器的操作時(shí)序,圖9-1是與訪問(wèn)外部程序存儲(chǔ)器有關(guān)的時(shí)序圖。其中a)是沒(méi)有訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器,即沒(méi)有執(zhí)行MOVX類指令情況下的時(shí)序;b)是訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器操作時(shí)的時(shí)序。CPU由外部程序存儲(chǔ)器取指時(shí),16位地址的低8位PCL由P0輸出,高

4、8位PCH由P2輸出,而指令由P0輸入,7,8,9,在不執(zhí)行MOVX指令時(shí),P2口專用于輸出PCH,P2有輸出鎖存功能,可直接接至外部存儲(chǔ)器的地址端,無(wú)需再加鎖存。P0口則作分時(shí)復(fù)用的雙向總線,輸出PCL,輸入指令。在這種情況下,每一個(gè)機(jī)器周期中,允許地址鎖存信號(hào)ALE兩次有效,在ALE由高變低時(shí),有效地址PCL出現(xiàn)在P0總線上,低8位地址鎖存器應(yīng)在此時(shí)把地址鎖存起來(lái)。同時(shí)也是每個(gè)機(jī)器周期兩次有效,用于選通外部程序存儲(chǔ)器,使指令送到P0總線上,由CPU取入,10,當(dāng)系統(tǒng)中接有外部數(shù)據(jù)存儲(chǔ)器,執(zhí)行MOVX指令時(shí),時(shí)序有些變化,見(jiàn)圖b) 若執(zhí)行的是MOVX DPTR指令,則此地址就是DPL值(數(shù)據(jù)

5、指針的低8位),同時(shí),在P2口出現(xiàn)有效的DPH值(數(shù)據(jù)指針的高8位); 若執(zhí)行的是MOVX Ri指令,則此地址就是Ri的內(nèi)容,同時(shí)在P2口線上出現(xiàn)的將是專用寄存器P2(即口內(nèi)鎖存器)的內(nèi)容,11,9.1.2 并行EEPROM及其擴(kuò)展,AT28C64B是ATMEL公司生產(chǎn)的高速并行EEPROM,存儲(chǔ)容量8k8bit;讀取時(shí)間70ns,最大頁(yè)寫(xiě)入時(shí)間10ms;工作電流為40mA,待機(jī)電流100A;硬件和軟件數(shù)據(jù)保護(hù);數(shù)據(jù)輪詢和觸發(fā)位用于寫(xiě)結(jié)束檢測(cè);可靠性高:100000次擦寫(xiě),數(shù)據(jù)可保存10年;單電源供電,其引腳和內(nèi)部框圖如圖9-2,12,a) 引腳圖,b) 內(nèi)部結(jié)構(gòu)框圖,圖9-2 AT28C64

6、的引腳和內(nèi)部結(jié)構(gòu)框圖,A0A12:地址線; I/O0-I/O7:數(shù)據(jù)的輸入輸出; :芯片使能,低電平有效; :輸出使能,低電平有效; :寫(xiě)使能,低電平有效,13,對(duì)AT28C64的讀寫(xiě) 對(duì)AT28C64的讀寫(xiě)和SRAM相同,無(wú)非是寫(xiě)入時(shí)間略長(zhǎng)。在寫(xiě)入命令發(fā)出后,需要判斷寫(xiě)入過(guò)程是否結(jié)束。工程上常采取延時(shí)的方法或查詢I/O7,也就是所謂的輪詢功能。輪詢功能是指在28C64寫(xiě)入期間,如果讀取I/O7上的數(shù)據(jù),則得到最后一次寫(xiě)入數(shù)據(jù)的補(bǔ)碼,即如果在I/O7寫(xiě)入的數(shù)據(jù)為邏輯“1”,則讀出的數(shù)據(jù)為“0”;反之,如果在I/O7寫(xiě)入的數(shù)據(jù)為邏輯“0”,則讀出的數(shù)據(jù)為“1”。當(dāng)寫(xiě)入過(guò)程結(jié)束,則從I/O7引腳讀

7、出的數(shù)據(jù)是真實(shí)的寫(xiě)入數(shù)據(jù),14,28C64和89S52的連接 28C64既可作為外部程序存儲(chǔ)器,又可作為數(shù)據(jù)存儲(chǔ)器。在寫(xiě)入期間,單片機(jī)通過(guò)查詢I/O7引腳狀態(tài),來(lái)判斷寫(xiě)入過(guò)程是否結(jié)束。28C64的片選信號(hào)由P2.7提供。 因28C64可作為外部程序存儲(chǔ)器和外部數(shù)據(jù)存儲(chǔ)器合并使用,故將 信號(hào)和 加到與門(mén)74HC08上,并將其輸出與28C64的數(shù)據(jù)輸出允許 信號(hào)相連,15,圖9-3 AT89S52單片機(jī)和AT28C64的接口,16,例9-1 根據(jù)AT89S52單片機(jī)和 AT28C64的接口電路,編寫(xiě)對(duì)AT28C64進(jìn)行寫(xiě)操作的字程序。要寫(xiě)入的數(shù)據(jù)區(qū)取自源數(shù)據(jù)區(qū)。 子程序的入口參數(shù)如下: R0:寫(xiě)入

8、的字節(jié)計(jì)數(shù)器 R1:28C64的低8位地址寄存器 R2:AT28C64的高8位地址寄存器 R3:源數(shù)據(jù)區(qū)首地址的低8位寄存器 R4:源數(shù)據(jù)區(qū)首地址的高8位寄存器 R5: 寫(xiě)入的數(shù)據(jù),17,解:程序清單如下: WR1: MOV DP0L, R3 MOV DP0H,R4 ;源數(shù)據(jù)區(qū)16位地址傳輸?shù)?;DPTR0中 MOVX A, DPTR ;取數(shù)據(jù) MOV R5,A INCDPTR MOV R3, DP0L MOV R4, DP0H MOV DP0L, R1 MOV DP0H,R2 ;28C64地址傳輸?shù)紻PTR0中 MOVXDPTR,A ;將A的內(nèi)容寫(xiě)入28C64H,18,NOP NOP NOP

9、 WAIT: MOVX A, DPTR ;讀取最后一次寫(xiě)入的數(shù)據(jù) XRL A, R5 JNZ WAIT ;寫(xiě)入的I/O7和讀出的I/O7不相等 ;寫(xiě)入沒(méi)有結(jié)束,等待 INC DPTR MOV R1, DP0L MOV R2, DP0H DJNZ R0, WR1;未完成,循環(huán) RET,19,9.1.3并行Flash 存儲(chǔ)器FM16W08及其擴(kuò)展,性能特點(diǎn) 存儲(chǔ)容量為64Kbit(即8k8byte); 讀寫(xiě)壽命為100億次; 掉電數(shù)據(jù)可保存38年; 寫(xiě)數(shù)據(jù)無(wú)延時(shí); 讀取時(shí)間為70ns;讀周期約為130ns; 低功耗,工作電流為12mA,待機(jī)電流僅為20; 寬電壓范圍供電,2.7V5.5V; 工作溫

10、度范圍為-40+85; 具有特別優(yōu)良的防潮濕、防電擊及抗震性能; 與并行SRAM或E2PROM管腳兼容,20,引腳定義 A0A12:地址線,在 的下降沿被鎖定; DQ0DQ7:數(shù)據(jù)輸入輸出線; :片選信號(hào)線,為低電平時(shí),芯片被選中; :輸出使能,低電平時(shí),F(xiàn)M16W08把數(shù)據(jù)送到總線;為高電平時(shí),數(shù)據(jù)線為高阻態(tài); :寫(xiě)使能,低電平時(shí),總線的數(shù)據(jù)寫(xiě)入由A0A12確定的地址中,21,圖9-4 FM16W08的引腳和內(nèi)部結(jié)構(gòu)框圖,22,1)讀操作 FW16W08的讀操作一般在 下降沿開(kāi)始,這時(shí)地址位被鎖存,存儲(chǔ)器讀周期開(kāi)始,一旦開(kāi)始,應(yīng)使 保持不變,一個(gè)完整的存儲(chǔ)器周期可在內(nèi)部完成,在訪問(wèn)時(shí)間結(jié)束后

11、,總線上的數(shù)據(jù)變?yōu)橛行А.?dāng)?shù)刂繁绘i存后,地址值可在滿足保持時(shí)間參數(shù)的基礎(chǔ)上發(fā)生改變,這一點(diǎn)不象SRAM,地址被鎖存后改變地址值不會(huì)影響存儲(chǔ)器的操作,23,圖9-5 FM16W08的讀時(shí)序和參數(shù),24,2)寫(xiě)操作 FW16W08的寫(xiě)操作由 和 控制,地址在 的下降沿鎖存。 控制寫(xiě)操作時(shí), 在開(kāi)始寫(xiě)周期之前置0,即當(dāng) 有效時(shí), 應(yīng)先為低電平。FRAM沒(méi)有寫(xiě)延時(shí),讀與寫(xiě)訪問(wèn)時(shí)間是一致的,整個(gè)存儲(chǔ)器操作一般在一個(gè)總線周期出現(xiàn)。因此,任何操作都能在一個(gè)寫(xiě)操作后立即進(jìn)行,而不象E2PROM需要通過(guò)判斷來(lái)確定寫(xiě)操作是否完成,25,圖9-6 FM16W08的寫(xiě)時(shí)序和參數(shù),26,3)充電操作 預(yù)充電操作是準(zhǔn)備一

12、次新訪問(wèn)存儲(chǔ)器的一個(gè)內(nèi)部條件,所有存儲(chǔ)器周期包括一個(gè)存儲(chǔ)器訪問(wèn)和一個(gè)預(yù)充電,預(yù)充電在 腳為高電平或無(wú)效時(shí)開(kāi)始,它必須保持高電平至少為最小的預(yù)充電時(shí)間,由于預(yù)充電在 上升沿開(kāi)始,這使得用戶可決定操作的開(kāi)始,同時(shí)該器件有一個(gè) 為低電平必須滿足的最大時(shí)間規(guī)范,27,Flash存儲(chǔ)器FM16W08和SRAM時(shí)序的區(qū)別: FRAM、SRAM外部引腳雖然相同,但讀寫(xiě)時(shí)序有所不同,編寫(xiě)對(duì)應(yīng)的讀寫(xiě)程序時(shí),需要考慮其不同之處,圖9-7 FRAM和SRAM的選通信號(hào),28,4. FRAM和8051單片機(jī)的接口 8051單片機(jī)的ALE引腳為地址鎖存允許信號(hào),訪問(wèn)單片機(jī)外部存儲(chǔ)器時(shí),該腳將輸出一個(gè)負(fù)跳沿的脈沖以用于鎖

13、存16位地址的低8位。要保證對(duì)FM16W08的正確訪問(wèn),必須注意兩點(diǎn):第一,F(xiàn)RAM的訪問(wèn)時(shí)間必須大于70ns;第二,ALE的高電平寬度必須大于60ns,29,圖9-8 AT89S52單片機(jī)和FM16W08的接口,30,9.2 8051數(shù)據(jù)存儲(chǔ)器擴(kuò)展,數(shù)據(jù)存貯器的擴(kuò)展方法可分為: 并行擴(kuò)展:數(shù)據(jù)存儲(chǔ)器的數(shù)據(jù)口和單片機(jī)的數(shù)據(jù)口P0相連,8051單片機(jī)每次可讀入或輸出8位數(shù)據(jù)。常見(jiàn)的數(shù)據(jù)存儲(chǔ)器芯片有6116、6264、62128等SRAM。 串行擴(kuò)展:串口數(shù)據(jù)存儲(chǔ)器和單片機(jī)的接口方式為SPI總線或I2C總線,存儲(chǔ)器的類型主要是EEPROM和Flash,主要用于保存一些數(shù)據(jù)或常數(shù),31,9.2.1

14、并行接口外部數(shù)據(jù)存貯器的操作時(shí)序,32,讀并行接口外部數(shù)據(jù)存貯器的時(shí)序 在第一個(gè)機(jī)器周期的S1,允許地址鎖存信號(hào)ALE由低變高,開(kāi)始了讀周期。在S2狀態(tài),CPU把低8位地址送上P0總線,把高8位地址送上P2口(采用MOVX DPTR指令)。ALE的下降沿用來(lái)把低8位地址信息鎖存到外部鎖存器內(nèi)。而高8位地址信息此后一直鎖存在P2口上,無(wú)需再加外部鎖存。在S3狀態(tài),P0總線驅(qū)動(dòng)器進(jìn)入高阻狀態(tài)。在S4狀態(tài),讀控制信號(hào) 變?yōu)橛行В沟帽粚ぶ返牟⑿薪涌跀?shù)據(jù)存貯器略過(guò)片刻后把有效的數(shù)據(jù)送上總線,當(dāng) 回到高電平后,被尋址的并行接口存貯器把其本身的總線驅(qū)動(dòng)器懸浮起來(lái),使P0總線又進(jìn)入高阻狀態(tài),33,34,寫(xiě)

15、并行接口外部數(shù)據(jù)存貯器的時(shí)序 與上述類同。但寫(xiě)的過(guò)程是CPU主動(dòng)把數(shù)據(jù)送上總線,故在時(shí)序上,CPU向P0總線送完被尋址存貯器的低8位地址后,在S3狀態(tài),就由送地址直接改為送數(shù)據(jù)上總線,其間總線上不出現(xiàn)高阻懸浮狀態(tài)。在S4狀態(tài),寫(xiě)控制信號(hào) 有效,選通被尋址的存貯器,稍過(guò)片刻,P0上的數(shù)據(jù)就寫(xiě)到被尋址的存貯器內(nèi)了,35,9.2.2 8051單片機(jī)擴(kuò)展并行接口外部數(shù)據(jù)存貯器SRAM,擴(kuò)展容量小于256B,用MOVX Ri指令訪問(wèn)外部SRAM,只用P0口傳送8位地址; 擴(kuò)展容量大于256B,用MOVX DTPR指令訪問(wèn)外部SRAM,同時(shí)用P0和P2口傳送16位地址,P0口傳送低8位,P2口傳送高8位。

16、 1.6264的引腳和操作方式 6264是8k8位的靜態(tài)隨機(jī)存儲(chǔ)器芯片,采用CMOS工藝制作,由單一+5V供電,額定功耗200mW,典型存取時(shí)間為200ns。為28腳雙列直插式封裝,其管腳如圖9-10所示,36,圖9-10 6264引腳排列和操作方式,37,圖9-11 擴(kuò)展單片6264靜態(tài)數(shù)據(jù)存儲(chǔ)器電路,38,注意: 擴(kuò)展單片程序存儲(chǔ)器時(shí),片選端直接接地即可,因?yàn)橄到y(tǒng)中不會(huì)再有其它程序存儲(chǔ)器芯片。但是擴(kuò)展單片數(shù)據(jù)存儲(chǔ)器時(shí),其片選端能否直接接地則還須考慮應(yīng)用系統(tǒng)中有無(wú)I/O口及外圍設(shè)備擴(kuò)展,如果有,則要統(tǒng)一進(jìn)行片選選擇,39,9.2.3 8051擴(kuò)展SPI接口外部Flash數(shù)據(jù)存貯器FM2504

17、0B,1.FM25040B的特點(diǎn) 存儲(chǔ)容量 5128bits 讀寫(xiě)次數(shù)1012 數(shù)據(jù)可保存38年 寫(xiě)入無(wú)延遲 總線頻率最高可達(dá)20Mhz 硬件可直接替代EEPROM 可運(yùn)行在SPI的模式0和模式3 硬件寫(xiě)保護(hù)和軟件寫(xiě)保護(hù) 待機(jī)電流4A,工作電流250A 8引腳SOIC封裝,40,2.FM25040B的結(jié)構(gòu)和引腳,圖9-12 FM25040B的內(nèi)部結(jié)構(gòu)和引腳排列,41,圖9-12 FM25040B的內(nèi)部結(jié)構(gòu)和引腳排列,42,3.FM25040B的操作命令和操作時(shí)序,43,1)置位寫(xiě)使能鎖存器命令WREN,FM25040B上電時(shí)禁止寫(xiě)操作。在任何寫(xiě)操作之前,必須發(fā)出WREN命令。在WREN命令發(fā)出

18、之后允許發(fā)出寫(xiě)操作代碼,包括寫(xiě)狀態(tài)寄存器和寫(xiě)存儲(chǔ)器命令。WREN操作使內(nèi)部寫(xiě)使能鎖存器被置位。狀態(tài)寄存器的WEL表示鎖存器的狀態(tài)。WEL=1表示寫(xiě)允許。任何寫(xiě)操作的完成將自動(dòng)清除寫(xiě)使能鎖存器,如果沒(méi)有新的WREN命令,則寫(xiě)操作無(wú)法進(jìn)行。圖9-13是WREN命令的時(shí)序圖,44,圖9-13 WREN命令的時(shí)序圖,45,2)寫(xiě)禁止命令WRDI WRDI命令禁止所有的寫(xiě)操作。在寫(xiě)操作被禁止的情況下,狀態(tài)寄存器的WEL=0。圖9-14 是WRDI命令時(shí)序圖,圖9-14 WRDI命令的時(shí)序圖,46,3)讀狀態(tài)寄存器命令RDSR 讀狀態(tài)寄存器命令RDSR允許主器件校驗(yàn)狀態(tài)寄存器的內(nèi)容。狀態(tài)寄存器提供了寫(xiě)保護(hù)

19、當(dāng)前狀態(tài)。在RDSR命令之后,F(xiàn)M25040B返回單字節(jié)的狀態(tài)寄存器內(nèi)容。狀態(tài)寄存器詳細(xì)描述見(jiàn)“狀態(tài)寄存器和寫(xiě)保護(hù)”。圖9-15 是RDSR命令時(shí)序圖,圖9-15 RDSR命令時(shí)序圖,47,4)寫(xiě)狀態(tài)寄存器命令WRSR WRSR命令允許用戶向單字節(jié)的狀態(tài)寄存器做寫(xiě)操作而確定寫(xiě)保護(hù)作用的范圍或者不起保護(hù)作用。在發(fā)出WRSR命令之前, 必須為高或者無(wú)效。在發(fā)出WRSR命令之前,WREN命令必須先發(fā)出。注意,WRSR命令是寫(xiě)操作,且執(zhí)行完畢后將清除寫(xiě)使能鎖存器,WRSR對(duì)應(yīng)的總線時(shí)序圖如圖9-16所示,48,圖9-16 WRSR命令的時(shí)序圖,49,5)狀態(tài)寄存器和寫(xiě)保護(hù) FM25040B的寫(xiě)保護(hù)特點(diǎn)

20、是多層次的。首先,在任何寫(xiě)操作之前,WREN命令必須發(fā)出。如果寫(xiě)命令已經(jīng)發(fā)出, 引腳和狀態(tài)寄存器控制存儲(chǔ)器的操作。如果 為低,全部存儲(chǔ)器被寫(xiě)保護(hù);如果 為高,存儲(chǔ)器的寫(xiě)保護(hù)由狀態(tài)寄存器決定。狀態(tài)寄存器結(jié)構(gòu)如表9-3所示,50,其中,位4-7和位0為“0”,且不能被修改。注意,因?yàn)镕RAM存儲(chǔ)器沒(méi)有寫(xiě)延遲,存儲(chǔ)器不會(huì)出向“忙”現(xiàn)象,因此將位0設(shè)為邏輯“0”,而在EEPROM中,位0的意義為 。非易失的BP1和BP0表示寫(xiě)保護(hù)的區(qū)域。WEL表示寫(xiě)使能鎖存器的狀態(tài),由WREN命令置位,由WRDI命令或?qū)懼芷诮Y(jié)束時(shí)( 變高)清除。BP1和BP0是存儲(chǔ)器模塊寫(xiě)保護(hù)位,不同的BP1、BP0保護(hù)不同的存儲(chǔ)器

21、模塊,表9-4為對(duì)應(yīng)的保護(hù)范圍,表9-3 FM25040B的狀態(tài)寄存器,51,表9-4 FM25040B的存儲(chǔ)器寫(xiě)保護(hù)范圍,表9-5 FM25040B的寫(xiě)保護(hù),52,6)存儲(chǔ)器的寫(xiě)操作 和SPI總線的EEPROM不同,F(xiàn)M25040B能夠以總線速度執(zhí)行一系列的寫(xiě)操作,且不需要頁(yè)寄存器,可執(zhí)行任意數(shù)量的寫(xiě)操作。 所有的存儲(chǔ)器寫(xiě)操作均以操作命令WREN開(kāi)始。然后,主器件發(fā)出寫(xiě)命令操作碼。寫(xiě)命令操作碼包括存儲(chǔ)器地址的高位,操作碼的位3對(duì)應(yīng)于字節(jié)地址的A8;下一字節(jié)是存儲(chǔ)器地址的低8位A7-A0。這樣,9位地址確定了要寫(xiě)入數(shù)據(jù)的第一字節(jié)的地址。緊接著的字節(jié)是要寫(xiě)入的數(shù)據(jù)。數(shù)據(jù)的內(nèi)部地址隨主器件不斷發(fā)出

22、的時(shí)鐘增加而增加。如果最后一個(gè)地址達(dá)到1FFH,計(jì)數(shù)器將回歸到0。寫(xiě)操作時(shí)首先發(fā)送數(shù)據(jù)的MSB。和EEPROM不同,F(xiàn)M25040B可以連續(xù)寫(xiě)入多個(gè)字節(jié)的數(shù)據(jù),且每個(gè)字節(jié)在輸入8個(gè)時(shí)鐘后立即寫(xiě)入。在片選信號(hào) 的上升沿結(jié)束一次寫(xiě)操作。圖9-17是存儲(chǔ)器寫(xiě)的時(shí)序圖,53,圖9-17 FM25040B的存儲(chǔ)器寫(xiě)時(shí)序圖,54,7)存儲(chǔ)器的讀操作 在片選信號(hào) 的下降沿,主器件可以發(fā)出讀操作指令碼。操作碼包括存儲(chǔ)器地址的高位,緊接著的是存儲(chǔ)器地址的低8位。這樣,9位地址確定了要讀出數(shù)據(jù)的第一字節(jié)的地址。在主器件輸出完整地讀操作碼之后,SI被忽略。然后,主器件發(fā)出8個(gè)時(shí)鐘脈沖,每個(gè)時(shí)鐘脈沖對(duì)應(yīng)于一位數(shù)據(jù)輸出

23、,數(shù)據(jù)的內(nèi)部地址隨主器件不斷發(fā)出的時(shí)鐘增加而增加。如果地址到達(dá)1FFH,計(jì)數(shù)器回歸000H。讀首先讀MSB。在片選信號(hào) 的上升沿結(jié)束一次讀操作。圖9-18是存儲(chǔ)器讀的時(shí)序圖,55,圖9-18FM25040B的存儲(chǔ)器讀時(shí)序圖,56,8)總線掛起命令HOLD 引腳 用于中斷串行操作而不終止。若SCK=0,主器件將 拉低,則當(dāng)前操作暫停;若SCK=0,主器件將 拉高,則恢復(fù)操作。 必須在SCK = 0時(shí)變化,而SCK則可在掛起狀態(tài)器件變化。 FM25040B和AT89S52的接口 AT89S52沒(méi)有SPI接口,可以用普通I/O口模擬SPI口,如圖9-19所示,57,圖9-19AT89S52和FM25

24、040B的接口,58,9.3 8051的I/O接口擴(kuò)展9.3.1 I/O接口的功能,8051擴(kuò)展的I/O接口電路主要應(yīng)滿足以下幾項(xiàng)功能要求: 1.實(shí)現(xiàn)和不同外設(shè)的速度匹配 2.輸出數(shù)據(jù)鎖存和輸入數(shù)據(jù)三態(tài)緩沖 3.CPU的負(fù)載能力和外圍設(shè)備端口選擇問(wèn)題,59,9.3.2 端口的編址,1.獨(dú)立編址方式 獨(dú)立編址就是把I/O地址空間和數(shù)據(jù)存儲(chǔ)器地址空間分開(kāi)進(jìn)行編址。 2.統(tǒng)一編址方式 這種編址方式是把I/O端口的寄存器與數(shù)據(jù)存儲(chǔ)器單元同等對(duì)待,統(tǒng)一進(jìn)行編址。統(tǒng)一編址方式的優(yōu)點(diǎn)是不需要專門(mén)的I/O指令,直接使用訪問(wèn)數(shù)據(jù)存儲(chǔ)器的指令進(jìn)行I/O操作,簡(jiǎn)單、方便且功能強(qiáng),60,8051單片機(jī)使用的是統(tǒng)一編址

25、方式,即I/O和外部數(shù)據(jù)存儲(chǔ)器RAM是統(tǒng)一編址的,用戶可以把外部64K字節(jié)的數(shù)據(jù)存儲(chǔ)器RAM空間的一部分作為擴(kuò)展的I/O接口的地址空間,每一個(gè)接口芯片中的一個(gè)功能寄存器(端口)的地址就相當(dāng)于一個(gè)RAM存儲(chǔ)單元,CPU可以象訪問(wèn)外部存儲(chǔ)器RAM那樣訪問(wèn)I/O接口芯片,對(duì)其功能寄存器進(jìn)行讀、寫(xiě)操作,61,9.3.3 I/O數(shù)據(jù)的幾種傳送方式,1.無(wú)條件傳送 無(wú)條件傳送類似于單片機(jī)和外部數(shù)據(jù)存儲(chǔ)器之間的數(shù)據(jù)傳送,比較簡(jiǎn)單。當(dāng)外設(shè)速度能和單片機(jī)的速度相比擬時(shí),常常采用無(wú)條件傳送方式。另外,當(dāng)外設(shè)的工作速度非常慢,以致人們?nèi)魏螘r(shí)候都認(rèn)為它已處于“準(zhǔn)備好”的狀態(tài)時(shí),也可以采用無(wú)條件傳送方式,62,2.查詢

26、狀態(tài)傳送,查詢傳送方式下,單片機(jī)需要I/O接口為外設(shè)提供狀態(tài)和數(shù)據(jù)兩個(gè)端口,單片機(jī)通過(guò)狀態(tài)口查詢外設(shè)“準(zhǔn)備好”后就進(jìn)行數(shù)據(jù)傳送。查詢式傳送的優(yōu)點(diǎn)是通用性好,硬件連線和查詢程序十分簡(jiǎn)單,但是效率不是很高。為了提高單片機(jī)對(duì)外設(shè)的工作效率,通常采用中斷傳送I/O數(shù)據(jù)的方式,63,3.中斷傳送方式,中斷傳送方式是利用單片機(jī)本身的中斷功能和I/O接口的中斷功能來(lái)實(shí)現(xiàn)I/O數(shù)據(jù)的傳送。采用中斷方式可使單片機(jī)和外設(shè)并行工作。單片機(jī)只有在外設(shè)準(zhǔn)備好后才中斷主程序,而進(jìn)入外設(shè)的中斷服務(wù)程序,中斷服務(wù)完成后又返回主程序繼續(xù)執(zhí)行。因此,采用中斷方式可以大大提高單片機(jī)的工作效率,64,9.3.4可編程并行I/O芯片8

27、255A,8255A具有3個(gè)8位并行I/O口, 稱為PA口、PB口和PC口。 其中PC口又分為高4位和低4位, 通過(guò)控制字設(shè)定可以選擇三種工作方式: 基本輸入/輸出; 選通輸入/輸出; PA口為雙向總線,65,D7D0:三態(tài)雙向數(shù)據(jù)線,與單片機(jī)數(shù)據(jù)總線連接,用來(lái)傳送數(shù)據(jù)信息; :片選信號(hào)線,低電平有效,表示芯片被選中; :讀出信號(hào)線,低電平有效,控制數(shù)據(jù)的讀出; :寫(xiě)入信號(hào)線,低電平有效,控制數(shù)據(jù)的寫(xiě)入; VCC:+5V電源; PA7PA0:A口輸入/輸出線; PB7PB0:B口輸入/輸出線; PC7PC0:C口輸入/輸出線; RESET:復(fù)位信號(hào)線。 A1A0:地址線,用來(lái)選擇8255A內(nèi)部

28、端口,1. 8255A的引腳,66,2.內(nèi)部結(jié)構(gòu) 包括三個(gè)并行數(shù)據(jù)輸入/輸出端口,兩個(gè)工作方式控制電路,一個(gè)讀/寫(xiě)控制邏輯電路和8位數(shù)據(jù)總線緩沖器。 (1)8255A的三個(gè)8位并行口 PA口:8位數(shù)據(jù)輸出鎖存器和緩沖器;一個(gè)8位數(shù)據(jù)輸入鎖存器。 PB口:8位數(shù)據(jù)輸出鎖存器和緩沖器;一個(gè)8位數(shù)據(jù)輸入緩沖器(輸入不鎖存)。 PC口:8位數(shù)據(jù)輸出鎖存器;一個(gè)8位數(shù)據(jù)輸入緩沖器(輸入不鎖存)。 通常PA口、PB口作為輸入輸出口,PC口既可作為輸入輸出口,也可在軟件的控制下,分為兩個(gè)4位的端口,作為端口A、B選通方式操作時(shí)的狀態(tài)控制信號(hào),67,圖9-21 8255A的內(nèi)部結(jié)構(gòu),圖9-20 8255A的引

29、腳,68,2)工作方式控制 工作方式控制電路有兩個(gè), 一個(gè)是A組控制電路, 另一個(gè)是B組控制電路。 這兩組控制電路共有一個(gè)控制命令寄存器, 用來(lái)接收中央處理器發(fā)來(lái)的控制字。 A組控制電路用來(lái)控制A口和C口的上半部分(PC7PC4)。 B組控制電路用來(lái)控制B口和C口的下半部分(PC3 PC0,69,3)總線數(shù)據(jù)緩沖器 總線數(shù)據(jù)緩沖器是一個(gè)三態(tài)雙向8位緩沖器, 作為 8255A 與系統(tǒng)總線之間的接口, 用來(lái)傳送數(shù)據(jù)、指令、控制命令以及外部狀態(tài)信息,4)讀/寫(xiě)控制邏輯電路 讀/寫(xiě)控制邏輯電路接收CPU發(fā)來(lái)的控制信號(hào) 、 、 、RESET、地址信號(hào)A1A0等, 然后根據(jù)控制信號(hào)的要求, 將端口數(shù)據(jù)讀出

30、, 送往CPU或?qū)PU送來(lái)的數(shù)據(jù)寫(xiě)入端口。各端口的工作狀態(tài)與控制信號(hào)的關(guān)系如表9-6所示,70,表9-6 8255A端口工作狀態(tài)選擇表,71,8255A的工作方式(方式 0,方式 1,方式 2) 方式 0: 基本輸入/輸出方式 這種方式不需選通信號(hào)。PA,PB和PC中任一端口都可以通過(guò)方式控制字設(shè)定為輸入或輸出,72,方式 1: 選通輸入/輸出方式 共有3個(gè)口, 被分為兩組。A組包括A口和PC7PC4, A口可由編程設(shè)定為輸入或輸出, PC7PC4 作為輸入/輸出操作的選通信號(hào)和應(yīng)答信號(hào)。 B組包括B口和PC3PC0, 這時(shí)C口作為 8255A和外設(shè)或CPU之間傳送某些狀態(tài)信息及中斷請(qǐng)求信號(hào)

31、,73,方式 2: 雙向傳送方式。 只有A口有方式 2, 此時(shí), A口為8位雙向傳送數(shù)據(jù)口, C口的高5位PC7PC3用來(lái)作為指定A口輸入/輸出的控制聯(lián)絡(luò)線,74,3.工作方式選擇控制字及C口置位/復(fù)位控制字 (1)三種工作方式由寫(xiě)入控制字寄存器的方式控制字來(lái)決定。方式控制字的格式如圖9-22所示。三個(gè)端口中C口被分為兩個(gè)部分,上半部分隨A口稱為A組,下半部分隨B口稱為B組。其中A口可工作于方式0,1和2,而B(niǎo)口只能工作在方式0和1。 例如,寫(xiě)入工作方式控制字95H,可將8255A編程為:A口方式0輸入,B口方式1輸出,C口的上半部分(PC7PC4)輸出,C口的下半部分(PC3PC0)輸入,7

32、5,圖9-22 8255A的方式控制字,76,2)C口8位中的任一位,可用一個(gè)寫(xiě)入控制口的置位/復(fù)位控制字來(lái)對(duì)C口按位置“1”或清“0”。這個(gè)功能主要用于位控。C口按位置位/復(fù)位控制字的格式如圖9-23所示。 例如,07H寫(xiě)入控制口,是PC3置1,08H寫(xiě)入控制口,PC4清0,77,圖9-23 C口按位置位/復(fù)位控制字格式,78,4. 8255A的三種工作方式:方式0、方式1、方式2,1)8255A方式0,是基本的輸入/輸出工作方式。在這種方式下,三個(gè)端口都可以由程序設(shè)置為輸入或者輸出,沒(méi)有固定的用于應(yīng)答的聯(lián)絡(luò)信號(hào)。方式0基本功能如下: 具有兩個(gè)8位端口(A,B)和兩個(gè)4位端口(C口的上半部分

33、和下半部分); 任何一個(gè)端口都可以設(shè)定為輸入或者輸出。各端口的輸入、輸出可構(gòu)成16種組合; 數(shù)據(jù)輸出時(shí)鎖存,輸入時(shí)不鎖存,79,8255A的A口、B口和C口均可設(shè)定為方式0,并可根據(jù)需要規(guī)定各端口為輸入方式或輸出方式。例如,設(shè)8255A的控制字寄存器地址為0FF7FH(見(jiàn)圖9-29),則令A(yù)口和C口高4位工作在方式0輸出以及B口和C口低4位工作于方式0輸入,初始化的程序?yàn)椋?MOV DPTR, #0FF7FH;控制字寄存器地址送DPTR MOV A, #83H ;方式控制字83H送(A) MOVX DPTR, A;83H送控制字寄存器,80,在方式0下,8051可對(duì)8255A進(jìn)行I/O數(shù)據(jù)的無(wú)

34、條件傳送,例如,讀一組開(kāi)關(guān)的狀態(tài),控制一組指示燈的亮、滅。實(shí)現(xiàn)這些操作,并不需要應(yīng)答聯(lián)絡(luò)信號(hào)。外設(shè)的I/O數(shù)據(jù)可在8255A的各端口得到鎖存和緩沖,也可以把其中的某幾位指定為外設(shè)的狀態(tài)輸入位,CPU對(duì)狀態(tài)位查詢便可實(shí)現(xiàn)I/O數(shù)據(jù)的查詢方式傳送。因此,8255A的方式0屬于基本輸入/輸出方式,81,2) 8255A方式1,選通式輸入/輸出工作方式,A口和B口皆可獨(dú)立地設(shè)置成這種工作方式。 在方式1下,8255A的A口和B口通常用于傳送和它們相連外設(shè)的I/O數(shù)據(jù),C口用作A口和B口的應(yīng)答聯(lián)絡(luò)線,以實(shí)現(xiàn)中斷方式傳送I/O數(shù)據(jù)。C口的PC7PC0應(yīng)答聯(lián)絡(luò)線是在設(shè)計(jì)8255A時(shí)規(guī)定的,其各位分配見(jiàn)圖9-

35、24和圖9-26,圖中,標(biāo)有I/O各位仍可用作基本輸入/輸出,不作應(yīng)答聯(lián)絡(luò)線用,82,1)方式1輸入,當(dāng)任何一個(gè)端口按照工作方式1輸入時(shí),應(yīng)答聯(lián)絡(luò)信號(hào)如圖9-24所示,各應(yīng)答聯(lián)絡(luò)信號(hào)的功能如下: :選通輸入,低電平有效。是由輸入設(shè)備送來(lái)的輸入信號(hào)。 IBF:輸入緩沖器滿,高電平有效。表示數(shù)據(jù)已送入輸入鎖存器,它由 信號(hào)的下降沿置位,由 信號(hào)的上升沿復(fù)位。 INTR:中斷請(qǐng)求信號(hào),高電平有效,由8255A輸出,向CPU發(fā)中斷請(qǐng)求。 INTE A: 口中斷允許信號(hào),由PC4的置位/復(fù)位來(lái)控制,INTE B由PC2的置位/復(fù)位來(lái)控制,83,圖9-24 8255A方式1輸入聯(lián)絡(luò)信號(hào),84,圖9-25A

36、口方式1輸入工作示意圖,每個(gè)信號(hào)的發(fā)出者和承受者 弄清各信號(hào)之間的因果關(guān)系,85,86,下面以A口的方式1輸入為例( A口方式1輸入工作示意圖見(jiàn)圖9-25),介紹方式1輸入的工作過(guò)程以及各控制聯(lián)絡(luò)信號(hào)的功能。當(dāng)輸入設(shè)備輸入一個(gè)數(shù)據(jù)并送到PA7PA0上時(shí),輸入設(shè)備自動(dòng)在選通輸入線 上發(fā)送一個(gè)低電平選通信號(hào)。 8255A收到 上負(fù)脈沖后自動(dòng)做兩件事:一是把PA7PA0上輸入數(shù)據(jù)存入A口的輸入數(shù)據(jù)緩沖/鎖存器;二是使輸入緩沖器輸出線IBFA變?yōu)楦唠娖?,以通知輸入設(shè)備8255A的A口已收到它送來(lái)的輸入數(shù)據(jù)。 8255A同時(shí)檢測(cè)到 變?yōu)楦唠娖?、IBFA為高電平時(shí)使INTR A變?yōu)楦唠娖?,向CPU發(fā)出中斷

37、請(qǐng)求。 CPU響應(yīng)中斷后,可以通過(guò)中斷服務(wù)程序從A口的“輸入數(shù)據(jù)緩沖/鎖存器”讀取輸入設(shè)備送來(lái)的輸入數(shù)據(jù)。當(dāng)輸入數(shù)據(jù)被CPU讀走后,8255A撤消INTR A上中斷請(qǐng)求,并使IBFA變?yōu)榈碗娖?,以通知輸入設(shè)備可以送下一個(gè)輸入數(shù)據(jù),87,2)當(dāng)任何一個(gè)端口按照工作方式1輸出時(shí),應(yīng)答聯(lián)絡(luò)信號(hào)如圖9-26所示,各聯(lián)絡(luò)信號(hào)的功能如下: :輸出緩沖器滿信號(hào),低電平有效,是8255A輸出給輸出設(shè)備的聯(lián)絡(luò)信號(hào)。表示CPU已把輸出數(shù)據(jù)送到指定端口,外設(shè)可以將數(shù)據(jù)取走。它由 信號(hào)的上升沿置“0”(有效),由 信號(hào)的下降沿置“1”(無(wú)效)。 :外設(shè)響應(yīng)信號(hào),低電平有效。表示CPU輸出給8255A的數(shù)據(jù)已由輸出設(shè)備

38、取走,88,INTR:中斷請(qǐng)求信號(hào),高電平有效。表示數(shù)據(jù)已被外設(shè)取走,請(qǐng)求CPU繼續(xù)輸出數(shù)據(jù)。中斷請(qǐng)求的條件是 、 和INTE(中斷允許)為高電平,中斷請(qǐng)求信號(hào)由 的下降沿復(fù)位。 INTE A:由PC6的置位/復(fù)位來(lái)控制。 INTE B:由PC2的置位/復(fù)位來(lái)控制。 圖9-27為B口工作于方式1輸出下的工作示意圖,89,圖9-26 方式1輸出聯(lián)絡(luò)信號(hào),90,圖9-27 方式1選通輸出示意圖,91,3)方式2,只有A口才能設(shè)定。圖9-28為方式2下的工作過(guò)程示意圖。在方式2下,PA7PA0為雙向I/O總線。當(dāng)作為輸入總線使用時(shí),PA7PA0受 和IBFA控制,其工作過(guò)程和方式1輸入時(shí)相同;當(dāng)作為

39、輸出總線使用時(shí),PA7PA0受 和 控制,其工作過(guò)程和方式1輸出時(shí)相同。 只適用于A口,且C口提供固定的聯(lián)絡(luò)信號(hào); 當(dāng)A口工作在方式2,B口可工作在方式0或1; C口沒(méi)有被指定為聯(lián)絡(luò)信號(hào)的其他位可以工作在方式0,可選擇輸入/輸出,92,圖9-28 A口在方式2下的工作示意圖,93,5. 8051單片機(jī)和8255A的接口,圖9-29 AT89S52與8255A 接口電路,94,例題1:要求8255A工作在方式0,且A口作為輸入,B口、C口作為輸出,則樣例程序如下: MOV A,#90H ;A口方式0輸入,B口,C口輸出的方式控制;字A MOV DPTR,#0FF7FH ;控制寄存器地址DPTR

40、MOVX DPTR,A ;方式控制字控制寄存器 MOV DPTR, #0FF7CH ;A口地址DPTR MOVX A, DPTR;從A口讀數(shù)據(jù) MOV DPTR, #0FF7DH ;B口地址DPTR MOV A, #DATA1 ;要輸出的數(shù)據(jù)DATA1A MOVX DPTR, A ;將DATA1送B口輸出 MOV DPTR, #0FF7EH ;C口地址DPTR MOV A, #DATA2 ;DATA2A MOVX DPTR, A ;將DATA2送C口輸出,95,8255A的C口8位中的任一位,均可用指令來(lái)置位或復(fù)位。 1) 如果想把C口的PC5置1,相應(yīng)的控制字為00001011B=0BH,程

41、序如下: MOV DPTR, # FF7FH ;控制口地址DPTR MOV A, #0BH ;控制字A MOVX DPTR, A ;控制字控制口,PC5=1 2)如果想把C口的第6位PC5復(fù)位,相應(yīng)的控制字為00001010B = 0AH,程序如下: MOV DPTR, #0FF7FH;控制口地址DPTR MOV A, #0AH;控制字A MOVX DPTR, A;控制字送到控制口PC5=0,96,例題9-2:圖9-30是AT89S52擴(kuò)展8255A與打印機(jī)接口的電路。8255A的片選線為P0.7,打印機(jī)與AT89S52采用查詢方式交換數(shù)據(jù)。打印機(jī)的狀態(tài)信號(hào)輸入給PC7,打印機(jī)忙時(shí)BUSY=1

42、,打印機(jī)的數(shù)據(jù)輸入采用選通控制,當(dāng)出現(xiàn)負(fù)跳變時(shí)數(shù)據(jù)被打入,要求編寫(xiě)向打印機(jī)輸出80個(gè)數(shù)據(jù)的程序。 設(shè)8255A的A、B、C和控制寄存器的口地址分別為:7CH、7DH、7EH和7 FH。8255A的方式1中為低電平有效,而打印機(jī)要求下降沿選通。所以8255A采用方式0,由PC0模擬產(chǎn)生信號(hào)。因PC7輸入,PC0輸出,則方式選擇命令字為: 10001110B= 8EH,97,圖9-30 AT89S52擴(kuò)展8255A與打印機(jī)接口的電路,98,自內(nèi)部RAM 20H單元開(kāi)始向打印機(jī)輸出80個(gè)數(shù)據(jù)的程序如下: MOV R0, #7FH;R0指向控制口 MOV A, #8EH;方式控制字為8EH MOVX

43、R0,A;送方式控制字 MOV R1,#20H;送內(nèi)部RAM數(shù)據(jù)塊首地址至指針R1 MOV R2,#50H;置數(shù)據(jù)塊長(zhǎng)度 LP: MOV R0,#7EH;R0指向C口 LP1: MOVX A,R0;讀PC7連接BUSY狀態(tài) JB ACC. 7, LP1;查詢等待打印機(jī) MOV R0,#7CH;指向A口 MOV A,R1;取RAM數(shù)據(jù) MOVX R0,A;數(shù)據(jù)輸出到8255A口鎖存 INC R1;RAM地址加1,99,MOV R0, #7FH;R0指向控制口 MOV A,#00H ;PC復(fù)位控制字 MOVX R0,A ;PC00,產(chǎn)生 下降沿 MOV A,#01H ;PC0置位控制字 MOVX

44、R0, A;PC0=1 ,產(chǎn)生 上升沿 DJNZ R2, LP ;未完,則反復(fù),100,9.3.5用串行口擴(kuò)展并行I/O口,74LS165是8位并行置入移位寄存器,TXD(P3.1)作為移位脈沖輸出端與所有74LS165的移位脈沖輸入端CLK相連;RXD(P3.0)作為串行輸入端作74LS165的串行輸出端QH相連;P1.0用來(lái)控制74LS165的移位與置入而同 相連;74LS165的時(shí)鐘禁止端(15腳)接地,表示允許時(shí)鐘輸入。當(dāng)擴(kuò)展多個(gè)8位輸入口時(shí),兩芯片的首尾(QH與SIN)相連,101,圖9-31 利用串行口擴(kuò)展輸入口,102,下面的程序是從16位擴(kuò)展口讀入5組數(shù)據(jù)(每組二個(gè)字節(jié)),并把

45、它們轉(zhuǎn)存到內(nèi)部RAM 20H開(kāi)始的單元中。 MOV R7,#05H ;設(shè)置讀入組數(shù) MOV R0,#20H ;設(shè)置內(nèi)部RAM數(shù)據(jù)區(qū)首址 START: CLR P1.0 ;并行置入數(shù)據(jù)= 0 SETB P1.0 ;允許串行移位, =1 MOV R1, #02H ;設(shè)置每組字節(jié)數(shù),即外擴(kuò) ; 74LS165的個(gè)數(shù) RXDATA: MOV SCON,#00010000B;設(shè)串行口方式0, ;允許接收 ;啟動(dòng)接收過(guò)程,103,WAIT: JNB RI, WAIT ;未接收完一幀,循環(huán)等待 CLR RI ;清RI標(biāo)志,準(zhǔn)備下次接收 MOV A,SBUF ;讀入數(shù)據(jù) MOV R0, A ;送至RAM緩沖區(qū)

46、 INC R0;指向下一個(gè)地址 DJNZ R1, RXDATA;未讀完一組數(shù)據(jù),繼續(xù) DJNZ R7, START ;5組數(shù)據(jù)未讀完重新并行置入 ;對(duì)數(shù)據(jù)進(jìn)行處理,104,9.4鍵盤(pán)與顯示器接口9.4.1 鍵盤(pán)接口,鍵盤(pán)實(shí)際上是由排列成矩陣形式的一系列按鍵開(kāi)關(guān)組成, 用戶通過(guò)鍵盤(pán)可以向CPU輸入數(shù)據(jù)、地址和命令。 鍵盤(pán)按其結(jié)構(gòu)形式可分為: 編碼式鍵盤(pán)和非編碼式鍵盤(pán)兩類。 單片機(jī)系統(tǒng)中普遍使用非編碼式鍵盤(pán), 這類鍵盤(pán)主要解決以下幾個(gè)問(wèn)題: 鍵的識(shí)別; 如何消除鍵的抖動(dòng); 鍵的保護(hù),105,1.非編碼式鍵盤(pán)工作原理 非編碼式鍵盤(pán)識(shí)別按鍵的方法有兩種: 一是行掃描法, 二是線反轉(zhuǎn)法。 1)行掃描法

47、通過(guò)行線發(fā)出低電平信號(hào), 如果該行線所連接的鍵沒(méi)有按下的話, 則列線所接的端口得到的是全“1“信號(hào), 如果有鍵按下的話, 則得到非全“1“信號(hào)。 為了防止雙鍵或多鍵同時(shí)按下, 往往從第0行一直掃描到最后1行, 若只發(fā)現(xiàn)1個(gè)閉合鍵, 則為有效鍵, 否則全部作廢。 找到閉合鍵后, 讀入相應(yīng)的鍵值, 再轉(zhuǎn)至相應(yīng)的鍵處理程序,106,2) 線反轉(zhuǎn)法 線反轉(zhuǎn)法也是識(shí)別閉合鍵的一種常用方法, 該法比行掃描速度快, 但在硬件上要求行線與列線外接上拉電阻。 先將行線作為輸出線, 列線作為輸入線, 行線輸出全“0”信號(hào), 讀入列線的值, 然后將行線和列線的輸入輸出關(guān)系互換, 并且將剛才讀到的列線值從列線所接的端

48、口輸出, 再讀取行線的輸入值。那么在閉合鍵所在的行線上值必為 0。這樣, 當(dāng)一個(gè)鍵被按下時(shí), 必定可讀到一對(duì)唯一的行列值,107,圖9-32 8255A擴(kuò)展的I/O口組成的行列式鍵盤(pán),108,鍵盤(pán)接口匯編語(yǔ)言子程序:若鍵閉合,鍵值存入(A)中,鍵值的計(jì)算公式是:鍵值=行首鍵號(hào)列號(hào);若無(wú)鍵閉合,則(A) = 0FFH PA8255 EQU 7FFCH;8255A的A口地址 PB8255 EQU 7FFDH;8255A的B口地址 PC8255 EQU 7FFEH;8255A的C口地址 CC8255 EQU 7FFCH;8255A的控制口地址 KEY1:ACALL KS1;調(diào)用判斷有無(wú)鍵按下子程序

49、JNZ LK1;有鍵按下時(shí),(A)0轉(zhuǎn)消顫延時(shí) AJMP KEY1;無(wú)鍵按下返回 LK1:ACALL T12ms;調(diào)12ms延時(shí)子程序 ACALL KS1;查有無(wú)鍵按下,若有則為鍵真實(shí)按 JNZ LK2;鍵按下(A) 0轉(zhuǎn)逐列掃描 AJMP KEY1;不是鍵按下返回 LK2:MOV R2,#0FEH;首列掃描字入R2 MOV R4,#00H;首列號(hào)入R4,109,LK4:MOV DPTR,# PB8255;列掃描字送至8255PB口 MOV A, R2 MOVX DPTR, A INC DPTR;指向8255PC口 MOVX A, DPTR ;8255PC口讀入行狀態(tài) JB ACC.0,LON

50、E;第0行無(wú)鍵按下,轉(zhuǎn)查第1行 MOV A,#00H ;第0行有鍵按下,該行首鍵號(hào);#00H(A) AJMP LKP;轉(zhuǎn)求鍵號(hào) LONE: JB ACC.1,LTWO ;第1行無(wú)鍵按下,轉(zhuǎn)查第2行 MOV A,#08H;第1行有鍵按下,該行首鍵號(hào) ;#08H(A) AJMP LKP,110,LTWO:JB ACC.2,LTHR;第2行無(wú)鍵按下,轉(zhuǎn)查第3行 MOV A,#10H;第2行有鍵按下,該行首鍵號(hào) ;#10H(A) AJMP LKP LTHR: JB ACC.3,NEXT;第3行無(wú)鍵按下,改查下一列 MOV A,#18H;第3行有鍵按下該行首鍵號(hào) ;#18H(A) LKP:ADD A,R

51、4;求鍵號(hào)=行首鍵號(hào)列號(hào) PUSH ACC;鍵號(hào)進(jìn)棧保護(hù) LK3:ACALL KS1;等待鍵釋放 JNZ LK3;未釋放,等待 POP ACC;鍵釋放,鍵號(hào)A RET;鍵掃描結(jié)束,出口狀態(tài) (A) =鍵號(hào),111,NEXT: INC R4;指向下一列,列號(hào)加1 MOV A,R2 ;判斷8列掃描完沒(méi)有? JNB ACC. 7, KND; 8列掃描完,返回 RL A ;掃描字左移一位,轉(zhuǎn)變?yōu)橄乱涣袙呙枳?MOV R2,A;掃描字入R2 AJMP LK4;轉(zhuǎn)下一列掃 KND: AJMP KEY1 ;判斷有沒(méi)有鍵按下,112,KS1為判鍵閉合的子程序,有鍵閉合時(shí)(A)0 KS1: MOV DPTR,#

52、PB8255;指向PB口 MOV A,#00H;全掃描字#0H MOVX DPTR,A;全掃描字入PB口 INC DPTR;指向PC口 MOVX A,DPTR;讀入PC口行狀態(tài) CPL A;變正邏輯,以高電平表示有鍵按下 ANL A,#0FH;屏蔽高4位 RET;出口狀態(tài),(A)0時(shí)有鍵按 ;T12ms延時(shí)子程序,執(zhí)行一遍的時(shí)間約12ms T12ms:MOV R7,#18H;延遲12ms子程序 TM:MOV R6, #0FFH DJNZ R6, $ DJNZ R7, TM RET,113,9.4.2 七段式LED顯示器接口,1. LED顯示器結(jié)構(gòu)與原理,圖9-33 7段LED數(shù)碼顯示器,114

53、,7段LED顯示器各段碼位的對(duì)應(yīng)關(guān)系如下,115,表9-7七段LED字形編碼表,116,2. 七段式LED顯示器接口電路,圖9-32 8255A擴(kuò)展的I/O口組成的行列式鍵盤(pán)顯示器接口電路,117,89S52 RAM中有6個(gè)顯示緩沖單元79H-7EH,分別存放6位顯示器的顯示數(shù)據(jù)。8255A的A口掃描輸出總有一位為高電平,8255A的B口輸出相應(yīng)位的顯示數(shù)據(jù)的段數(shù)據(jù),使某位顯示出一個(gè)字符,其余位為暗,依次改變A口輸出的高電平位及B口輸出對(duì)應(yīng)的段數(shù)據(jù),6位顯示器就顯示出緩沖器的顯示字符。顯示程序流程如右圖所示,圖9-34 動(dòng)態(tài)顯示匯編語(yǔ)言子程序流程圖,118,和圖9-33對(duì)應(yīng)的動(dòng)態(tài)顯示程序清單如

54、下: DIR:MOV R0, #79H;顯示緩沖區(qū)首址送R0 MOV R3,#01H;使顯示器最右邊位亮 MOV A, R3 LD0:MOV DPTR,#7FFCH ;掃描值送PA口 MOVX DPTR,A INC DPTR ;指向PB口 MOV A,R0 ;取顯示數(shù)據(jù) ADD A, #0DH ;加上偏移量,119,MOVC A, A+PC;取出字形 MOVXDPTR, A;送出顯示 ACALL DL1;延時(shí) INC R0;緩沖區(qū)地址加1 MOV A, R3 JB ACC. 5, LD1 ;掃到第6個(gè)顯示位了嗎? RL A ;沒(méi)有,R3左環(huán)移一位,掃描下一個(gè)顯示位 MOV R3, A AJMP

55、 LD0 LD1: RET RET,120,顯示段碼表 DSEG0:DB 3FH,06H,5BH,4FH,66H,6DH DSEG1:DB 7DH, 07H, 7FH, 6FH, 77H, 7CH DSEG2:DB 39H, 5EH, 79H, 71H, 00H, 73H DL1:MOV R7,#02H ;延時(shí)子程序 DL:MOV R6, #0FFH DLA:DJNZ R6, DLA DJNZ R7, DL RET,121,9.4.3LED點(diǎn)陣接口,發(fā)光二極管點(diǎn)陣(LED dot matrix)用于顯示復(fù)雜的字符、圖形、漢字。通過(guò)單片機(jī)控制點(diǎn)陣的引腳來(lái)實(shí)現(xiàn)特定圓點(diǎn)的點(diǎn)亮,圖9-35 發(fā)光二極管

56、點(diǎn)陣,圖9-36 LED點(diǎn)陣的顯示,122,1.發(fā)光二極管點(diǎn)陣的結(jié)構(gòu),a)共陽(yáng)型 (b)共陰型 圖9-37 88發(fā)光二級(jí)管點(diǎn)陣內(nèi)部結(jié)構(gòu)圖,123,設(shè)使用的是共陽(yáng)型點(diǎn)陣,對(duì)字母T進(jìn)行編碼,用高電平1代表點(diǎn)亮的LED,低電平0代表熄滅的,則可以得到字母T在“橫向上”的編碼,轉(zhuǎn)換成十六進(jìn)制之后為 0FFH、10H、10H、10H、10H、10H、10H 和10H。這些編碼就是字母T的十六進(jìn)制編碼,如果向LED點(diǎn)陣的P0口輸入0FFH并向P2.0口輸入低電平,則LED點(diǎn)陣上將顯示出圖9-38中字母T的最上一行數(shù)據(jù)。接著,向LED點(diǎn)陣的P0口輸入10H,而向P2.1口輸入低電平,則顯示的是圖 9-38中

57、字母 T的第二行數(shù)據(jù)。按照這種方法,在LED點(diǎn)陣的P0口輸入數(shù)據(jù)的同時(shí),在P2口的某一位輸入低電平,這樣掃描一遍之后就可以在點(diǎn)陣上看到字母T,124,圖9-38 共陽(yáng)極顯示字母T的點(diǎn)陣示意圖,125,2. 單個(gè)88的LED點(diǎn)陣與單片機(jī)的連接,圖9-39共陽(yáng)型88發(fā)光二極管點(diǎn)陣與單片機(jī)的連接,126,9.4.4字符LCD接口,1.字符LCD 液晶顯示屏(LCD)是智能儀器儀表、智能設(shè)備常用的另外一種顯示設(shè)備,消耗電流小,控制簡(jiǎn)單,在便攜式儀器和設(shè)備如移動(dòng)電話、計(jì)算器、臺(tái)式/筆記本計(jì)算機(jī)顯示器等場(chǎng)合得到廣泛應(yīng)用。字符LCD根據(jù)所能顯示的字符的個(gè)數(shù)多少而提供不同的器件以供開(kāi)發(fā)時(shí)選用,127,圖9-4

58、0為字符162液晶屏,162表示該LCD能顯示兩行字符,每行能顯示16個(gè)字符,包括英文大寫(xiě)字母、小寫(xiě)字母、標(biāo)點(diǎn)符號(hào)和常用符號(hào)等,圖9-40 162的字符液晶屏,128,字符液晶屏是由一個(gè)一個(gè)的小顯示點(diǎn)陣構(gòu)成的,如圖9-41所示,162字符液晶屏有32個(gè)小顯示點(diǎn)陣,分布成2行,每行16個(gè),圖9-41顯示了字母J和S的小顯示點(diǎn)陣的放大圖。每一個(gè)小顯示點(diǎn)陣由57的點(diǎn)陣組成,小顯示點(diǎn)陣之間在顯示屏上有一定的距離,如果不留這一個(gè)小的空隙,那字符與字符之間會(huì)因?yàn)橘N得太緊而影響美觀,129,圖9-41 162字符液晶屏中的小顯示點(diǎn)陣,130,2. 單片機(jī)與字符LCD的硬件連接,圖9-42 字符液晶屏與單片機(jī)

59、的接口電路圖,131,162的字符LCD有16個(gè)引腳,其功能描述如下: VCC、VSS、Vee(第 2、1、3引腳):電源端。VCC與VSS分別與+5V和 GND相連,為L(zhǎng)CD工作電源。Vee是LCD對(duì)比度調(diào)節(jié)引腳,其電位由一個(gè)電位器控制,調(diào)節(jié)電位器調(diào)整Vee引腳的電壓,從而調(diào)節(jié)了LCD的對(duì)比度。 RS(第4引腳):命令/數(shù)據(jù)選擇線。當(dāng)RS=0時(shí),從DB0DB7進(jìn)入LCD的信號(hào)為命令;當(dāng)RS=1時(shí),從DB0DB7進(jìn)入LCD的信號(hào)為顯示數(shù)據(jù),132,R/ (第5引腳):讀/寫(xiě)控制線。 R/ =0時(shí),寫(xiě)數(shù)據(jù);R/ =1時(shí),讀數(shù)據(jù)。 E(第6引腳):LCD使能端。該引腳控制LCD從數(shù)據(jù)線上將數(shù)據(jù)讀入

60、LCD。當(dāng)該引腳上的電位由1向0變化時(shí),DB0DB7的數(shù)據(jù)被讀入LCD。 DB0DB7(第714引腳):數(shù)據(jù)線,133,LED、-LED(第15、16引腳):背光供電端。給+LED通過(guò)一個(gè)2030的電阻供+5V,-LED接GND,液晶屏的背光點(diǎn)亮,這樣在光線很暗的情況下也能看到液晶屏的顯示內(nèi)容。當(dāng)然,點(diǎn)亮背光會(huì)提高系統(tǒng)功耗。如果不需要背光可以將這兩個(gè)管腳懸空,圖9-43 LCD背光的控制方法,134,3.“Hello,world!”字符LCD的程序控制 下面通過(guò)在162的LCD上顯示“Hello, world!”,學(xué)習(xí)字符LCD的程序控制方法。LCD的RS引腳是命令/數(shù)據(jù)選擇線,從DB0DB7

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論