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

下載本文檔

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

文檔簡介

單片機嵌入式系統(tǒng)原理及應(yīng)用賈好來單片機系統(tǒng)擴展與接口技術(shù)第1頁/共223頁2單片機應(yīng)用系統(tǒng)必然包含合適的外圍器件。外圍器件與單片機的接口是單片機應(yīng)用系統(tǒng)至關(guān)重要的環(huán)節(jié)。本章主要講述8051單片機與常見的程序存儲器、數(shù)據(jù)存儲器、數(shù)字I/O通道的接口技術(shù),模擬輸入輸出通道和單片機的接口技術(shù)。第2頁/共223頁3本章內(nèi)容9.18051程序存儲器的擴展9.28051數(shù)據(jù)存儲器擴展9.38051的I/O接口擴展9.4鍵盤與顯示器接口9.58051單片機和A/D及D/A的接口9.6單總線1-Wire接口的溫度傳感器DS18B20及其應(yīng)用第3頁/共223頁49.18051程序存儲器的擴展存儲器分類:只讀存儲器(ROM):ROM中的信息一旦寫入之后,就不能隨意更改,特別是不能在程序運行的過程中寫入新的內(nèi)容,故稱之為只讀存儲器。ROM又分為:掩膜ROM、可編程ROM、EPROM、E2PROM、FlashROM等。隨機存儲器(RAM):RAM在程序運行過程中可根據(jù)需要隨時更改其中的內(nèi)容,斷電后不能保存數(shù)據(jù)。E2PROM(EEPROM):是一種用電信號編程、電信號擦除的ROM芯片,寫入的速度比較慢,但斷電后能夠保存信息。第4頁/共223頁5FlashROM:又稱閃爍存儲器,是非易失性、電擦除型存儲器。其特點是可快速在線修改其存儲單元中的數(shù)據(jù),標(biāo)準(zhǔn)改寫次數(shù)可達1萬次。與E2PROM相比,F(xiàn)lashROM的讀寫速度都很快。由于其性能比E2PROM要好,所以目前大有取代E2PROM的趨勢。MCS-51系列單片機具有64KB的程序存儲器空間,其中8051、8751型單片機含有4KB的片內(nèi)程序存儲器,而8031型單片機則無片內(nèi)程序存儲器。當(dāng)采用8051、8751型單片機而程序超過4KB,或采用8031型單片機時,就需要進行程序存儲器的擴展。第5頁/共223頁69.1.18051外部程序存儲器的操作時序圖9-1是與訪問外部程序存儲器有關(guān)的時序圖。其中a)是沒有訪問外部數(shù)據(jù)存儲器,即沒有執(zhí)行MOVX類指令情況下的時序;b)是訪問外部數(shù)據(jù)存儲器操作時的時序。CPU由外部程序存儲器取指時,16位地址的低8位PCL由P0輸出,高8位PCH由P2輸出,而指令由P0輸入。第6頁/共223頁7第7頁/共223頁8第8頁/共223頁9在不執(zhí)行MOVX指令時,P2口專用于輸出PCH,P2有輸出鎖存功能,可直接接至外部存儲器的地址端,無需再加鎖存。P0口則作分時復(fù)用的雙向總線,輸出PCL,輸入指令。在這種情況下,每一個機器周期中,允許地址鎖存信號ALE兩次有效,在ALE由高變低時,有效地址PCL出現(xiàn)在P0總線上,低8位地址鎖存器應(yīng)在此時把地址鎖存起來。同時也是每個機器周期兩次有效,用于選通外部程序存儲器,使指令送到P0總線上,由CPU取入。第9頁/共223頁10當(dāng)系統(tǒng)中接有外部數(shù)據(jù)存儲器,執(zhí)行MOVX指令時,時序有些變化,見圖b)若執(zhí)行的是MOVX@DPTR指令,則此地址就是DPL值(數(shù)據(jù)指針的低8位),同時,在P2口出現(xiàn)有效的DPH值(數(shù)據(jù)指針的高8位);若執(zhí)行的是MOVX@Ri指令,則此地址就是Ri的內(nèi)容,同時在P2口線上出現(xiàn)的將是專用寄存器P2(即口內(nèi)鎖存器)的內(nèi)容。第10頁/共223頁119.1.2并行EEPROM及其擴展AT28C64B是ATMEL公司生產(chǎn)的高速并行EEPROM,存儲容量8k×8bit;讀取時間70ns,最大頁寫入時間10ms;工作電流為40mA,待機電流100μA;硬件和軟件數(shù)據(jù)保護;數(shù)據(jù)輪詢和觸發(fā)位用于寫結(jié)束檢測;可靠性高:100000次擦寫,數(shù)據(jù)可保存10年;單電源供電,其引腳和內(nèi)部框圖如圖9-2:第11頁/共223頁12a)引腳圖b)內(nèi)部結(jié)構(gòu)框圖圖9-2

AT28C64的引腳和內(nèi)部結(jié)構(gòu)框圖

A0~A12:

地址線; I/O0-I/O7:數(shù)據(jù)的輸入輸出;

:芯片使能,低電平有效;

:輸出使能,低電平有效;

:寫使能,低電平有效。

第12頁/共223頁對AT28C64的讀寫

對AT28C64的讀寫和SRAM相同,無非是寫入時間略長。在寫入命令發(fā)出后,需要判斷寫入過程是否結(jié)束。工程上常采取延時的方法或查詢I/O7,也就是所謂的輪詢功能。輪詢功能是指在28C64寫入期間,如果讀取I/O7上的數(shù)據(jù),則得到最后一次寫入數(shù)據(jù)的補碼,即如果在I/O7寫入的數(shù)據(jù)為邏輯“1”,則讀出的數(shù)據(jù)為“0”;反之,如果在I/O7寫入的數(shù)據(jù)為邏輯“0”,則讀出的數(shù)據(jù)為“1”。當(dāng)寫入過程結(jié)束,則從I/O7引腳讀出的數(shù)據(jù)是真實的寫入數(shù)據(jù)。13第13頁/共223頁1428C64和89S52的連接28C64既可作為外部程序存儲器,又可作為數(shù)據(jù)存儲器。在寫入期間,單片機通過查詢I/O7引腳狀態(tài),來判斷寫入過程是否結(jié)束。28C64的片選信號由P2.7提供。因28C64可作為外部程序存儲器和外部數(shù)據(jù)存儲器合并使用,故將信號和加到與門74HC08上,并將其輸出與28C64的數(shù)據(jù)輸出允許信號相連。第14頁/共223頁15圖9-3AT89S52單片機和AT28C64的接口第15頁/共223頁16

例9-1

根據(jù)AT89S52單片機和AT28C64的接口電路,編寫對AT28C64進行寫操作的字程序。要寫入的數(shù)據(jù)區(qū)取自源數(shù)據(jù)區(qū)。

子程序的入口參數(shù)如下:

R0:寫入的字節(jié)計數(shù)器 R1:28C64的低8位地址寄存器

R2:AT28C64的高8位地址寄存器 R3:源數(shù)據(jù)區(qū)首地址的低8位寄存器

R4:源數(shù)據(jù)區(qū)首地址的高8位寄存器 R5:寫入的數(shù)據(jù)第16頁/共223頁17解:程序清單如下:

WR1: MOV DP0L,R3 MOV DP0H,R4;源數(shù)據(jù)區(qū)16位地址傳輸?shù)? ;DPTR0中

MOVXA,@DPTR;取數(shù)據(jù)

MOV R5,A INC DPTR MOV R3,DP0L MOV R4,DP0H MOV DP0L,R1 MOV DP0H,R2;28C64地址傳輸?shù)紻PTR0中

