單片機(jī)應(yīng)用項(xiàng)目式教程-基于Keil和Proteus 第2版 思考和練習(xí)題答案匯總 第1-6章_第1頁
單片機(jī)應(yīng)用項(xiàng)目式教程-基于Keil和Proteus 第2版 思考和練習(xí)題答案匯總 第1-6章_第2頁
單片機(jī)應(yīng)用項(xiàng)目式教程-基于Keil和Proteus 第2版 思考和練習(xí)題答案匯總 第1-6章_第3頁
單片機(jī)應(yīng)用項(xiàng)目式教程-基于Keil和Proteus 第2版 思考和練習(xí)題答案匯總 第1-6章_第4頁
單片機(jī)應(yīng)用項(xiàng)目式教程-基于Keil和Proteus 第2版 思考和練習(xí)題答案匯總 第1-6章_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第1章思考和練習(xí)解答1.1什麼是單片機(jī)?答:參閱教材書P.1。1.2單片機(jī)應(yīng)用的主要領(lǐng)域有哪些?試舉出10個(gè)以上的應(yīng)用實(shí)例。答:參閱教材書任務(wù)1.11.380C51共有幾個(gè)8位并行I/O口?各有什么功能?其中P3口的第二功能是什么?答:參閱教材書P.21。1.4試述80C51存儲(chǔ)空間結(jié)構(gòu),各有什么功能?答:參閱教材書P.21~P.22。80C51存儲(chǔ)空間配置如圖2-1所示。圖圖2-180C51存儲(chǔ)空間配置圖(MOV指令操作域)(MOVX指令操作域)外部RAM(64KB)寄存器(21個(gè))內(nèi)部RAM(128B)RAM地址空間FFFFH0000H…FFH80H7FH00H……ROM地址空間(MOVC指令操作域)內(nèi)部ROM(4KB)=1外部ROM(4KB)=0外部ROM(60KB)FFFFH1000H0FFFH0000H……0FFFH0000H…從組織結(jié)構(gòu)上可以分為3個(gè)不同的存儲(chǔ)空間,分別是:⑴64KB程序存儲(chǔ)器(ROM),包括片內(nèi)ROM和片外ROM;⑵64KB外部數(shù)據(jù)存儲(chǔ)器(稱為外RAM);⑶256B(包括特殊功能寄存器)內(nèi)部數(shù)據(jù)存儲(chǔ)器(稱為內(nèi)RAM)。3個(gè)不同的存儲(chǔ)空間用不同的指令和控制信號(hào)實(shí)現(xiàn)讀、寫功能操作:⑴ROM空間用MOVC指令實(shí)現(xiàn)只讀功能操作,用信號(hào)選通讀外ROM。⑵外RAM空間用MOVX指令實(shí)現(xiàn)讀寫功能操作,用信號(hào)選通讀外RAM,用信號(hào)選通寫外RAM。⑶內(nèi)RAM(包括特殊功能寄存器)用MOV指令實(shí)現(xiàn)讀、寫功能操作。1.580C51內(nèi)RAM的組成是如何劃分的,各有什么功能?答:從廣義上講,80C51內(nèi)RAM(128B)和特殊功能寄存器(128B)均屬于片內(nèi)RAM空間,讀寫指令均用MOV指令。但為加以區(qū)別,內(nèi)RAM通常指00H~7FH的低128B空間。80C51內(nèi)RAM可以分成三個(gè)物理空間:工作寄存器區(qū)、位尋址區(qū)和數(shù)據(jù)緩沖區(qū)。參閱教材書P.22。1.6簡述程序狀態(tài)字寄存器PSW各位定義名、位編號(hào)和功能作用。答:參見教材書P.24。1.7在計(jì)算機(jī)中為什么要用二進(jìn)制數(shù)和十六進(jìn)制數(shù)?答:參閱教材書P.34。1.8在8位計(jì)算機(jī)中,數(shù)的正負(fù)號(hào)如何表示?答:在計(jì)算機(jī)中,數(shù)的正負(fù)在最高位分別用“0”和“1”表示。對(duì)于8位有符號(hào)數(shù),微型計(jì)算機(jī)中約定,最高位D7表示正負(fù)號(hào),其他7位表示數(shù)值,D7=1表示負(fù)數(shù),D7=0表示正數(shù)。1.9試在KeilμVsion創(chuàng)建一個(gè)新項(xiàng)目key_ctr1,設(shè)置單片機(jī)工作頻率fOSC=6MHz,需生成可執(zhí)行Hex文件,輸入如下源程序,并添加到目標(biāo)項(xiàng)目組,存盤。答:參閱教材書任務(wù)2.1、任務(wù)2.2。1.10試重新打開題1.9創(chuàng)建項(xiàng)目key_ctr1,編譯鏈接調(diào)試,并用全速運(yùn)行、單步結(jié)合過程單步運(yùn)行和斷點(diǎn)運(yùn)行3種操作方法,觀測運(yùn)行過程和結(jié)果(提示:全速運(yùn)行時(shí),為便于觀測,調(diào)用延時(shí)子函數(shù)delay1實(shí)參可修改為110000)。答:參閱教材書任務(wù)2.3。1.11試在已經(jīng)畫好的圖1-30所示ProteusISIS虛擬電路中,裝入題1.9調(diào)試后自動(dòng)生成的Hex文件,并仿真運(yùn)行,觀測運(yùn)行過程和結(jié)果。答:參閱教材書任務(wù)3.2、任務(wù)3.3。第2章思考和練習(xí)解答參閱本書P.34。2.1C51編程與80C51匯編語言相比,主要有什麼優(yōu)勢?答:C51編程與80C51匯編語言相比,主要的優(yōu)勢是編程相對(duì)方便。具體如下:=1\*GB2⑴C51軟件編程不需過多關(guān)注具體的存儲(chǔ)單元。用匯編語言編程,幾乎每一條指令(除NOP指令)操作都與具體的存儲(chǔ)單元有關(guān),80C51單片機(jī)的片內(nèi)存儲(chǔ)空間容量有限,編程之初即需安排好片內(nèi)存儲(chǔ)單元的用途,且一般不能重復(fù)使用。當(dāng)一些應(yīng)用項(xiàng)目較大時(shí),片內(nèi)存儲(chǔ)單元有可能捉襟見肘,稍有不慎就將出錯(cuò)。因此,編程時(shí),不但要注意用哪一條指令正確操作,而且要注意指令在哪一個(gè)存儲(chǔ)單元操作,編程相對(duì)復(fù)雜。而C51編程能自動(dòng)完成變量存儲(chǔ)單元的分配和使用,且對(duì)函數(shù)內(nèi)局部變量占用的存儲(chǔ)單元,僅在調(diào)用時(shí)臨時(shí)分配,使用完畢即行釋放,大大提高了片內(nèi)有限存儲(chǔ)空間的利用效率。使用者只需專注于軟件編程,不需過多關(guān)注具體的存儲(chǔ)單元及其操作指令。因此,編程相對(duì)方便。=2\*GB2⑵便于實(shí)現(xiàn)各種復(fù)雜的運(yùn)算和程序。C語言有豐富且功能強(qiáng)大的運(yùn)算符,能以簡單的語句方便地實(shí)現(xiàn)各種復(fù)雜的運(yùn)算和程序。相比之下,匯編語言要實(shí)現(xiàn)較復(fù)雜的運(yùn)算和程序,就比較困難。例如,雙字節(jié)的乘除法,匯編語言要用許多條指令操作才能完成;而C51只需一條語句便能實(shí)現(xiàn)。又例如,循環(huán)、查表和散轉(zhuǎn)等程序,C51語句實(shí)現(xiàn)起來也相對(duì)簡單方便。=3\*GB2⑶可方便地調(diào)用各已有程序模塊。已有程序模塊包括C51編譯器中豐富的庫函數(shù)、用戶自編的常用接口芯片功能函數(shù)和以前已開發(fā)項(xiàng)目中的功能函數(shù)。讀者可能會(huì)說,匯編程序不也一樣可以調(diào)用嗎?不一樣。匯編程序調(diào)用時(shí),涉及到模塊中具體的存儲(chǔ)單元,這些存儲(chǔ)單元很可能與主調(diào)用程序有重復(fù),會(huì)引起沖突而出錯(cuò)。而C51程序函數(shù)中的變量一般為局部變量,主函數(shù)調(diào)用前不占用存儲(chǔ)單元,僅在調(diào)用時(shí)由C51編譯器根據(jù)空余情況臨時(shí)分配,使用完畢即行釋放,因而一般不會(huì)發(fā)生沖突而出錯(cuò)。因此,C51程序可方便地調(diào)用各已有程序模塊,減少重復(fù)勞動(dòng),大大提高編程效率。=4\*GB2⑷編譯生成的代碼效率比匯編語言低一些;實(shí)時(shí)時(shí)效不如匯編語言快捷;一條C語言指令編譯后,會(huì)轉(zhuǎn)換成很多機(jī)器碼,占用單片機(jī)片內(nèi)資源較多。2.2C51基本數(shù)據(jù)類型有哪幾種?其數(shù)據(jù)長度為多少?答:參閱教材書基礎(chǔ)知識(shí)4.1,圖2-32.3C51標(biāo)識(shí)符命名有何要求?答:在C51程序中,數(shù)據(jù)、變量和函數(shù)等常用標(biāo)識(shí)符表示。實(shí)際上,標(biāo)識(shí)符就是一個(gè)代號(hào)或名字。C51規(guī)定:=1\*GB2⑴標(biāo)識(shí)符只能由字母、數(shù)字和下劃線三種字符組成,且須以字母或下劃線開頭。=2\*GB2⑵標(biāo)識(shí)符不能與“關(guān)鍵詞”同名。=3\*GB2⑶英文字母區(qū)分大小寫。即標(biāo)識(shí)符中的英文字母大小寫不能通用。2.4怎樣理解變量的存儲(chǔ)器類型和編譯模式?答:存儲(chǔ)器類型和編譯模式是確定變量存放在那一存儲(chǔ)區(qū)域,不同的存儲(chǔ)區(qū)域與訪問速度有關(guān)。存儲(chǔ)器類型是在變量定義時(shí)確定,而未定義存儲(chǔ)器類型的變量由編譯模式默認(rèn)。存儲(chǔ)種類與變量存放在那一存儲(chǔ)區(qū)域基本無關(guān)(除寄存器類變量),與變量值的生存期和作用范圍有關(guān)。中、小型程序一般可采用默認(rèn)的存儲(chǔ)種類auto。變量的存儲(chǔ)種類與變量的存儲(chǔ)器類型、編譯模式是兩個(gè)完全不同的概念,不能混淆。2.5為什么變量要盡量使用無符號(hào)字符型格式?答:C51變量的基本數(shù)據(jù)類型主要有字符型char、整型int和長整型long,又可分別分為有符號(hào)signed和無符號(hào)unsigned。80C51是8位機(jī),本身并不支持有符號(hào)運(yùn)算。若變量使用有符號(hào)格式,C51編譯器要進(jìn)行符號(hào)位檢測并需調(diào)用庫函數(shù),生成的代碼比無符號(hào)時(shí)長得多,占用的存儲(chǔ)空間會(huì)變大,程序運(yùn)行速度會(huì)變慢,出錯(cuò)的機(jī)會(huì)也會(huì)增多。80C51單片機(jī)主要用于實(shí)時(shí)控制,變量一般為8bit無符號(hào)格式,16bit較少,有符號(hào)和有小數(shù)點(diǎn)的數(shù)值計(jì)算也很少。因此,在已知變量長度和正整數(shù)的情況下,應(yīng)盡量采用無符號(hào)格式:unsignedchar。2.6為什么變量要盡量使用局部變量?答:與80C51匯編語言相比,C51編程的突出優(yōu)點(diǎn)是能自動(dòng)完成變量存儲(chǔ)單元的分配和使用,對(duì)函數(shù)內(nèi)局部變量占用的存儲(chǔ)單元,僅在調(diào)用時(shí)臨時(shí)分配,使用完畢即行釋放,大大提高了片內(nèi)有限存儲(chǔ)空間的利用效率。使用者只需專注于軟件編程,不需過多關(guān)注具體的存儲(chǔ)單元及其操作指令。因此,編程相對(duì)方便。使用全局變量的缺點(diǎn):一是始終占用一個(gè)固定的存儲(chǔ)單元,降低了內(nèi)部存儲(chǔ)單元的利用率;二是降低了函數(shù)的通用性。若函數(shù)涉及某一全局變量,該函數(shù)移植到其他文件時(shí)需同時(shí)將全局變量一起移植。否則,若全局變量名與其他文件中的變量同名,就會(huì)出現(xiàn)問題。三是過多使用全局變量,降低了程序的清晰度。若程序較大,人們較難清晰地判斷程序執(zhí)行過程中每個(gè)瞬間全局變量的變化狀況,易出錯(cuò)。因此,應(yīng)盡量減少全局變量的使用,能不用就盡量不用。2.7for循環(huán)語句括號(hào)內(nèi)3個(gè)表達(dá)式分別表示什麼含義?能否缺位?答:第一個(gè)表達(dá)式是循環(huán)變量初值,第二個(gè)表達(dá)式是循環(huán)終止條件,第三個(gè)表達(dá)式是循環(huán)變量更新。3個(gè)表達(dá)式之間必須用分號(hào)“;”分隔,允許有一個(gè)或多個(gè)缺位。2.8while(1)和for(;;)表示什麼含義?答:while(1)和for(;;)均表示一個(gè)循環(huán)條件始終滿足的無限循環(huán)。若后面有循環(huán)體語句,則反復(fù)無限執(zhí)行循環(huán)體語句;若后面無循環(huán)體語句,則表示程序在原地踏步。2.9什麼是數(shù)組?如何定義和表示?答:數(shù)組是一組具有相同類型數(shù)據(jù)的有序集合。例如:inta[10]={10,11,22,33,44,55,66,77,88,99};上式表示:數(shù)組名為a,數(shù)組內(nèi)的數(shù)據(jù)類型為int,元素個(gè)數(shù)(也稱為數(shù)組長度,即數(shù)組內(nèi)數(shù)據(jù)的個(gè)數(shù))有10個(gè)。10個(gè)數(shù)組元素分別為:a[0]=10,a[1]=11,a[2]=22,a[3]=33,a[4]=44,a[5]=55,a[6]=66,a[7]=77,a[8]=88,a[9]=99。需要注意的是,數(shù)組定義時(shí),方括號(hào)內(nèi)是數(shù)組元素個(gè)數(shù);數(shù)組元素引用時(shí),方括號(hào)內(nèi)是數(shù)組元素的序號(hào)。而且,數(shù)組元素序號(hào)是從0開始編號(hào)的。因此,上述數(shù)組a[10]中沒有a[10]這個(gè)數(shù)組元素,其最后一個(gè)數(shù)組元素是a[9]。2.10函數(shù)參數(shù)傳遞,值傳遞與地址傳遞有什麼不同?答:函數(shù)的實(shí)參傳遞給形參,稱為值傳遞。值傳遞是單向的,即不會(huì)影響主調(diào)用函數(shù)中實(shí)參值的變化。指針變量或數(shù)組作為實(shí)參傳遞給形參時(shí),是將一個(gè)變量的地址傳送到另一個(gè)函數(shù)中去,稱為地址傳遞,其結(jié)果具有雙向性。若在被調(diào)用函數(shù)中該地址存儲(chǔ)單元中的內(nèi)容發(fā)生了變化,在調(diào)用結(jié)束后這些變化將被保留下來,即其結(jié)果會(huì)被返回到主調(diào)用函數(shù)。2.11已知雙鍵控3燈電路如圖2-11所示,要求實(shí)現(xiàn):=1\*GB3①S0單獨(dú)按下,紅燈亮,其余燈滅;=2\*GB3②S1單獨(dú)按下,綠燈亮,其余燈滅;=3\*GB3③S0、S1均未按下,黃燈亮,其余燈滅;=4\*GB3④S0、S1均按下,紅綠黃燈全亮。試按任務(wù)4.1中3種形式編寫C51程序,畫出ProteusISIS虛擬電路,并仿真調(diào)試。解:=1\*GB2⑴if-else語句=2\*GB2⑵if語句嵌套=3\*GB2⑶switch語句2.12求:sum=1+3+5+…+99。試用“while循環(huán)”編寫、輸入源程序并調(diào)試運(yùn)行。解:2.13求:sum=2+4+6+…+100。試用“do-while循環(huán)”編寫、輸入源程序并調(diào)試運(yùn)行。解:2.14求:sum=1!+2!+…+10!。試用“for循環(huán)”編寫、輸入源程序并調(diào)試運(yùn)行。解:2.15電路如圖2-5所示,按以下要求亮燈循環(huán),間隔約1秒,試編寫程序,并仿真調(diào)試。=1\*GB3①從兩邊到中心依次點(diǎn)亮,每次增加2個(gè),直至全亮;=2\*GB3②從兩邊到中心依次暗滅,每次減少2個(gè),直至全暗;=3\*GB3③重復(fù)上述過程,不斷循環(huán)重復(fù)。解:2.16電路和亮燈循環(huán)同上題,要求用指針指向并輸出數(shù)組元素,試編寫程序,并仿真調(diào)試。=1\*GB3①從兩邊到中心依次點(diǎn)亮,每次增加2個(gè),直至全亮;=2\*GB3②從兩邊到中心依次暗滅,每次減少2個(gè),直至全暗;=3\*GB3③重復(fù)上述過程,不斷循環(huán)重復(fù)。解:2.17電路如圖2-5所示,按以下要求亮燈循環(huán),間隔約0.5秒,試編寫程序,并仿真調(diào)試。=1\*GB3①從上至下依次點(diǎn)亮,點(diǎn)亮燈先閃爍3次,后保持點(diǎn)亮,直至全亮;=2\*GB3②全亮全暗閃爍3次;=3\*GB3③重復(fù)上述過程,不斷循環(huán)重復(fù)。解:2.18電路如圖2-5所示,按以下要求亮燈循環(huán),間隔約0.5秒,試編寫程序,并仿真調(diào)試。=1\*GB3①全亮,保持2秒;=2\*GB3②從上至下依次暗滅,暗滅燈先閃爍3次,后保持暗滅,直至全暗;=3\*GB3③全暗,保持2秒;=4\*GB3④重復(fù)上述過程,不斷循環(huán)重復(fù)。解:第3章思考和練習(xí)解答3.1什么叫中斷?為什么要設(shè)置中斷?答:CPU暫時(shí)中止其正在執(zhí)行的程序,轉(zhuǎn)去執(zhí)行請求中斷的那個(gè)外設(shè)或事件的服務(wù)程序,等處理完畢后再返回執(zhí)行原來中止的程序,叫做中斷。設(shè)置中斷的優(yōu)點(diǎn)和功能:=1\*GB2⑴可以提高CPU工作效率,CPU不必花費(fèi)大量時(shí)間等待和查詢外設(shè)工作。=2\*GB2⑵具有實(shí)時(shí)處理功能,對(duì)實(shí)時(shí)控制系統(tǒng)中的各種參數(shù)和狀態(tài)做出快速響應(yīng)、及時(shí)處理。=3\*GB2⑶具有故障處理功能,在掉電中斷服務(wù)程序中將需要保存的數(shù)據(jù)和信息及時(shí)轉(zhuǎn)移到具有備用電源的存儲(chǔ)器中保護(hù)起來,待電源正常時(shí)再恢復(fù)。=4\*GB2⑷實(shí)現(xiàn)分時(shí)操作,控制多個(gè)外設(shè)同時(shí)工作。此外,中斷系統(tǒng)還能用于程序調(diào)試、多機(jī)連接等方面。因此,中斷系統(tǒng)是計(jì)算機(jī)中重要的組成部分??梢哉f,只有有了中斷系統(tǒng)后,計(jì)算機(jī)才能比原來無中斷系統(tǒng)的早期計(jì)算機(jī)演繹出多姿多彩的功能。3.280C51有幾個(gè)中斷源?答:參閱教材書P.85。增強(qiáng)型80C51單片機(jī),例如,80C52系列單片機(jī)增加了一個(gè)定時(shí)/計(jì)數(shù)器,有6個(gè)中斷源。3.3涉及80C51單片機(jī)中斷控制的有哪幾個(gè)特殊功能寄存器?各有什么作用?答:參閱教材書P.85、P.86、P.87。3.480C51中斷優(yōu)先控制,有什么基本原則?答:參閱教材書P.90。3.5中斷初始化包括哪些內(nèi)容?答:中斷初始化內(nèi)容包括:設(shè)置堆棧指針SP、定義中斷優(yōu)先級(jí)、定義外中斷觸發(fā)方式、開放中斷和中斷發(fā)生前主程序應(yīng)完成的操作內(nèi)容。3.680C51定時(shí)/計(jì)數(shù)器在什么情況下是定時(shí)器?什么情況下是計(jì)數(shù)器?答:80C51定時(shí)/計(jì)數(shù)器歸根到底是一個(gè)計(jì)數(shù)器,基本功能是加1。對(duì)外部事件脈沖(T0必須從P3.4輸入、T1必須從P3.5輸入)計(jì)數(shù),是計(jì)數(shù)器;對(duì)片內(nèi)機(jī)周脈沖計(jì)數(shù),是定時(shí)器。因?yàn)槠瑑?nèi)機(jī)周脈沖頻率是固定的,是fOSC的1/12。若fOSC=12MHz,1機(jī)周為1s;若fOSC=6MHz,1機(jī)周為2s,機(jī)周脈沖時(shí)間乘以機(jī)周數(shù)就是定時(shí)時(shí)間。3.780C51定時(shí)/計(jì)數(shù)器有哪幾種工作方式?各有什麼特點(diǎn)?答:80C51定時(shí)/計(jì)數(shù)器有四種工作方式,由TMOD中M1M0的狀態(tài)確定。①方式0是13位計(jì)數(shù)器,最大計(jì)數(shù)值213=8192,計(jì)數(shù)范圍比方式1小,計(jì)算定時(shí)初值比較麻煩,容易出錯(cuò)。②方式1是16位計(jì)數(shù)器,最大計(jì)數(shù)值為216=65536,計(jì)數(shù)范圍大,適用于定時(shí)范圍較大的應(yīng)用場合。=3\*GB3③方式2是8位計(jì)數(shù)器,最大計(jì)數(shù)值為28=256,缺點(diǎn)是計(jì)數(shù)范圍小,優(yōu)點(diǎn)是定時(shí)初值可自動(dòng)恢復(fù),適用于需要重復(fù)定時(shí),而定時(shí)范圍不大的應(yīng)用場合。=4\*GB3④方式3是8位計(jì)數(shù)器,僅適用于T0,T1無方式3。T0方式3時(shí),被拆成二個(gè)獨(dú)立的8位計(jì)數(shù)器TH0、TL0:TL0使用T0原有的控制寄存器資源組成一個(gè)8位的定時(shí)/計(jì)數(shù)器;TH0借用T1的TF1、TR1,只能對(duì)機(jī)內(nèi)機(jī)周脈沖計(jì)數(shù),組成另一個(gè)8位定時(shí)器。T0方式3時(shí)通常T1方式2用作串行口波特率發(fā)生器。3.880C51定時(shí)/計(jì)數(shù)器,當(dāng)fOSC=6MHz和fOSC=12MHz時(shí),最大定時(shí)各為多少?答:fOSC=6MHz時(shí),最大定時(shí)131.072ms(方式1);fOSC=12MHz時(shí),最大定時(shí)65.536ms(方式1)。3.9定時(shí)/計(jì)數(shù)器初始化應(yīng)設(shè)置哪些參數(shù)?答:⑴設(shè)置TMOD。TMOD用于選擇定時(shí)器或計(jì)數(shù)器、選擇T0或T1、選擇工作方式、選擇門控位是否參與定時(shí)/計(jì)數(shù)器控制,應(yīng)根據(jù)程序要求,合理選擇。一般來講,定時(shí)時(shí)間長,用方式1(盡量不用方式0);定時(shí)時(shí)間短(≤255機(jī)周)且需重復(fù)使用自動(dòng)恢復(fù)定時(shí)初值,用方式2;串行通信波特率,用T1方式2。⑵設(shè)置定時(shí)/計(jì)數(shù)器定時(shí)初值:T初值=2N-其中,N與工作方式有關(guān)。方式0時(shí),N=13;方式1時(shí),N=16;方式2時(shí),N=8;方式3時(shí),N=8。⑶若定時(shí)/計(jì)數(shù)器采用中斷方式,應(yīng)設(shè)置中斷參數(shù):堆棧指針SP、中斷允許控制IE、中斷優(yōu)先級(jí)控制IP以及安排好等待中斷或中斷發(fā)生前主程序應(yīng)完成的操作內(nèi)容。=4\*GB2⑷最后,啟動(dòng)定時(shí)/計(jì)數(shù)器開始運(yùn)行。3.10已知P1.0端口接一個(gè)發(fā)光二極管,要求定時(shí)控制該發(fā)光二極管閃爍(亮暗各0.5秒)。解:可設(shè)置T0工作方式1,定時(shí)50ms,計(jì)數(shù)10次為0.5秒。定時(shí)初值計(jì)算:T0初值=216-50000s/1s=65536–50000=15536=3CB0H3.11已知fOSC=12MHZ,要求在80C51P1.0、P1.1、P1.2和P1.3引腳分別輸出周期為500s、1ms、5ms和10ms的脈沖方波,試編制程序,畫出ProteusISIS虛擬電路,并仿真調(diào)試。解:采用T1工作方式2,定時(shí)250s,正好是500s方波脈寬,再對(duì)250s計(jì)數(shù),可得1ms、5ms和10ms的方波脈寬,計(jì)數(shù)值分別為2、10和20。定時(shí)初值計(jì)算:T1初值=28-250s/1s=256–250=6。因此,TH1=TL1=06HC51程序如下:KeilC51軟件調(diào)試:編譯(匯編程序擴(kuò)展名用.asm,C51程序擴(kuò)展名用.c)連接并進(jìn)入調(diào)試狀態(tài)后,打開P1對(duì)話窗口,全速運(yùn)行,可看到P1對(duì)話窗口中的P1.0~P1.3端口狀態(tài)不斷跳變,從“√”到空白,再從空白到“√”,適當(dāng)加大定時(shí)脈沖寬度,可更清晰觀察。3.12已知fOSC=6MHz,要求80C51P1.7輸出如圖3-14所示連續(xù)矩形脈沖。40m40ms 360ms圖3-14連續(xù)矩形脈沖波解:根據(jù)題目要求,設(shè)將T0用作定時(shí)器方式1,定時(shí)40ms。TMOD=00000001BT0初值=216-40000s/2s=65536–20000=45536=B1E0HC51編程如下:3.13樂曲播放電路如圖3-5所示,世上只有媽媽好曲譜如圖3-15所示,設(shè)fOSC=12MHz,試編制該歌曲程序,并仿真調(diào)試。圖圖3-15世上只有媽媽好歌譜 解:分析任務(wù)9.1程序,不難看到,只要編制音符序號(hào)數(shù)組s[]和音符節(jié)拍長度數(shù)組L[],同時(shí)修改音符節(jié)拍循環(huán)的中止條件(音符總數(shù)),即可實(shí)現(xiàn)播放新的樂曲。全速運(yùn)行后,鼠標(biāo)左鍵單擊K0(不鎖定),可聽到播放世上只有媽媽好歌。播完后,再次單擊K0,再次播放。C51編程如下:第4章思考和練習(xí)解答4.1什么叫串行通信和并行通信?各有什么特點(diǎn)?答:通信的基本方式可分為并行通信和串行通信:并行通信是數(shù)據(jù)的每位同時(shí)發(fā)送或同時(shí)接收;串行通信是數(shù)據(jù)的各位依次逐位發(fā)送或接收。8位數(shù)據(jù)并行傳送,至少需要8條數(shù)據(jù)線和一條公共線,有時(shí)還需要狀態(tài)、應(yīng)答等控制線。長距離傳送時(shí),價(jià)格較貴且不方便,優(yōu)點(diǎn)是傳送速度快。串行通信只需要一到兩根數(shù)據(jù)線,長距離傳送時(shí),比較經(jīng)濟(jì),但由于每次只能傳送一位,傳送速度較慢,隨著通信信號(hào)頻率的提高,傳送速度較慢的矛盾已逐漸緩解。4.2串行緩沖寄存器SBUF有什么作用?簡述串行口接收和發(fā)送數(shù)據(jù)的過程。答:串行緩沖寄存器SBUF有兩個(gè):一個(gè)是串行發(fā)送緩沖寄存器,另一個(gè)是串行接收緩沖寄存器,用同一特殊功能寄存器名SBUF和同一單元地址99H。接收緩沖寄存器還具有雙緩沖結(jié)構(gòu),以避免在數(shù)據(jù)接收過程中出現(xiàn)幀重疊錯(cuò)誤。在完成串行初始化后,發(fā)送時(shí)只需將發(fā)送數(shù)據(jù)輸入SBUF,CPU將自動(dòng)啟動(dòng)和完成串行數(shù)據(jù)的發(fā)送;接收時(shí)CPU將自動(dòng)把接收到的數(shù)據(jù)存入SBUF,用戶只需從SBUF中讀取接收數(shù)據(jù)。4.3如何判斷串行發(fā)送和接收一幀數(shù)據(jù)完畢?答:串行發(fā)送一幀數(shù)據(jù)完畢,CPU會(huì)將串行控制寄存器SCON中的發(fā)送中斷標(biāo)志TI自動(dòng)置“1”,用戶可軟件查詢TI位標(biāo)志,也可以請求中斷。串行接收一幀數(shù)據(jù)完畢,CPU會(huì)將串行控制寄存器SCON中的接收中斷標(biāo)志RI自動(dòng)置“1”,用戶可軟件查詢RI位標(biāo)志,也可以請求中斷。需要說明的是,TI/RI必須由軟件清0。4.4什么叫波特率?串行通信對(duì)波特率有什么基本要求?80C51單片機(jī)串行通信4種工作方式的波特率有什么不同?答:波特率是串行通信傳輸數(shù)據(jù)的速率。定義為每秒傳輸?shù)臄?shù)據(jù)位數(shù),即:1波特=1位/秒(1bps)串行通信對(duì)波特率的基本要求是互相通信的甲乙雙方必須具有相同的波特率。80C51單片機(jī)串行通信4種工作方式的波特率:方式0波特率固定為fOSC/12;方式1波特率可變:T1溢出率/n(n=32或16);方式2波特率固定:fOSC/n(n=64或32);方式3波特率可變:T1溢出率/n(n=32或16)。4.5為什么80C51單片機(jī)串行通信時(shí)常采用11.0592MHz晶振?答:采用11.0592MHz晶振,能得到波特率1200、2400、4800、9600、…等規(guī)范整數(shù)值。因?yàn)槿舨捎镁д?2MHz和6MHz等整數(shù)值,按80C51計(jì)算T1定時(shí)初值的公式,反而不是一個(gè)規(guī)范整數(shù)值,雙方通信時(shí)會(huì)產(chǎn)生波特率誤差而影響串行通信的同步性能。4.6I2C總線只有二根連線(數(shù)據(jù)線和時(shí)鐘線),如何識(shí)別擴(kuò)展器件的地址?又如何識(shí)別相同器件的地址?答:具有I2C總線結(jié)構(gòu)的器件在器件出廠時(shí)已經(jīng)給定了這類器件的地址編碼。另外,I2C總線器件還有3位引腳地址A2A1A0,可用硬件連接方式對(duì)3位引腳接VCC或接地,形成相同器件地址數(shù)據(jù),如教材書圖4-20所示。4.7為什么80C51單片機(jī)I2C總線串行擴(kuò)展只能用于單主系統(tǒng),且必須虛擬擴(kuò)展?答:由于80C51芯片內(nèi)部無I2C總線接口,因此只能采用虛擬I2C總線方式擴(kuò)展,并且只能用于單主系統(tǒng),即80C51只能作為I2C總線主器件,不能作為從器件,從器件必須具有I2C總線接口,因此,80C51單片機(jī)不能用于多主系統(tǒng)。4.8I2C總線數(shù)據(jù)傳送中,有哪些基本信號(hào)?一次完整的數(shù)據(jù)傳送過程應(yīng)包括哪些信號(hào)?答:有4個(gè)基本信號(hào):起始信號(hào)S、終止信號(hào)P、應(yīng)答信號(hào)A和。另外,還需要用于同步的檢查應(yīng)答信號(hào)。一次完整的數(shù)據(jù)傳送過程應(yīng)包括起始S、發(fā)送尋址字節(jié)(SLAR/)、應(yīng)答、發(fā)送數(shù)據(jù)、應(yīng)答、…、發(fā)送數(shù)據(jù)、應(yīng)答、終止P。4.9說明AT24CXX系列E2PROM頁寫緩沖器的作用,如何應(yīng)用?答:由于E2PROM的半導(dǎo)體工藝特性,對(duì)E2PROM的寫入時(shí)間要5~10ms,但AT24CXX系列串行E2PROM芯片內(nèi)部設(shè)置了一個(gè)具有SRAM性質(zhì)的輸入緩沖器,稱為頁寫緩沖器。CPU對(duì)該芯片寫操作時(shí),AT24CXX系列芯片先將CPU輸入的數(shù)據(jù)暫存在頁寫緩沖器內(nèi),然后,慢慢寫入E2PROM中。因此,CPU對(duì)AT24CXX系列E2PROM一次寫入的字節(jié)數(shù),受到該芯片頁寫緩沖器容量的限制。例如,AT24C02頁寫緩沖器的容量為16B。寫AT24CXX應(yīng)用時(shí),若CPU寫入字節(jié)數(shù)超過芯片頁寫緩沖器容量,應(yīng)在一頁寫完后,隔5~10ms重新啟動(dòng)一次寫操作。其次,若不是從頁寫緩沖器頁內(nèi)零地址0000寫起,一次寫入不能超出頁內(nèi)最大地址1111。若超出,也應(yīng)將超出部分,隔5~10ms重新啟動(dòng)一次寫操作。4.10參照圖4-1電路,用2片74HC164,擴(kuò)展16位并行輸出,驅(qū)動(dòng)16個(gè)發(fā)光二極管,如圖4-26所示,從左至右每隔0.5s移動(dòng)點(diǎn)亮,不斷循環(huán)。試編制程序,畫出ProteusISIS虛擬電路,并仿真調(diào)試。解:4.11參照圖4-2電路,用2片CC4094,擴(kuò)展16位并行輸出,控制16個(gè)發(fā)光二極管,如圖4-27所示,要求按下列順序每隔0.5秒驅(qū)動(dòng)運(yùn)行,不斷循環(huán)。試編制程序,畫出ProteusISIS虛擬電路,并仿真調(diào)試。=1\*GB3①從左向右依次點(diǎn)亮,每次2個(gè);=2\*GB3②從左向右依次點(diǎn)亮,每次增加2個(gè),直至全亮;=3\*GB3③從左向右依次暗滅,每次減少2個(gè),直至全滅;=4\*GB3④返回=1\*GB3①,不斷循環(huán)。解:C51編程如下:4.12參照任務(wù)11.2中4021“并入串出”程序,試編制4014“并入串出”程序,并在圖4-8虛擬電路中仿真調(diào)試。解:參閱教材書任務(wù)11.2中提示:若選用CC4014,置入并行數(shù)據(jù)時(shí)需由TXD端CP脈沖上升沿觸發(fā),只需將“ps=1;ps=0;”程序行改為“ps=1;TXD=0;TXD=1;ps=0;”,其余相同。4.13參照圖4-5電路,用2片74HC165,擴(kuò)展16位鍵狀態(tài)信號(hào)并行輸入,如圖4-28所示,要求將16位鍵信號(hào)數(shù)據(jù)存80C51內(nèi)RAM30H、31H。試編制程序,畫出ProteusISIS虛擬電路,并仿真調(diào)試。解:C51編程如下:需要注意的是,禁止接收REN=0指令必須緊跟在串行接收完畢RI=1后,否則將發(fā)生幀串收數(shù)據(jù)畸變錯(cuò)誤。4.14參照圖4-6電路,用2片CC4021,擴(kuò)展16位鍵狀態(tài)信號(hào)并行輸入,如圖4-29所示,要求將16位鍵信號(hào)數(shù)據(jù)存80C51內(nèi)RAM40H、41H。試編制程序,畫出ProteusISIS虛擬電路,并仿真調(diào)試。解:C51編程如下:4.15設(shè)甲乙機(jī)以串行方式2進(jìn)行數(shù)據(jù)傳送,fOSC=12MHz,SMOD=0。甲機(jī)共發(fā)送10幀數(shù)據(jù)(設(shè)為0~9共陽字段碼,依次存在外ROM中),乙機(jī)接收后,存在以40H為首址的內(nèi)RAM中,試分別編制甲乙機(jī)串行發(fā)送/接收程序,并在圖4-9虛擬電路中仿真調(diào)試。解:串行方式2,波特率固定為fOSC/64。甲機(jī)發(fā)送子程序:乙機(jī)接收C51程序:4.16設(shè)甲乙機(jī)以串行方式3進(jìn)行數(shù)據(jù)傳送,ProteusISIS虛擬仿真電路如圖4-30所示。fOSC=11.0592MHz,波特率為4800b/s,SMOD=1,TB8/RB8作為奇偶校驗(yàn)位。按如下要求雙機(jī)通信,試分別編制甲乙機(jī)串行發(fā)送/接收程序,畫出ProteusISIS虛擬電路,并仿真調(diào)試。=1\*GB3①甲機(jī)每發(fā)送一幀數(shù)據(jù)(設(shè)為0~9共陽字段碼,存在外ROM中),同時(shí)在P1口顯示發(fā)送數(shù)據(jù);用P2.7(驅(qū)動(dòng)LED燈)顯示奇偶校驗(yàn)位(1亮0暗)。接到乙機(jī)回復(fù)信號(hào)后,再暗0.5秒(作為幀間隔);然后發(fā)送下一數(shù)據(jù),直至10個(gè)數(shù)據(jù)串送完畢;顯示再暗0.5秒(作為周期間隔),然后重新開始第二輪串送循環(huán)操作。=2\*GB3②乙機(jī)接收數(shù)據(jù),送P2口顯示;用P1.1顯示第9位數(shù)據(jù)(1亮0暗);奇偶校驗(yàn)后,乙機(jī)發(fā)送回復(fù)信號(hào),用P1.0顯示校驗(yàn)標(biāo)志(正確時(shí)亮燈,出錯(cuò)時(shí)滅燈)。解:串行方式3波特率取決于T1溢出率,計(jì)算T1定時(shí)初值:T=256-×=256-×=256-12=244=F4H甲機(jī)發(fā)送子程序:乙機(jī)接收C51程序:4.17已知I2C總線串行擴(kuò)展AT24C02電路如圖4-10所示,參照任務(wù)13.1,將80C51內(nèi)RAM數(shù)組a[16]的16個(gè)數(shù)據(jù)(11H、22H、33H、44H、55H、66H、77H、88H、99H、AAH、BBH、CCH、DDH、EEH、FFH、0)寫入AT24C02首址為30H的連續(xù)單元中;再將其讀出,存在80C51首址為50H的連續(xù)單元中。試編制程序,并在圖4-11虛擬電路中仿真調(diào)試。解:C51程序如下:KeilC51軟件調(diào)試和ProteusISIS虛擬電路仿真見例9-16。建議讀者試一試去除AT24CXX頁寫延時(shí),會(huì)產(chǎn)生什麼后果?4.18已知電路及條件同上例,要求將該16個(gè)數(shù)據(jù)寫入AT24C024AH~59H單元中;再將其讀出,存在80C51內(nèi)RAM中。解:AT24C02一次寫入字節(jié)不能超出頁寫緩沖器最大地址,即不能超出頁內(nèi)地址1111,否則會(huì)引起地址翻卷,導(dǎo)致出錯(cuò)。因此,需分二次寫入。第一次寫入4AH~4FH單元,第二次寫入50H~59H單元,中間還必須有頁寫延時(shí)。據(jù)此,C51主函數(shù)修改如下,其余與上題相同。第5章思考和練習(xí)解答5.1簡述LED數(shù)碼管的結(jié)構(gòu)和分類。LED正向壓降、額定電流和最大電流各是多少?答:參閱教材書P.143。5.2什么叫靜態(tài)顯示方式和動(dòng)態(tài)顯示方式?各有什么特點(diǎn)?答:參閱教材書P.144~145。5.3動(dòng)態(tài)掃描顯示電路如何連線?對(duì)數(shù)碼管的驅(qū)動(dòng)電流有什么要求?答:參閱教材書P.144~145。5.4LCD1602能顯示多少字符?能顯示漢字嗎?答:LCD1602液晶顯示屏能顯示2行共32個(gè)字符。1602不能顯示漢字(12864可顯示漢字)。并且只能顯示其內(nèi)部已經(jīng)固化了的160個(gè)5×7點(diǎn)陣字符和32個(gè)5×10點(diǎn)陣字符(參閱教材書圖5-22點(diǎn)陣字符表)。其中,標(biāo)點(diǎn)符號(hào)、阿拉伯?dāng)?shù)字和英文大小寫字母等字符為ASCII碼。若需顯示自定義字符,有64字節(jié)RAM,可自定義8個(gè)5×8點(diǎn)陣字符或4個(gè)5×11點(diǎn)陣字符。5.5按鍵開關(guān)為什么有去抖動(dòng)問題?如何消除?答:參閱教材書P.148~149。5.6試述矩陣式鍵盤判別鍵閉合的方法,有什麼問題?答:矩陣式鍵盤的I/O端線分為行線和列線,按鍵跨接在行線和列線上。按鍵按下時(shí),行線與列線發(fā)生短路。根據(jù)這一特點(diǎn),可按下列步驟操作:=1\*GB3①置列線為輸入態(tài),從行線輸出低電平,讀入列線數(shù)據(jù),若某一列線為低電平,則該列線上有鍵閉合;=2\*GB3②置行線為輸入態(tài),從列線輸出低電平,讀入行線數(shù)據(jù),若某一行線為低電平,則該行線上有鍵閉合;=3\*GB3③綜合=1\*GB3①、=2\*GB3②兩步的結(jié)果,可確定按鍵編號(hào)。矩陣式鍵盤電路在許多單片機(jī)教材和技術(shù)資料中被介紹,但實(shí)際上該電路連接存在問題,當(dāng)同一行有多鍵同時(shí)按下,且該行其中一鍵所在列又有多鍵同時(shí)按下時(shí),會(huì)發(fā)生信號(hào)傳遞路徑出錯(cuò)。因此,這種矩陣式鍵盤電路適用于無鎖按鍵并使用中斷處理時(shí)相對(duì)合理。5.7什么叫BCD碼?與二進(jìn)制數(shù)有何區(qū)別?答:BCD碼(BinaryCodedDecimalCode)也稱為二-十進(jìn)制數(shù),屬十進(jìn)制數(shù),即逢十進(jìn)位。但每一數(shù)位采用二進(jìn)制碼對(duì)十進(jìn)制數(shù)字編碼,這種編碼方式的特點(diǎn)是保留了十進(jìn)制的權(quán),數(shù)字則用二進(jìn)制碼表示。BCD碼既適應(yīng)了人們逢十進(jìn)位的習(xí)慣,又適應(yīng)了計(jì)算機(jī)對(duì)輸入輸出數(shù)據(jù)的要求。BCD碼與二進(jìn)制數(shù)都用二進(jìn)制碼表示,但是有區(qū)別的。BCD碼是以4位二進(jìn)制碼表示一位十進(jìn)制數(shù),每4位以內(nèi)按二進(jìn)制進(jìn)位;4位與4位之間按十進(jìn)制進(jìn)位。例如:二進(jìn)制碼01100111B=103,[01100111]BCD=67。顯然兩者是不一樣的。5.8什么是ASCII碼?答:參閱教材書P.151。5.9將項(xiàng)目6模擬交通燈的綠燈加上限行顯示時(shí)間,P2口驅(qū)動(dòng)橫向綠燈限行時(shí)間,P3口驅(qū)動(dòng)縱向綠燈限行時(shí)間,電路如圖5-27所示。原換燈時(shí)間分別改為:綠燈9秒(最后2秒快閃),黃燈3秒,紅燈12秒,反復(fù)循環(huán)。試編制程序,畫出ProteusISIS虛擬電路,并仿真調(diào)試。解:可仿照任務(wù)6.1程序,加入顯示語句,顯示字段碼直接從P2、P3口輸出。5.10已知CC4094串行擴(kuò)展3位靜態(tài)顯示電路如圖5-28所示,3位顯示字段碼已分別存在32H~30H內(nèi)RAM中(設(shè)為809),小數(shù)點(diǎn)固定在第二位,試編制程序,畫出ProteusISIS虛擬電路,并仿真調(diào)試。解:C51編程如下:KeilC51軟件調(diào)試:編譯連接并進(jìn)入調(diào)試狀態(tài)后,打開串行口對(duì)話框,單步結(jié)合過程單步運(yùn)行,可觀察到串行口對(duì)話框中SBUF寄存器依次被輸入908(先發(fā)送低位)轉(zhuǎn)換后的共陽顯示字段碼:09、03、01。改變變量a或32H~30H中的數(shù)值(注意≤999),重新運(yùn)行,轉(zhuǎn)換結(jié)果隨之改變。5.11已知由PNP型三極管與74377組成的共陽型3位LED數(shù)碼管動(dòng)態(tài)掃描顯示電路如圖5-29所示,顯示字段碼存在以40H(低位)為首址的3字節(jié)內(nèi)RAM中,試編制3位動(dòng)態(tài)掃描顯示程序,畫出ProteusISIS虛擬電路,并仿真調(diào)試。解:按圖5-29電路,P1.0~P1.2分別輸出低電平時(shí),VT0~VT2分別導(dǎo)通,選通相應(yīng)顯示位。P0口輸出的字段碼也是低電平有效。輸出高電平與輸出低電平時(shí)的驅(qū)動(dòng)能力不一樣,輸出高電平時(shí),拉電流較??;輸出低電平時(shí),灌電流較大,因此,通常采用低電平有效輸出控制。C51編程如下:5.12已知4位共陰型LED動(dòng)態(tài)顯示電路如圖5-30所示,顯示字段碼存在以30H為首址的內(nèi)RAM中,試編制循環(huán)掃描顯示程序,畫出ProteusISIS虛擬電路,并仿真調(diào)試。解:C51編程如下:5.13已知8位共陰型LED動(dòng)態(tài)顯示電路如圖5-31所示,位碼驅(qū)動(dòng)由74LS138譯碼,段碼驅(qū)動(dòng)由74LS377并行輸出,8位顯示數(shù)字存在數(shù)組a中,試編制循環(huán)掃描顯示程序,畫出ProteusISIS虛擬電路,并仿真調(diào)試。解:C51編程如下:5.14已知8位共陰型LED動(dòng)態(tài)顯示電路如圖5-32所示,位碼驅(qū)動(dòng)由74LS138譯碼,段碼驅(qū)動(dòng)由74LS164“串入并出”,8位顯示數(shù)字存在數(shù)組d中,試編制循環(huán)掃描顯示程序,畫出ProteusISIS虛擬電路,并仿真調(diào)試。解:要求循環(huán)掃描顯示數(shù)組d[8]={2,0,1,3,9,8,7,6}中的8位顯示數(shù)字。C51編程如下:需要說明的是,由于80C51串行傳送時(shí)低位在前高位在后,與164移位次序相反。因此,字段碼數(shù)組采用逆序(a是高位)。這樣,164Q0輸出端(引腳編號(hào)3)就可接顯示屏a端。KeilC51編譯調(diào)試=1\*GB2⑴編譯鏈接,語法糾錯(cuò),并進(jìn)入調(diào)試狀態(tài)。=2\*GB2⑵打開變量觀測窗口(鼠標(biāo)左鍵單擊調(diào)試工具圖標(biāo)“”),觀測到數(shù)組d[]被存放在D:0x08單元(注意不同程序存儲(chǔ)單元也不同)。=3\*GB2⑶打開存儲(chǔ)器窗口(鼠標(biāo)左鍵單擊調(diào)試工具圖標(biāo)“”),在Memory#1窗口的Address編輯框內(nèi)鍵入“d:0x08”。=4\*GB2⑷打開P1對(duì)話窗口(主菜單“Peripherals”→“I/O-Port”→“Port1”)。其中,上面一行(標(biāo)記“Px”)為I/O口輸出變量,下面一行(標(biāo)記“Pins”)為模擬I/O口引腳輸入信號(hào)?!啊獭睘椤?”,“空白”為“0”,左鍵點(diǎn)擊可修改。=5\*GB2⑸打開串行口對(duì)話窗口(主菜單“Peripherals”→“Serial”),彈出串行口對(duì)話窗口,以便觀察串行緩沖寄存器SBUF中的數(shù)據(jù)。=6\*GB2⑹單步運(yùn)行,顯示數(shù)組d賦值后,看到存儲(chǔ)器窗口0x08及其后續(xù)7個(gè)單元已依次賦值數(shù)組d中的顯示數(shù)字。=7\*GB2⑺繼續(xù)單步運(yùn)行,至輸出位碼“P1=0xf8+i;”語句行后,P1對(duì)話窗口輸出數(shù)值變?yōu)椤?1111000”(“√”為“1”,“空白”為“0”),表明P1.2~P1.0輸出“000”,138將譯碼驅(qū)動(dòng)第0位顯示。=8\*GB2⑻繼續(xù)單步運(yùn)行,至串行發(fā)送段碼“SBUF=c[d[i]];”語句行后,串行對(duì)話窗口SBUF中數(shù)據(jù)變?yōu)椤?xDA”,表明串行發(fā)送共陰逆序“2”的字段編碼“0xDA”。=9\*GB2⑼繼續(xù)單步運(yùn)行(串行發(fā)送過程需單步8次),執(zhí)行延時(shí)語句“for(t=0;t<1000;t++);”后,回到輸出位碼“P1=0xf8+i;”語句行后,看到變量觀察窗口Locals頁中的循環(huán)序數(shù)i變?yōu)椤?”,執(zhí)行后,P1對(duì)話窗口輸出數(shù)值變?yōu)椤?1111001”(“√”為“1”,“空白”為“0”),表明P1.2~P1.0輸出“001”,138將譯碼驅(qū)動(dòng)第1位顯示。繼續(xù)單步,運(yùn)行串行發(fā)送段碼“SBUF=c[d[i]];”語句后,串行對(duì)話窗口SBUF中數(shù)據(jù)變?yōu)椤?xFC”,表明串行發(fā)送共陰逆序“0”的字段編碼“0xFC”。以此類推,循環(huán)輸出數(shù)組d[]中的顯示數(shù)字。=10\*GB2⑽改變程序中數(shù)組d[]的顯示數(shù)字,重新運(yùn)行,轉(zhuǎn)換結(jié)果隨之相應(yīng)改變。=3\*GB1⒊ProteusISIS虛擬仿真=1\*GB2⑴畫出Proteus虛擬仿真電路圖如圖5-32a所示。其中,80C51在MicroprocessorIcs庫中。74LS138、74LS164在TTL74LSseries庫中;8位顯示屏在Optoelectronics→7-SegmentDisplays庫中,選共陰型8位7段LED數(shù)碼管7SEG-MPX8-CC-BLUE。=2\*GB2⑵鼠標(biāo)左鍵雙擊圖5-32a所示電路中AT89C51,裝入在KeilC51編譯調(diào)試時(shí)自動(dòng)生成的Hex文件。全速運(yùn)行后,虛擬電路中數(shù)碼管顯示屏?xí)@示賦值顯示數(shù)。圖5-32aProteus虛擬仿真138位碼圖5-32aProteus虛擬仿真138位碼選通+164段碼串行傳送的8位LED動(dòng)態(tài)顯示電路(運(yùn)行中)5.15已知LCD1602顯示電路如圖5-15所示,要求顯示屏上第一行顯示“AT89C51--LCD1602”,第二行顯示“Test--Program---”,試編制顯示程序。解:C51程序如下:5.16已知電路如圖5-33所示,10kΩ×8和0.1μF×8為RC濾波消抖電路,fOSC=6MHz,要求T1每隔100ms中斷,定時(shí)掃描按鍵狀態(tài),并將鍵信號(hào)存入內(nèi)RAM30H,試編制程序,畫出ProteusISIS虛擬電路,并仿真調(diào)試。解:C51程序如下:5.17已知3×3矩陣式鍵盤中斷掃描接口電路如圖5-34所示,P1.4、P1.3另有他用,不能改變其端口狀態(tài)(輸入態(tài)),且其輸入狀態(tài)不定。要求即時(shí)判斷閉合鍵序號(hào),并送P2口顯示。試編制程序,畫出ProteusISIS虛擬電路,并仿真調(diào)試。解:C51程序如下:第6章思考和練習(xí)解答6.1什么叫A-D轉(zhuǎn)換?為什么要進(jìn)行A-D轉(zhuǎn)換?答:將模擬量轉(zhuǎn)換成數(shù)字量的過程稱為A-D轉(zhuǎn)換。在單片機(jī)應(yīng)用系統(tǒng)中,被檢測的信號(hào)往往是連續(xù)變化的模擬量,如電壓、溫度、壓力、流量、速度等,對(duì)于這些模擬量,單片機(jī)不能直接進(jìn)行處理,而必須將其轉(zhuǎn)換成數(shù)字信號(hào),才能為單片機(jī)所接受和處理。6.2一個(gè)8位A-D轉(zhuǎn)換器的分辨率是多少?若基準(zhǔn)電壓為5V,該A-D轉(zhuǎn)換器能分辨的最小電壓變化是多少?10位和12位呢?答:A-D轉(zhuǎn)換器分辨率=UREF/2N,它表示輸出數(shù)字量變化一個(gè)相鄰數(shù)碼所需輸入模擬電壓的變化量,其中N為A-D轉(zhuǎn)換的位數(shù),N越大,分辨率越高,習(xí)慣上常以A-D轉(zhuǎn)換位數(shù)表示。8位A-D轉(zhuǎn)換器的分辨率是1/28=1/256≈3.9‰?;鶞?zhǔn)電壓5V時(shí),能分辨的最小電壓變化是5V/256≈20mV。10位A-D轉(zhuǎn)換器的分辨率是1/210=1/1024≈0.98‰?;鶞?zhǔn)電壓5V時(shí),能分辨的最小電壓變化是5V/1024≈4.9mV。12位A-D轉(zhuǎn)換器的分辨率是1/212=1/4096≈0.24‰。基準(zhǔn)電壓5V時(shí),能分辨的最小電壓變化是5V/4096≈1.22mV。6.3圖6-1電路中,怎樣啟動(dòng)0809A-D轉(zhuǎn)換?答:參閱教材書P.158。C51程序中:XBYTE[0x7ff8+i]這條指令中包含3份信息,起到3種作用:3份信息:=1\*GB3①片選0809(0x7ff8=0111111111111000,高8位中,P2.7=0,有效);=2\*GB3②當(dāng)前轉(zhuǎn)換的通道地址(低3位)i(當(dāng)前是000,通道地址隨i遞增);=3\*GB3③執(zhí)行該指令(輸出)時(shí),片內(nèi)硬件自動(dòng)使有效。3種作用:=1\*GB3①DPTR=7FF8H最低3位地址A2A1A0(000)輸入到0809模擬信號(hào)通道地址輸入端CBA;=2\*GB3②P2.7有效和有效(均為低電平)或非后,全0出“1”,使0809ALE信號(hào)有效,鎖存從CBA輸入的通道地址000;=3\*GB3③同時(shí)使0809START信號(hào)有效,啟動(dòng)A-D轉(zhuǎn)換。6.4圖6-5電路中,ADC0832數(shù)據(jù)輸入輸出端DI、DO端連接在一起,會(huì)不會(huì)引起沖突?答:根據(jù)ADC0832串行A-D轉(zhuǎn)換工作時(shí)序,DI端在接收主機(jī)起始和通道配置信號(hào)后關(guān)斷,直至再次出現(xiàn)下跳變,DO端在DI端有效期間始終處于三態(tài),因此DI端與DO端可與RXD端連接在一起,不會(huì)引起沖突。6.5什么叫D-A轉(zhuǎn)換?基本原理是什么?若D=65H,UREF=5V,求D-A轉(zhuǎn)換后輸出電壓多少?答:將數(shù)字量轉(zhuǎn)換成模擬量的過程稱為D-A轉(zhuǎn)換。D-A轉(zhuǎn)換的基本原理是應(yīng)用電阻解碼網(wǎng)絡(luò),將N位數(shù)字量逐位轉(zhuǎn)換為模擬量并求和,從而實(shí)現(xiàn)將N位數(shù)字量轉(zhuǎn)換為相應(yīng)的模擬量。輸出電壓UO應(yīng)與輸入數(shù)字量D成正比:UO=(D0×20+D1×21+…+DN-1×2N-1)×UREF/2N=101×5/256≈1.973V(65H=101)6.6什么叫單緩沖和雙緩沖工作方式?各有什么功能?答:參閱教材書P.173~174。6.7已知0809A-D轉(zhuǎn)換中DPTR值,試指出其片選端和當(dāng)前A-D的通道編號(hào)。=1\*GB3①DPTR=DFF9H =2\*GB3②DPTR=FDFFH答:=1\*GB3①DPTR=DFF9H;DFF9H=1101111111111001,片選端:P2.5;通道編號(hào):1。=2\*GB3②DPTR=FDFFH;FDFFH=1111110111111111,片選端:P2.1;通道編號(hào):7。6.8已知0809片選端和當(dāng)前A-D的通道編號(hào),試指出A-D轉(zhuǎn)換中DPTR值。=1\*GB3①片選端:P2.4;通道編號(hào):0 =2\*GB3②片選端:P2.0;通道編號(hào):6答:=1\*GB3①片選端:P2.4;通道編號(hào):0;DPTR=1110111111111000=EFF8H。=2\*GB3②片選端:P2.0;通道編號(hào):6;DPTR=1111111011111110=FEFEH。6.9參照任務(wù)18.1,要求用查詢方式實(shí)現(xiàn)A-D轉(zhuǎn)換,試畫出ProteusISIS虛擬電路,編制程序,并仿真調(diào)試。解:查詢方式。0809EOC端可不必通過反相器與或相連,直接與80C51P1口或P3口中任一端線相連(設(shè)為P1.0),如圖6-24所示,其余部分與圖6-15電路完全相同。圖圖6-24ADC0808查詢方式A-D轉(zhuǎn)換并動(dòng)態(tài)顯示電路8+5V模擬量輸入ALESTARTD0~D7ADC0808CBAIN0~I(xiàn)N7CLKOEUREF+UREF-EOC83A0~A274373D0~D7Q0~Q7G≥1≥18共陽數(shù)碼管8CLKQ0~Q7D0~D774LS377Dpgfedcba+5VR2R1R0VT2VT1VT0Vt3R380C51P0ALEP2.7P0P1.4P1.5P1.6P2.6P1.7P1.0C51編程如下:畫出Proteus仿真電路如圖6-25所示。圖圖6-

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論