MOVX @DPTR,A;將A的內(nèi)容寫入28C64H

第17頁/共223頁18

NOP NOP NOP WAIT:MOVXA,@DPTR;讀取最后一次寫入的數(shù)據(jù)

XRLA,R5 JNZWAIT;寫入的I/O7和讀出的I/O7不相等 ;寫入沒有結(jié)束,等待

INCDPTR MOVR1,DP0L MOVR2,DP0H DJNZR0,WR1 ;未完成,循環(huán)

RET第18頁/共223頁199.1.3并行Flash存儲器FM16W08及其擴展性能特點存儲容量為64Kbit(即8k×8byte);讀寫壽命為100億次;掉電數(shù)據(jù)可保存38年;寫數(shù)據(jù)無延時;讀取時間為70ns;讀周期約為130ns;低功耗,工作電流為12mA,待機電流僅為20μA;寬電壓范圍供電,2.7V~5.5V;工作溫度范圍為-40℃~+85℃;具有特別優(yōu)良的防潮濕、防電擊及抗震性能;與并行SRAM或E2PROM管腳兼容。第19頁/共223頁20引腳定義A0~A12 :地址線,在的下降沿被鎖定;DQ0~DQ7 :數(shù)據(jù)輸入輸出線;:片選信號線,為低電平時,芯片被選中;:輸出使能,低電平時,F(xiàn)M16W08把數(shù)據(jù)送到總線;為高電平時,數(shù)據(jù)線為高阻態(tài);

:寫使能,低電平時,總線的數(shù)據(jù)寫入由A0~A12確定的地址中。第20頁/共223頁21圖9-4FM16W08的引腳和內(nèi)部結(jié)構(gòu)框圖第21頁/共223頁22

(1)讀操作FW16W08的讀操作一般在下降沿開始,這時地址位被鎖存,存儲器讀周期開始,一旦開始,應(yīng)使保持不變,一個完整的存儲器周期可在內(nèi)部完成,在訪問時間結(jié)束后,總線上的數(shù)據(jù)變?yōu)橛行?。?dāng)?shù)刂繁绘i存后,地址值可在滿足保持時間參數(shù)的基礎(chǔ)上發(fā)生改變,這一點不象SRAM,地址被鎖存后改變地址值不會影響存儲器的操作。第22頁/共223頁23符號VDD2.7Vto3.0VMinMaxVDD3.0Vto5.5VMinMax單位tCE8070nstCA8070nstRC145130nstPC6560nstAS00nstAH1515nstOE1512nstHZ1515nstOHZ1515ns圖9-5FM16W08的讀時序和參數(shù)第23頁/共223頁24(2)寫操作FW16W08的寫操作由和控制,地址在的下降沿鎖存??刂茖懖僮鲿r,在開始寫周期之前置0,即當(dāng)有效時,應(yīng)先為低電平。FRAM沒有寫延時,讀與寫訪問時間是一致的,整個存儲器操作一般在一個總線周期出現(xiàn)。因此,任何操作都能在一個寫操作后立即進行,而不象E2PROM需要通過判斷來確定寫操作是否完成。第24頁/共223頁25符號VDD2.7Vto3.0VMinMaxVDD3.0Vto5.5VMinMax單位tCA80807070nstPC6560nstWC145130nstAS00nstAH1515nstWS00nstWH015012nstDS40153015nstDH015015ns圖9-6FM16W08的寫時序和參數(shù)第25頁/共223頁26(3)充電操作預(yù)充電操作是準(zhǔn)備一次新訪問存儲器的一個內(nèi)部條件,所有存儲器周期包括一個存儲器訪問和一個預(yù)充電,預(yù)充電在腳為高電平或無效時開始,它必須保持高電平至少為最小的預(yù)充電時間,由于預(yù)充電在上升沿開始,這使得用戶可決定操作的開始,同時該器件有一個為低電平必須滿足的最大時間規(guī)范。第26頁/共223頁27Flash存儲器FM16W08和SRAM時序的區(qū)別:FRAM、SRAM外部引腳雖然相同,但讀寫時序有所不同,編寫對應(yīng)的讀寫程序時,需要考慮其不同之處。圖9-7FRAM和SRAM的選通信號第27頁/共223頁284.FRAM和8051單片機的接口8051單片機的ALE引腳為地址鎖存允許信號,訪問單片機外部存儲器時,該腳將輸出一個負(fù)跳沿的脈沖以用于鎖存16位地址的低8位。要保證對FM16W08的正確訪問,必須注意兩點:第一,F(xiàn)RAM的訪問時間必須大于70ns;第二,ALE的高電平寬度必須大于60ns。第28頁/共223頁29

圖9-8AT89S52單片機和FM16W08的接口第29頁/共223頁309.28051數(shù)據(jù)存儲器擴展數(shù)據(jù)存貯器的擴展方法可分為:并行擴展:數(shù)據(jù)存儲器的數(shù)據(jù)口和單片機的數(shù)據(jù)口P0相連,8051單片機每次可讀入或輸出8位數(shù)據(jù)。常見的數(shù)據(jù)存儲器芯片有6116、6264、62128等SRAM。串行擴展:串口數(shù)據(jù)存儲器和單片機的接口方式為SPI總線或I2C總線,存儲器的類型主要是EEPROM和Flash,主要用于保存一些數(shù)據(jù)或常數(shù)。第30頁/共223頁319.2.1并行接口外部數(shù)據(jù)存貯器的操作時序

第31頁/共223頁32讀并行接口外部數(shù)據(jù)存貯器的時序

在第一個機器周期的S1,允許地址鎖存信號ALE由低變高①,開始了讀周期。在S2狀態(tài),CPU把低8位地址送上P0總線,把高8位地址送上P2口(采用MOVX@DPTR指令)。ALE的下降沿②用來把低8位地址信息鎖存到外部鎖存器內(nèi)③。而高8位地址信息此后一直鎖存在P2口上,無需再加外部鎖存。在S3狀態(tài),P0總線驅(qū)動器進入高阻狀態(tài)④。在S4狀態(tài),讀控制信號變?yōu)橛行Б?,它使得被尋址的并行接口?shù)據(jù)存貯器略過片刻后把有效的數(shù)據(jù)送上總線⑥,當(dāng)回到高電平后⑦,被尋址的并行接口存貯器把其本身的總線驅(qū)動器懸浮起來⑧,使P0總線又進入高阻狀態(tài)。第32頁/共223頁33第33頁/共223頁34寫并行接口外部數(shù)據(jù)存貯器的時序

與上述類同。但寫的過程是CPU主動把數(shù)據(jù)送上總線,故在時序上,CPU向P0總線送完被尋址存貯器的低8位地址后,在S3狀態(tài),就由送地址直接改為送數(shù)據(jù)上總線③,其間總線上不出現(xiàn)高阻懸浮狀態(tài)。在S4狀態(tài),寫控制信號有效,選通被尋址的存貯器,稍過片刻,P0上的數(shù)據(jù)就寫到被尋址的存貯器內(nèi)了。第34頁/共223頁359.2.28051單片機擴展并行接口外部數(shù)據(jù)存貯器SRAM擴展容量小于256B,用MOVX@Ri指令訪問外部SRAM,只用P0口傳送8位地址;擴展容量大于256B,用MOVX@DTPR指令訪問外部SRAM,同時用P0和P2口傳送16位地址,P0口傳送低8位,P2口傳送高8位。1.6264的引腳和操作方式 6264是8k×8位的靜態(tài)隨機存儲器芯片,采用CMOS工藝制作,由單一+5V供電,額定功耗200mW,典型存取時間為200ns。為28腳雙列直插式封裝,其管腳如圖9-10所示。第35頁/共223頁36引腳操作方式(20)(26)(22)(27)IO0~IO7(11~13),(15~19)未選中(掉電)VIH任意任意任意高阻未選中(掉電)任意VIL任意任意高阻輸出禁止VILVIHVIHVIH高阻讀VILVIHVILVIHDOUT寫VILVIHVIHVILDIN寫VILVIHVILVILDIN圖9-106264引腳排列和操作方式第36頁/共223頁37圖9-11擴展單片6264靜態(tài)數(shù)據(jù)存儲器電路第37頁/共223頁38注意:擴展單片程序存儲器時,片選端直接接地即可,因為系統(tǒng)中不會再有其它程序存儲器芯片。但是擴展單片數(shù)據(jù)存儲器時,其片選端能否直接接地則還須考慮應(yīng)用系統(tǒng)中有無I/O口及外圍設(shè)備擴展,如果有,則要統(tǒng)一進行片選選擇。第38頁/共223頁399.2.38051擴展SPI接口外部Flash數(shù)據(jù)存貯器FM25040B1.FM25040B的特點存儲容量512×8bits讀寫次數(shù)1012數(shù)據(jù)可保存38年寫入無延遲總線頻率最高可達20Mhz硬件可直接替代EEPROM可運行在SPI的模式0和模式3硬件寫保護和軟件寫保護待機電流4μA,工作電流250μA8引腳SOIC封裝第39頁/共223頁40引腳功能描述芯片選擇SCK串行時鐘輸入掛起寫保護SI串行數(shù)據(jù)輸入SO串行數(shù)據(jù)輸出2.FM25040B的結(jié)構(gòu)和引腳圖9-12FM25040B的內(nèi)部結(jié)構(gòu)和引腳排列第40頁/共223頁41圖9-12FM25040B的內(nèi)部結(jié)構(gòu)和引腳排列第41頁/共223頁423.FM25040B的操作命令和操作時序命令操作碼說明WREN0000_0110B置位寫使能鎖存(SetWriteEnableLatch)WRDI0000_0100B寫禁止(WriteDisable)RDSR0000_0101B讀狀態(tài)寄存器(ReadStatusRegister)WRSR0000_0001B寫狀態(tài)寄存器(WriteStatusRegister)READ0000_A011B讀存儲器數(shù)據(jù)(ReadMemoryData)WRITE0000_A010B寫存儲器數(shù)據(jù)(WriteMemoryData)第42頁/共223頁(1)置位寫使能鎖存器命令—WRENFM25040B上電時禁止寫操作。在任何寫操作之前,必須發(fā)出WREN命令。在WREN命令發(fā)出之后允許發(fā)出寫操作代碼,包括寫狀態(tài)寄存器和寫存儲器命令。WREN操作使內(nèi)部寫使能鎖存器被置位。狀態(tài)寄存器的WEL表示鎖存器的狀態(tài)。WEL=1表示寫允許。任何寫操作的完成將自動清除寫使能鎖存器,如果沒有新的WREN命令,則寫操作無法進行。圖9-13是WREN命令的時序圖。43第43頁/共223頁圖9-13WREN命令的時序圖44第44頁/共223頁(2)寫禁止命令—WRDI

WRDI命令禁止所有的寫操作。在寫操作被禁止的情況下,狀態(tài)寄存器的WEL=0。圖9-14是WRDI命令時序圖。45圖9-14WRDI命令的時序圖第45頁/共223頁(3)讀狀態(tài)寄存器命令—RDSR

讀狀態(tài)寄存器命令RDSR允許主器件校驗狀態(tài)寄存器的內(nèi)容。狀態(tài)寄存器提供了寫保護當(dāng)前狀態(tài)。在RDSR命令之后,F(xiàn)M25040B返回單字節(jié)的狀態(tài)寄存器內(nèi)容。狀態(tài)寄存器詳細(xì)描述見“狀態(tài)寄存器和寫保護”。圖9-15是RDSR命令時序圖46圖9-15RDSR命令時序圖第46頁/共223頁(4)寫狀態(tài)寄存器命令—WRSR

WRSR命令允許用戶向單字節(jié)的狀態(tài)寄存器做寫操作而確定寫保護作用的范圍或者不起保護作用。在發(fā)出WRSR命令之前,

必須為高或者無效。在發(fā)出WRSR命令之前,WREN命令必須先發(fā)出。注意,WRSR命令是寫操作,且執(zhí)行完畢后將清除寫使能鎖存器,WRSR對應(yīng)的總線時序圖如圖9-16所示。47第47頁/共223頁圖9-16WRSR命令的時序圖48第48頁/共223頁(5)狀態(tài)寄存器和寫保護

FM25040B的寫保護特點是多層次的。首先,在任何寫操作之前,WREN命令必須發(fā)出。如果寫命令已經(jīng)發(fā)出,引腳和狀態(tài)寄存器控制存儲器的操作。如果

為低,全部存儲器被寫保護;如果

為高,存儲器的寫保護由狀態(tài)寄存器決定。狀態(tài)寄存器結(jié)構(gòu)如表9-3所示。49第49頁/共223頁其中,位4-7和位0為“0”,且不能被修改。注意,因為FRAM存儲器沒有寫延遲,存儲器不會出向“忙”現(xiàn)象,因此將位0設(shè)為邏輯“0”,而在EEPROM中,位0的意義為

。非易失的BP1和BP0表示寫保護的區(qū)域。WEL表示寫使能鎖存器的狀態(tài),由WREN命令置位,由WRDI命令或?qū)懼芷诮Y(jié)束時(變高)清除。BP1和BP0是存儲器模塊寫保護位,不同的BP1、BP0保護不同的存儲器模塊,表9-4為對應(yīng)的保護范圍。50表9-3FM25040B的狀態(tài)寄存器位6543210名稱000BP1BP0WEL0第50頁/共223頁表9-4FM25040B的存儲器寫保護范圍51BP1BP0保護范圍00無01180H~1FFH(高1/4)10100H~1FFH(高1/2)11000H~1FFH(全部)表9-5FM25040B的寫保護WEL被保護的存儲器模塊沒保護的存儲器模塊狀態(tài)寄存器0X被保護被保護被保護10被保護被保護被保護11被保護不保護不保護第51頁/共223頁(6)存儲器的寫操作和SPI總線的EEPROM不同,F(xiàn)M25040B能夠以總線速度執(zhí)行一系列的寫操作,且不需要頁寄存器,可執(zhí)行任意數(shù)量的寫操作。所有的存儲器寫操作均以操作命令WREN開始。然后,主器件發(fā)出寫命令操作碼。寫命令操作碼包括存儲器地址的高位,操作碼的位3對應(yīng)于字節(jié)地址的A8;下一字節(jié)是存儲器地址的低8位A7-A0。這樣,9位地址確定了要寫入數(shù)據(jù)的第一字節(jié)的地址。緊接著的字節(jié)是要寫入的數(shù)據(jù)。數(shù)據(jù)的內(nèi)部地址隨主器件不斷發(fā)出的時鐘增加而增加。如果最后一個地址達到1FFH,計數(shù)器將回歸到0。寫操作時首先發(fā)送數(shù)據(jù)的MSB。和EEPROM不同,F(xiàn)M25040B可以連續(xù)寫入多個字節(jié)的數(shù)據(jù),且每個字節(jié)在輸入8個時鐘后立即寫入。在片選信號

的上升沿結(jié)束一次寫操作。圖9-17是存儲器寫的時序圖。52第52頁/共223頁圖9-17FM25040B的存儲器寫時序圖53第53頁/共223頁(7)存儲器的讀操作在片選信號

的下降沿,主器件可以發(fā)出讀操作指令碼。操作碼包括存儲器地址的高位,緊接著的是存儲器地址的低8位。這樣,9位地址確定了要讀出數(shù)據(jù)的第一字節(jié)的地址。在主器件輸出完整地讀操作碼之后,SI被忽略。然后,主器件發(fā)出8個時鐘脈沖,每個時鐘脈沖對應(yīng)于一位數(shù)據(jù)輸出,數(shù)據(jù)的內(nèi)部地址隨主器件不斷發(fā)出的時鐘增加而增加。如果地址到達1FFH,計數(shù)器回歸000H。讀首先讀MSB。在片選信號

的上升沿結(jié)束一次讀操作。圖9-18是存儲器讀的時序圖。54第54頁/共223頁圖9-18FM25040B的存儲器讀時序圖55第55頁/共223頁(8)總線掛起命令—HOLD引腳

用于中斷串行操作而不終止。若SCK=0,主器件將

拉低,則當(dāng)前操作暫停;若SCK=0,主器件將

拉高,則恢復(fù)操作。

必須在SCK=0時變化,而SCK則可在掛起狀態(tài)器件變化。FM25040B和AT89S52的接口 AT89S52沒有SPI接口,可以用普通I/O口模擬SPI口,如圖9-19所示。56第56頁/共223頁圖9-19AT89S52和FM25040B的接口57第57頁/共223頁589.38051的I/O接口擴展

9.3.1I/O接口的功能

8051擴展的I/O接口電路主要應(yīng)滿足以下幾項功能要求:1.實現(xiàn)和不同外設(shè)的速度匹配2.輸出數(shù)據(jù)鎖存和輸入數(shù)據(jù)三態(tài)緩沖3.CPU的負(fù)載能力和外圍設(shè)備端口選擇問題第58頁/共223頁599.3.2端口的編址1.獨立編址方式獨立編址就是把I/O地址空間和數(shù)據(jù)存儲器地址空間分開進行編址。2.統(tǒng)一編址方式這種編址方式是把I/O端口的寄存器與數(shù)據(jù)存儲器單元同等對待,統(tǒng)一進行編址。統(tǒng)一編址方式的優(yōu)點是不需要專門的I/O指令,直接使用訪問數(shù)據(jù)存儲器的指令進行I/O操作,簡單、方便且功能強。第59頁/共223頁608051單片機使用的是統(tǒng)一編址方式,即I/O和外部數(shù)據(jù)存儲器RAM是統(tǒng)一編址的,用戶可以把外部64K字節(jié)的數(shù)據(jù)存儲器RAM空間的一部分作為擴展的I/O接口的地址空間,每一個接口芯片中的一個功能寄存器(端口)的地址就相當(dāng)于一個RAM存儲單元,CPU可以象訪問外部存儲器RAM那樣訪問I/O接口芯片,對其功能寄存器進行讀、寫操作。第60頁/共223頁619.3.3I/O數(shù)據(jù)的幾種傳送方式1.無條件傳送

無條件傳送類似于單片機和外部數(shù)據(jù)存儲器之間的數(shù)據(jù)傳送,比較簡單。當(dāng)外設(shè)速度能和單片機的速度相比擬時,常常采用無條件傳送方式。另外,當(dāng)外設(shè)的工作速度非常慢,以致人們?nèi)魏螘r候都認(rèn)為它已處于“準(zhǔn)備好”的狀態(tài)時,也可以采用無條件傳送方式。第61頁/共223頁2.查詢狀態(tài)傳送查詢傳送方式下,單片機需要I/O接口為外設(shè)提供狀態(tài)和數(shù)據(jù)兩個端口,單片機通過狀態(tài)口查詢外設(shè)“準(zhǔn)備好”后就進行數(shù)據(jù)傳送。查詢式傳送的優(yōu)點是通用性好,硬件連線和查詢程序十分簡單,但是效率不是很高。為了提高單片機對外設(shè)的工作效率,通常采用中斷傳送I/O數(shù)據(jù)的方式。62第62頁/共223頁3.中斷傳送方式

中斷傳送方式是利用單片機本身的中斷功能和I/O接口的中斷功能來實現(xiàn)I/O數(shù)據(jù)的傳送。采用中斷方式可使單片機和外設(shè)并行工作。單片機只有在外設(shè)準(zhǔn)備好后才中斷主程序,而進入外設(shè)的中斷服務(wù)程序,中斷服務(wù)完成后又返回主程序繼續(xù)執(zhí)行。因此,采用中斷方式可以大大提高單片機的工作效率。63第63頁/共223頁649.3.4可編程并行I/O芯片8255A

8255A具有3個8位并行I/O口,稱為PA口、PB口和PC口。其中PC口又分為高4位和低4位,通過控制字設(shè)定可以選擇三種工作方式:①基本輸入/輸出;②選通輸入/輸出;③PA口為雙向總線。

第64頁/共223頁65D7~D0:三態(tài)雙向數(shù)據(jù)線,與單片機數(shù)據(jù)總線連接,用來傳送數(shù)據(jù)信息;:片選信號線,低電平有效,表示芯片被選中;:讀出信號線,低電平有效,控制數(shù)據(jù)的讀出;:寫入信號線,低電平有效,控制數(shù)據(jù)的寫入;VCC:+5V電源;PA7~PA0:A口輸入/輸出線;PB7~PB0:B口輸入/輸出線;PC7~PC0:C口輸入/輸出線;RESET:復(fù)位信號線。A1~A0:地址線,用來選擇8255A內(nèi)部端口。1.

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

第67頁/共223頁68(2)工作方式控制

工作方式控制電路有兩個,一個是A組控制電路,另一個是B組控制電路。這兩組控制電路共有一個控制命令寄存器,用來接收中央處理器發(fā)來的控制字。A組控制電路用來控制A口和C口的上半部分(PC7~PC4)。B組控制電路用來控制B口和C口的下半部分(PC3~PC0)。第68頁/共223頁69(3)總線數(shù)據(jù)緩沖器總線數(shù)據(jù)緩沖器是一個三態(tài)雙向8位緩沖器,作為8255A與系統(tǒng)總線之間的接口,用來傳送數(shù)據(jù)、指令、控制命令以及外部狀態(tài)信息。(4)讀/寫控制邏輯電路

讀/寫控制邏輯電路接收CPU發(fā)來的控制信號、、、RESET、地址信號A1~A0等,然后根據(jù)控制信號的要求,將端口數(shù)據(jù)讀出,送往CPU或?qū)PU送來的數(shù)據(jù)寫入端口。各端口的工作狀態(tài)與控制信號的關(guān)系如表9-6所示。第69頁/共223頁70A1A0工作狀態(tài)00010A口數(shù)據(jù)→數(shù)據(jù)總線(讀端口A)01010B口數(shù)據(jù)→數(shù)據(jù)總線(讀端口B)10010C口數(shù)據(jù)→數(shù)據(jù)總線(讀端口C)00100數(shù)據(jù)總線→A口(寫端口A)01100數(shù)據(jù)總線→B口(寫端口B)10100數(shù)據(jù)總線→C口(寫端口C)11100數(shù)據(jù)總線→控制字寄存器(寫控制字)××××1數(shù)據(jù)總線為三態(tài)11010非法狀態(tài)××110數(shù)據(jù)總線為三態(tài)表9-68255A端口工作狀態(tài)選擇表第70頁/共223頁718255A的工作方式(方式0,方式1,方式2)方式0:基本輸入/輸出方式這種方式不需選通信號。PA,PB和PC中任一端口都可以通過方式控制字設(shè)定為輸入或輸出。第71頁/共223頁方式1:選通輸入/輸出方式共有3個口,被分為兩組。A組包括A口和PC7~PC4,A口可由編程設(shè)定為輸入或輸出,PC7~PC4作為輸入/輸出操作的選通信號和應(yīng)答信號。B組包括B口和PC3~PC0,這時C口作為8255A和外設(shè)或CPU之間傳送某些狀態(tài)信息及中斷請求信號。

72第72頁/共223頁73方式2:雙向傳送方式。

只有A口有方式2,此時,A口為8位雙向傳送數(shù)據(jù)口,C口的高5位PC7~PC3用來作為指定A口輸入/輸出的控制聯(lián)絡(luò)線。第73頁/共223頁743.工作方式選擇控制字及C口置位/復(fù)位控制字(1)三種工作方式由寫入控制字寄存器的方式控制字來決定。方式控制字的格式如圖9-22所示。三個端口中C口被分為兩個部分,上半部分隨A口稱為A組,下半部分隨B口稱為B組。其中A口可工作于方式0,1和2,而B口只能工作在方式0和1。

例如,寫入工作方式控制字95H,可將8255A編程為:A口方式0輸入,B口方式1輸出,C口的上半部分(PC7~PC4)輸出,C口的下半部分(PC3~PC0)輸入。第74頁/共223頁75圖9-228255A的方式控制字第75頁/共223頁(2)C口8位中的任一位,可用一個寫入控制口的置位/復(fù)位控制字來對C口按位置“1”或清“0”。這個功能主要用于位控。C口按位置位/復(fù)位控制字的格式如圖9-23所示。

例如,07H寫入控制口,是PC3置1,08H寫入控制口,PC4清0。76第76頁/共223頁77圖9-23C口按位置位/復(fù)位控制字格式第77頁/共223頁4.8255A的三種工作方式:方式0、方式1、方式2(1)8255A方式0,是基本的輸入/輸出工作方式。在這種方式下,三個端口都可以由程序設(shè)置為輸入或者輸出,沒有固定的用于應(yīng)答的聯(lián)絡(luò)信號。方式0基本功能如下:具有兩個8位端口(A,B)和兩個4位端口(C口的上半部分和下半部分);任何一個端口都可以設(shè)定為輸入或者輸出。各端口的輸入、輸出可構(gòu)成16種組合;數(shù)據(jù)輸出時鎖存,輸入時不鎖存;78第78頁/共223頁8255A的A口、B口和C口均可設(shè)定為方式0,并可根據(jù)需要規(guī)定各端口為輸入方式或輸出方式。例如,設(shè)8255A的控制字寄存器地址為0FF7FH(見圖9-29),則令A(yù)口和C口高4位工作在方式0輸出以及B口和C口低4位工作于方式0輸入,初始化的程序為:MOVDPTR,#0FF7FH;控制字寄存器地址送DPTRMOVA,#83H ;方式控制字83H送(A)MOVX@DPTR,A ;83H送控制字寄存器。79第79頁/共223頁在方式0下,8051可對8255A進行I/O數(shù)據(jù)的無條件傳送,例如,讀一組開關(guān)的狀態(tài),控制一組指示燈的亮、滅。實現(xiàn)這些操作,并不需要應(yīng)答聯(lián)絡(luò)信號。外設(shè)的I/O數(shù)據(jù)可在8255A的各端口得到鎖存和緩沖,也可以把其中的某幾位指定為外設(shè)的狀態(tài)輸入位,CPU對狀態(tài)位查詢便可實現(xiàn)I/O數(shù)據(jù)的查詢方式傳送。因此,8255A的方式0屬于基本輸入/輸出方式。80第80頁/共223頁(2)8255A方式1,選通式輸入/輸出工作方式。A口和B口皆可獨立地設(shè)置成這種工作方式。在方式1下,8255A的A口和B口通常用于傳送和它們相連外設(shè)的I/O數(shù)據(jù),C口用作A口和B口的應(yīng)答聯(lián)絡(luò)線,以實現(xiàn)中斷方式傳送I/O數(shù)據(jù)。C口的PC7~PC0應(yīng)答聯(lián)絡(luò)線是在設(shè)計8255A時規(guī)定的,其各位分配見圖9-24和圖9-26,圖中,標(biāo)有I/O各位仍可用作基本輸入/輸出,不作應(yīng)答聯(lián)絡(luò)線用。81第81頁/共223頁1)方式1輸入當(dāng)任何一個端口按照工作方式1輸入時,應(yīng)答聯(lián)絡(luò)信號如圖9-24所示,各應(yīng)答聯(lián)絡(luò)信號的功能如下:

:選通輸入,低電平有效。是由輸入設(shè)備送來的輸入信號。IBF:輸入緩沖器滿,高電平有效。表示數(shù)據(jù)已送入輸入鎖存器,它由

信號的下降沿置位,由

信號的上升沿復(fù)位。INTR:中斷請求信號,高電平有效,由8255A輸出,向CPU發(fā)中斷請求。INTEA:口中斷允許信號,由PC4的置位/復(fù)位來控制,INTEB由PC2的置位/復(fù)位來控制。82第82頁/共223頁圖9-248255A方式1輸入聯(lián)絡(luò)信號83第83頁/共223頁圖9-25A口方式1輸入工作示意圖84每個信號的發(fā)出者和承受者弄清各信號之間的因果關(guān)系第84頁/共223頁85第85頁/共223頁下面以A口的方式1輸入為例(A口方式1輸入工作示意圖見圖9-25),介紹方式1輸入的工作過程以及各控制聯(lián)絡(luò)信號的功能。當(dāng)輸入設(shè)備輸入一個數(shù)據(jù)并送到PA7~PA0上時,輸入設(shè)備自動在選通輸入線

上發(fā)送一個低電平選通信號。8255A收到

上負(fù)脈沖后自動做兩件事:一是把PA7~PA0上輸入數(shù)據(jù)存入A口的輸入數(shù)據(jù)緩沖/鎖存器;二是使輸入緩沖器輸出線IBFA變?yōu)楦唠娖?,以通知輸入設(shè)備8255A的A口已收到它送來的輸入數(shù)據(jù)。8255A同時檢測到

變?yōu)楦唠娖?、IBFA為高電平時使INTRA變?yōu)楦唠娖?,向CPU發(fā)出中斷請求。CPU響應(yīng)中斷后,可以通過中斷服務(wù)程序從A口的“輸入數(shù)據(jù)緩沖/鎖存器”讀取輸入設(shè)備送來的輸入數(shù)據(jù)。當(dāng)輸入數(shù)據(jù)被CPU讀走后,8255A撤消INTRA上中斷請求,并使IBFA變?yōu)榈碗娖?,以通知輸入設(shè)備可以送下一個輸入數(shù)據(jù)。86第86頁/共223頁2)當(dāng)任何一個端口按照工作方式1輸出時,應(yīng)答聯(lián)絡(luò)信號如圖9-26所示,各聯(lián)絡(luò)信號的功能如下::輸出緩沖器滿信號,低電平有效,是8255A輸出給輸出設(shè)備的聯(lián)絡(luò)信號。表示CPU已把輸出數(shù)據(jù)送到指定端口,外設(shè)可以將數(shù)據(jù)取走。它由

信號的上升沿置“0”(有效),由

信號的下降沿置“1”(無效)。:外設(shè)響應(yīng)信號,低電平有效。表示CPU輸出給8255A的數(shù)據(jù)已由輸出設(shè)備取走。87第87頁/共223頁INTR:中斷請求信號,高電平有效。表示數(shù)據(jù)已被外設(shè)取走,請求CPU繼續(xù)輸出數(shù)據(jù)。中斷請求的條件是、

和INTE(中斷允許)為高電平,中斷請求信號由

的下降沿復(fù)位。INTEA:由PC6的置位/復(fù)位來控制。INTEB:由PC2的置位/復(fù)位來控制。圖9-27為B口工作于方式1輸出下的工作示意圖88第88頁/共223頁89圖9-26方式1輸出聯(lián)絡(luò)信號第89頁/共223頁90圖9-27方式1選通輸出示意圖第90頁/共223頁3)方式2只有A口才能設(shè)定。圖9-28為方式2下的工作過程示意圖。在方式2下,PA7~PA0為雙向I/O總線。當(dāng)作為輸入總線使用時,PA7~PA0受

和IBFA控制,其工作過程和方式1輸入時相同;當(dāng)作為輸出總線使用時,PA7~PA0受

控制,其工作過程和方式1輸出時相同。只適用于A口,且C口提供固定的聯(lián)絡(luò)信號;當(dāng)A口工作在方式2,B口可工作在方式0或1;C口沒有被指定為聯(lián)絡(luò)信號的其他位可以工作在方式0,可選擇輸入/輸出。91第91頁/共223頁圖9-28A口在方式2下的工作示意圖92第92頁/共223頁935.8051單片機和8255A的接口

圖9-29AT89S52與8255A接口電路第93頁/共223頁94例題1:要求8255A工作在方式0,且A口作為輸入,B口、C口作為輸出,則樣例程序如下:MOVA,#90H;A口方式0輸入,B口,C口輸出的方式控制;字→AMOVDPTR,#0FF7FH ;控制寄存器地址→DPTRMOVX@DPTR,A ;方式控制字→控制寄存器MOVDPTR,#0FF7CH ;A口地址→DPTRMOVXA,@DPTR ;從A口讀數(shù)據(jù)MOVDPTR,#0FF7DH;B口地址→DPTRMOVA,#DATA1;要輸出的數(shù)據(jù)DATA1→AMOVX@DPTR,A;將DATA1送B口輸出MOVDPTR,#0FF7EH;C口地址→DPTRMOVA,#DATA2 ;DATA2→AMOVX@DPTR,A;將DATA2送C口輸出第94頁/共223頁958255A的C口8位中的任一位,均可用指令來置位或復(fù)位。1)如果想把C口的PC5置1,相應(yīng)的控制字為00001011B=0BH,程序如下:MOVDPTR,#FF7FH;控制口地址→DPTRMOVA,#0BH ;控制字→AMOVX@DPTR,A ;控制字→控制口,PC5=12)如果想把C口的第6位PC5復(fù)位,相應(yīng)的控制字為00001010B=0AH,程序如下:MOVDPTR,#0FF7FH ;控制口地址→DPTRMOVA,#0AH ;控制字→AMOVX@DPTR,A ;控制字送到控制口PC5=0第95頁/共223頁96例題9-2:圖9-30是AT89S52擴展8255A與打印機接口的電路。8255A的片選線為P0.7,打印機與AT89S52采用查詢方式交換數(shù)據(jù)。打印機的狀態(tài)信號輸入給PC7,打印機忙時BUSY=1,打印機的數(shù)據(jù)輸入采用選通控制,當(dāng)出現(xiàn)負(fù)跳變時數(shù)據(jù)被打入,要求編寫向打印機輸出80個數(shù)據(jù)的程序。

設(shè)8255A的A、B、C和控制寄存器的口地址分別為:7CH、7DH、7EH和7FH。8255A的方式1中為低電平有效,而打印機要求下降沿選通。所以8255A采用方式0,由PC0模擬產(chǎn)生信號。因PC7輸入,PC0輸出,則方式選擇命令字為:10001110B=8EH。

第96頁/共223頁97圖9-30AT89S52擴展8255A與打印機接口的電路第97頁/共223頁98自內(nèi)部RAM20H單元開始向打印機輸出80個數(shù)據(jù)的程序如下:

MOVR0,#7FH ;R0指向控制口

MOVA,#8EH ;方式控制字為8EHMOVX@R0,A ;送方式控制字

MOVR1,#20H ;送內(nèi)部RAM數(shù)據(jù)塊首地址至指針R1MOVR2,#50H ;置數(shù)據(jù)塊長度

LP:MOVR0,#7EH ;R0指向C口

LP1:MOVXA,@R0 ;讀PC7連接BUSY狀態(tài)

JBACC.7,LP1 ;查詢等待打印機

MOVR0,#7CH ;指向A口

MOVA,@R1 ;取RAM數(shù)據(jù)

MOVX@R0,A ;數(shù)據(jù)輸出到8255A口鎖存

INCR1 ;RAM地址加1第98頁/共223頁99 MOVR0,#7FH ;R0指向控制口

MOVA,#00H ;PC復(fù)位控制字

MOVX@R0,A ;PC0=0,產(chǎn)生下降沿

MOVA,#01H ;PC0置位控制字

MOVX@R0,A ;PC0=1,產(chǎn)生上升沿

DJNZR2,LP ;未完,則反復(fù) ……第99頁/共223頁1009.3.5用串行口擴展并行I/O口

74LS165是8位并行置入移位寄存器,TXD(P3.1)作為移位脈沖輸出端與所有74LS165的移位脈沖輸入端CLK相連;RXD(P3.0)作為串行輸入端作74LS165的串行輸出端QH相連;P1.0用來控制74LS165的移位與置入而同相連;74LS165的時鐘禁止端(15腳)接地,表示允許時鐘輸入。當(dāng)擴展多個8位輸入口時,兩芯片的首尾(QH與SIN)相連。第100頁/共223頁101圖9-31利用串行口擴展輸入口第101頁/共223頁102下面的程序是從16位擴展口讀入5組數(shù)據(jù)(每組二個字節(jié)),并把它們轉(zhuǎn)存到內(nèi)部RAM20H開始的單元中。 MOVR7,#05H;設(shè)置讀入組數(shù) MOVR0,#20H;設(shè)置內(nèi)部RAM數(shù)據(jù)區(qū)首址START: CLRP1.0 ;并行置入數(shù)據(jù)=0 SETBP1.0 ;允許串行移位,=1 MOVR1,#02H;設(shè)置每組字節(jié)數(shù),即外擴;74LS165的個數(shù)RXDATA:MOVSCON,#00010000B ;設(shè)串行口方式0, ;允許接收 ;啟動接收過程第102頁/共223頁103WAIT:JNBRI,WAIT ;未接收完一幀,循環(huán)等待 CLRRI ;清RI標(biāo)志,準(zhǔn)備下次接收 MOVA,SBUF ;讀入數(shù)據(jù)

MOV@R0,A ;送至RAM緩沖區(qū)

INCR0 ;指向下一個地址

DJNZR1,RXDATA ;未讀完一組數(shù)據(jù),繼續(xù)

DJNZR7,START ;5組數(shù)據(jù)未讀完重新并行置入

……;對數(shù)據(jù)進行處理第103頁/共223頁1049.4鍵盤與顯示器接口

9.4.1鍵盤接口鍵盤實際上是由排列成矩陣形式的一系列按鍵開關(guān)組成,用戶通過鍵盤可以向CPU輸入數(shù)據(jù)、地址和命令。鍵盤按其結(jié)構(gòu)形式可分為:編碼式鍵盤和非編碼式鍵盤兩類。單片機系統(tǒng)中普遍使用非編碼式鍵盤,這類鍵盤主要解決以下幾個問題:①鍵的識別;②如何消除鍵的抖動;③鍵的保護。

第104頁/共223頁1051.非編碼式鍵盤工作原理非編碼式鍵盤識別按鍵的方法有兩種:一是行掃描法,二是線反轉(zhuǎn)法。1)行掃描法通過行線發(fā)出低電平信號,如果該行線所連接的鍵沒有按下的話,則列線所接的端口得到的是全“1“信號,如果有鍵按下的話,則得到非全“1“信號。為了防止雙鍵或多鍵同時按下,往往從第0行一直掃描到最后1行,若只發(fā)現(xiàn)1個閉合鍵,則為有效鍵,否則全部作廢。找到閉合鍵后,讀入相應(yīng)的鍵值,再轉(zhuǎn)至相應(yīng)的鍵處理程序。第105頁/共223頁1062)線反轉(zhuǎn)法線反轉(zhuǎn)法也是識別閉合鍵的一種常用方法,該法比行掃描速度快,但在硬件上要求行線與列線外接上拉電阻。先將行線作為輸出線,列線作為輸入線,行線輸出全“0”信號,讀入列線的值,然后將行線和列線的輸入輸出關(guān)系互換,并且將剛才讀到的列線值從列線所接的端口輸出,再讀取行線的輸入值。那么在閉合鍵所在的行線上值必為0。這樣,當(dāng)一個鍵被按下時,必定可讀到一對唯一的行列值。第106頁/共223頁107圖9-32

8255A擴展的I/O口組成的行列式鍵盤第107頁/共223頁108;鍵盤接口匯編語言子程序:若鍵閉合,鍵值存入(A)中,鍵值的計算公式是:鍵值=行首鍵號+列號;若無鍵閉合,則(A)=0FFHPA8255EQU7FFCH ;8255A的A口地址PB8255EQU7FFDH ;8255A的B口地址PC8255EQU7FFEH ;8255A的C口地址CC8255EQU7FFCH ;8255A的控制口地址KEY1:ACALLKS1 ;調(diào)用判斷有無鍵按下子程序 JNZLK1 ;有鍵按下時,(A)≠0轉(zhuǎn)消顫延時 AJMPKEY1 ;無鍵按下返回LK1: ACALLT12ms ;調(diào)12ms延時子程序 ACALLKS1 ;查有無鍵按下,若有則為鍵真實按 JNZ LK2 ;鍵按下(A)≠0轉(zhuǎn)逐列掃描 AJMPKEY1 ;不是鍵按下返回LK2: MOVR2,#0FEH ;首列掃描字入R2 MOV R4,#00H ;首列號入R4第108頁/共223頁109LK4: MOVDPTR,#PB8255 ;列掃描字送至8255PB口 MOVA,R2 MOVX@DPTR,A INCDPTR ;指向8255PC口 MOVXA,@DPTR ;8255PC口讀入行狀態(tài) JBACC.0,LONE ;第0行無鍵按下,轉(zhuǎn)查第1行 MOVA,#00H ;第0行有鍵按下,該行首鍵號 ;#00H→(A) AJMPLKP ;轉(zhuǎn)求鍵號LONE:JBACC.1,LTWO;第1行無鍵按下,轉(zhuǎn)查第2行 MOVA,#08H ;第1行有鍵按下,該行首鍵號 ;#08H→(A) AJMPLKP第109頁/共223頁110LTWO:JBACC.2,LTHR ;第2行無鍵按下,轉(zhuǎn)查第3行 MOVA,#10H ;第2行有鍵按下,該行首鍵號 ;#10H→(A) AJMPLKPLTHR:JBACC.3,NEXT ;第3行無鍵按下,改查下一列 MOVA,#18H ;第3行有鍵按下該行首鍵號 ;#18H→(A)LKP: ADDA,R4 ;求鍵號=行首鍵號+列號 PUSHACC ;鍵號進棧保護LK3: ACALLKS1 ;等待鍵釋放 JNZLK3 ;未釋放,等待 POPACC ;鍵釋放,鍵號→A RET ;鍵掃描結(jié)束,出口狀態(tài)(A)=鍵號第110頁/共223頁111NEXT:INCR4 ;指向下一列,列號加1 MOVA,R2 ;判斷8列掃描完沒有? JNBACC.7,KND ;8列掃描完,返回 RLA ;掃描字左移一位,轉(zhuǎn)變?yōu)橄乱涣袙呙枳諱OVR2,A ;掃描字入R2AJMPLK4 ;轉(zhuǎn)下一列掃KND: AJMPKEY1 ;判斷有沒有鍵按下第111頁/共223頁112;KS1為判鍵閉合的子程序,有鍵閉合時(A)≠0KS1:MOVDPTR,#PB8255 ;指向PB口MOVA,#00H ;全掃描字#0HMOVX@DPTR,A ;全掃描字入PB口INCDPTR ;指向PC口MOVXA,@DPTR ;讀入PC口行狀態(tài)CPLA ;變正邏輯,以高電平表示有鍵按下ANLA,#0FH ;屏蔽高4位 RET ;出口狀態(tài),(A)≠0時有鍵按;T12ms延時子程序,執(zhí)行一遍的時間約12msT12ms:MOVR7,#18H ;延遲12ms子程序TM: MOV R6,#0FFH DJNZR6,$ DJNZR7,TM RET 第112頁/共223頁1139.4.2七段式LED顯示器接口1.LED顯示器結(jié)構(gòu)與原理圖9-337段LED數(shù)碼顯示器第113頁/共223頁114代碼位D7D6D5D4D3D2D1D0顯示段dpgfedcba7段LED顯示器各段碼位的對應(yīng)關(guān)系如下:第114頁/共223頁115字型共陽極編碼共陰極編碼字型共陽極編碼共陰極編碼0C0H3FH990H6FH1F9H06HA88H77H2A4H5BHB83H7CH3B0H4FHCC6H39H499H66HDA1H5EH592H6DHE86H79H682H7DHF84H71H7F8H07H滅FFH00H880H7FH—BFH40H表9-7七段LED字形編碼表第115頁/共223頁1162.七段式LED顯示器接口電路圖9-32

8255A擴展的I/O口組成的行列式鍵盤顯示器接口電路第116頁/共223頁11789S52RAM中有6個顯示緩沖單元79H-7EH,分別存放6位顯示器的顯示數(shù)據(jù)。8255A的A口掃描輸出總有一位為高電平,8255A的B口輸出相應(yīng)位的顯示數(shù)據(jù)的段數(shù)據(jù),使某位顯示出一個字符,其余位為暗,依次改變A口輸出的高電平位及B口輸出對應(yīng)的段數(shù)據(jù),6位顯示器就顯示出緩沖器的顯示字符。顯示程序流程如右圖所示:圖9-34動態(tài)顯示匯編語言子程序流程圖第117頁/共223頁118和圖9-33對應(yīng)的動態(tài)顯示程序清單如下:

DIR:MOVR0,#79H ;顯示緩沖區(qū)首址送R0MOVR3,#01H ;使顯示器最右邊位亮MOVA,R3LD0:MOVDPTR,#7FFCH;掃描值送PA口 MOVX@DPTR,A INCDPTR ;指向PB口 MOVA,@R0 ;取顯示數(shù)據(jù) ADDA,#0DH ;加上偏移量第118頁/共223頁119MOVC A,@A+PC ;取出字形MOVX @DPTR,A ;送出顯示ACALL DL1 ;延時INCR0 ;緩沖區(qū)地址加1MOVA,R3JB ACC.5,LD1 ;掃到第6個顯示位了嗎?RL A ;沒有,R3左環(huán)移一位,掃描下一個顯示位MOVR3,AAJMPLD0LD1:RETRET第119頁/共223頁120;顯示段碼表DSEG0: DB3FH,06H,5BH,4FH,66H,6DHDSEG1: DB7DH,07H,7FH,6FH,77H,7CHDSEG2: DB39H,5EH,79H,71H,00H,73HDL1: MOVR7,#02H ;延時子程序DL: MOVR6,#0FFHDLA: DJNZR6,DLA DJNZR7,DL RET第120頁/共223頁1219.4.3LED點陣接口發(fā)光二極管點陣(LEDdotmatrix)用于顯示復(fù)雜的字符、圖形、漢字。通過單片機控制點陣的引腳來實現(xiàn)特定圓點的點亮。圖9-35發(fā)光二極管點陣

圖9-36LED點陣的顯示第121頁/共223頁1221.發(fā)光二極管點陣的結(jié)構(gòu)(a)共陽型(b)共陰型圖9-378×8發(fā)光二級管點陣內(nèi)部結(jié)構(gòu)圖第122頁/共223頁123設(shè)使用的是共陽型點陣,對字母T進行編碼,用高電平1代表點亮的LED,低電平0代表熄滅的,則可以得到字母T在“橫向上”的編碼,轉(zhuǎn)換成十六進制之后為0FFH、10H、10H、10H、10H、10H、10H和10H。這些編碼就是字母T的十六進制編碼,如果向LED點陣的P0口輸入0FFH并向P2.0口輸入低電平,則LED點陣上將顯示出圖9-38中字母T的最上一行數(shù)據(jù)。接著,向LED點陣的P0口輸入10H,而向P2.1口輸入低電平,則顯示的是圖9-38中字母T的第二行數(shù)據(jù)。按照這種方法,在LED點陣的P0口輸入數(shù)據(jù)的同時,在P2口的某一位輸入低電平,這樣掃描一遍之后就可以在點陣上看到字母T。第123頁/共223頁124

圖9-38共陽極顯示字母T的點陣示意圖第124頁/共223頁1252.單個8×8的LED點陣與單片機的連接圖9-39共陽型8×8發(fā)光二極管點陣與單片機的連接第125頁/共223頁1269.4.4字符LCD接口1.字符LCD液晶顯示屏(LCD)是智能儀器儀表、智能設(shè)備常用的另外一種顯示設(shè)備,消耗電流小,控制簡單,在便攜式儀器和設(shè)備如移動電話、計算器、臺式/筆記本計算機顯示器等場合得到廣泛應(yīng)用。字符LCD根據(jù)所能顯示的字符的個數(shù)多少而提供不同的器件以供開發(fā)時選用。第126頁/共223頁127

圖9-40為字符16×2液晶屏,16×2表示該LCD能顯示兩行字符,每行能顯示16個字符,包括英文大寫字母、小寫字母、標(biāo)點符號和常用符號等。圖9-4016×2的字符液晶屏第127頁/共223頁128字符液晶屏是由一個一個的小顯示點陣構(gòu)成的,如圖9-41所示,16×2字符液晶屏有32個小顯示點陣,分布成2行,每行16個,圖9-41顯示了字母J和S的小顯示點陣的放大圖。每一個小顯示點陣由5×7的點陣組成,小顯示點陣之間在顯示屏上有一定的距離,如果不留這一個小的空隙,那字符與字符之間會因為貼得太緊而影響美觀。第128頁/共223頁129圖9-4116×2字符液晶屏中的小顯示點陣第129頁/共223頁1302.單片機與字符LCD的硬件連接圖9-42字符液晶屏與單片機的接口電路圖第130頁/共223頁13116×2的字符LCD有16個引腳,其功能描述如下:VCC、VSS、Vee(第2、1、3引腳):電源端。VCC與VSS分別與+5V和GND相連,為LCD工作電源。Vee是LCD對比度調(diào)節(jié)引腳,其電位由一個電位器控制,調(diào)節(jié)電位器調(diào)整Vee引腳的電壓,從而調(diào)節(jié)了LCD的對比度。RS(第4引腳):命令/數(shù)據(jù)選擇線。當(dāng)RS=0時,從DB0~DB7進入LCD的信號為命令;當(dāng)RS=1時,從DB0~DB7進入LCD的信號為顯示數(shù)據(jù)。第131頁/共223頁132R/(第5引腳):讀/寫控制線。R/=0時,寫數(shù)據(jù);R/=1時,讀數(shù)據(jù)。E(第6引腳):LCD使能端。該引腳控制LCD從數(shù)據(jù)線上將數(shù)據(jù)讀入LCD。當(dāng)該引腳上的電位由1向0變化時,DB0~DB7的數(shù)據(jù)被讀入LCD。DB0~DB7(第7~14引腳):數(shù)據(jù)線。第132頁/共223頁133+LED、-LED(第15、16引腳):背光供電端。給+LED通過一個20~30Ω的電阻供+5V,-LED接GND,液晶屏的背光點亮,這樣在光線很暗的情況下也能看到液晶屏的顯示內(nèi)容。當(dāng)然,點亮背光會提高系統(tǒng)功耗。如果不需要背光可以將這兩個管腳懸空。圖9-43

LCD背光的控制方法第133頁/共223頁1343.“Hello,world!”—字符LCD的程序控制下面通過在16×2的LCD上顯示“Hello,world!”,學(xué)習(xí)字符LCD的程序控制方法。LCD的RS引腳是命令/數(shù)據(jù)選擇線,從DB0~DB7向LCD送入命令之前,需要將RS引腳接低電平,此時出現(xiàn)在DB0~DB7上的信號被當(dāng)成是命令。同時,R/引腳也接低電平,LCD接受命令的寫入。表9-8為字符液晶屏命令集。圖9-4416×2的LCD上顯示“Hello,world!”第134頁/共223頁13506H光標(biāo)右移光標(biāo)向右移動1位05H畫面右移顯示畫面向右移動07H畫面左移顯示畫面向左移動08H關(guān)閉顯示顯示、光標(biāo)、閃爍關(guān)閉0AH打開光標(biāo)只打開光標(biāo),顯示、閃爍關(guān)閉0CH打開顯示只打開顯示,光標(biāo)、閃爍關(guān)閉0EH光標(biāo)不閃爍打開光標(biāo),光標(biāo)不閃爍0FH光標(biāo)閃爍打開顯示和光標(biāo),光標(biāo)閃爍10H光標(biāo)位置左移光標(biāo)位置向左移動14H光標(biāo)位置右移光標(biāo)位置向右移動18H整個畫面左移整個顯示畫面左移1位1CH整個畫面右移整個顯示畫面右移1位80H光標(biāo)回到第1行開頭強制光標(biāo)回到第1行開頭C0H光標(biāo)回到第2行開頭強制光標(biāo)回到第2行開頭38H顯示設(shè)定設(shè)定顯示為2行,5×7點陣DB0~DB7命令命令解釋01H清屏清除液晶屏顯示的數(shù)據(jù)02H歸位光標(biāo)、畫面回到起始位置04H光標(biāo)左移光標(biāo)向左移動1位表9-8

字符液晶屏命令集第135頁/共223頁13616×2液晶屏系統(tǒng)顯示數(shù)據(jù)“H

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論