單片機原理及應(yīng)用技術(shù)基于Keil C與Proteus趙全利習(xí)題答案_第1頁
單片機原理及應(yīng)用技術(shù)基于Keil C與Proteus趙全利習(xí)題答案_第2頁
單片機原理及應(yīng)用技術(shù)基于Keil C與Proteus趙全利習(xí)題答案_第3頁
單片機原理及應(yīng)用技術(shù)基于Keil C與Proteus趙全利習(xí)題答案_第4頁
單片機原理及應(yīng)用技術(shù)基于Keil C與Proteus趙全利習(xí)題答案_第5頁
已閱讀5頁,還剩122頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

單片機原理及應(yīng)用技術(shù)習(xí)題答案第1章1.7思考與練習(xí)1..為什么說計算機產(chǎn)生的結(jié)構(gòu)思想是學(xué)習(xí)計算機基本原理的基礎(chǔ)?在計算機中,二進制數(shù)是計算機硬件能直接識別并進行處理的唯一形式。計算機所做的任何工作都必須以二進制數(shù)據(jù)所表示的指令形式送入計算機內(nèi)存中存儲,一條條有序指令的集合稱為程序。根據(jù)馮·諾依曼的設(shè)計,計算機應(yīng)能自動執(zhí)行程序,而執(zhí)行程序又歸結(jié)為逐條執(zhí)行指令。計算機對任何問題的處理都是對數(shù)據(jù)的處理,計算機所做的任何操作都是執(zhí)行程序的結(jié)果。很好地認識和理解計算機產(chǎn)生的結(jié)構(gòu)思想,有助于理解數(shù)據(jù)、程序與計算機硬件之間的關(guān)系,這對于學(xué)習(xí)和掌握計算機基本原理是十分重要的。2.計算機能夠識別的數(shù)值是什么?為什么要引進十六進制數(shù)?在計算機中,由于所采用的電子邏輯器件僅能存儲和識別兩種狀態(tài)的特點,計算機內(nèi)部一切信息存儲、處理和傳送均采用二進制數(shù)的形式??梢哉f,二進制數(shù)是計算機硬件能直接識別并進行處理的惟一形式。十六進制數(shù)可以簡化表示二進制數(shù)。3.數(shù)值轉(zhuǎn)換。(1)37=(100101)B=(25)H (2)12.875=(1100.111)B=(0CE)H (3)10110011B=(0B3)H=(179)10 (4)10111.101B=(17.A)H=(23.625)10(5)56H=(01010110)B=(86)10 (6)3DFH=(001111011111)B=(991)10 (7)1A.FH =(11010.1111)B=(26.9375)10 (8)3C4DH=(11110001001101)B=(展開二進制各位權(quán)值,求和)104.對于二進制數(shù)10001001B,若理解為無符號數(shù),則該數(shù)對應(yīng)十進制數(shù)為多少?若理解為有符號數(shù),則該數(shù)對應(yīng)十進制數(shù)為多少?若理解為BCD數(shù),則該數(shù)對應(yīng)十進制數(shù)為多少?無符號數(shù):128+8+1=137有符號數(shù):-119BCD:895.列出下列數(shù)據(jù)的原碼、反碼和補碼。(1)+123 (2)-127 (3)+45 (4)-9(1)011110110111101101111011(2)原碼11111111反碼10000000補碼10000001(3)101101101101101101(4)1000100111110110111101116.簡述單片機系統(tǒng)組成單片機系統(tǒng)包括單片機硬件系統(tǒng)和軟件系統(tǒng)。單片機應(yīng)用系統(tǒng)的硬件組成,如果按其系統(tǒng)擴展及配置狀況,可分為最小系統(tǒng)、最小功耗系統(tǒng)、典型系統(tǒng)等。單片機的軟件系統(tǒng)包括:系統(tǒng)軟件和應(yīng)用軟件。(1)系統(tǒng)軟件單片機的系統(tǒng)軟件構(gòu)成有以下兩種模式。=1\*GB3①監(jiān)控程序。用非常緊湊的代碼,編寫系統(tǒng)的底層軟件。這些軟件實現(xiàn)的功能,往往是實現(xiàn)系統(tǒng)硬件的管理及驅(qū)動,并內(nèi)嵌一個用于系統(tǒng)的開機初始化等功能的引導(dǎo)(BOOT)模塊。=2\*GB3②操作系統(tǒng)。多種適合于8位至32位單片機的操作系統(tǒng)已經(jīng)進入實用階段,在操作系統(tǒng)的支持下,嵌入式系統(tǒng)會具有更好的技術(shù)性能,如程序的多進程結(jié)構(gòu),與硬件無關(guān)的設(shè)計特性,系統(tǒng)的高可靠性,軟件開發(fā)的高效率等。(2)應(yīng)用軟件應(yīng)用軟件是用戶為實現(xiàn)系統(tǒng)功能要求設(shè)計的程序。7.解釋以下述語:(咯)單片機PC機上位機開發(fā)板源程序程序編譯程序下載在系統(tǒng)編程總線嵌入式系統(tǒng)8.某存儲器的存儲容量為64KB,它表示多少個存儲單元?64*1024字節(jié)存儲單元9.簡述51系列單片機、STC單片機的相同點與不同點?STC單片機為51內(nèi)核增強型單片機,是當(dāng)前廣泛應(yīng)用的51兼容單片機。(1)STC單片機主要特點STC單片機其主要特點如下。=1\*GB3①在51單片機的基礎(chǔ)上增加了脈寬調(diào)制電路(PWM)、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器、高速SPI通信端口、硬件看門狗等功能模塊。=2\*GB3②時鐘工作頻率可以提高到35MHz,單片機工作速度大大提高。=3\*GB3③可在線編程和在系統(tǒng)編程,不需要專用編程器和仿真器。=4\*GB3④寬電壓工作范圍,低功耗,輸出驅(qū)動能力強。=5\*GB3⑤具有較強的抗干擾能力,加密性強。=6\*GB3⑥價格低,具有較高的性價比。10.單片機應(yīng)用開發(fā)主要有哪些軟、硬件資源?主要功能什么?常用的單片機開發(fā)資源包括單片機開發(fā)板(也可以自制)、Keil單片機集成開發(fā)環(huán)境、Proteus仿真軟件、ISP下載軟件、Protel原理圖及PCB設(shè)計軟件等。開發(fā)資源功能:=1\*GB3①硬件電路設(shè)計環(huán)境。首先通過電路設(shè)計環(huán)境實現(xiàn)電路原理圖設(shè)計,包括輸入、輸出接口電路,實現(xiàn)對外部設(shè)備的控制(如鍵盤、LED顯示器)等,為電路仿真調(diào)試及PCB設(shè)計提供支持。=2\*GB3②編輯用戶程序及下載。單片機芯片一般不具有控制程序,用戶程序依賴于外部軟件編輯、編譯后,通過軟硬件環(huán)境下載到單片機的存儲器中。=3\*GB3③仿真調(diào)試。為了保證單片機軟硬件設(shè)計的可靠性,減少調(diào)試過程軟硬件修改的煩瑣,可以首先對單片機軟硬件進行仿真調(diào)試。=4\*GB3④在仿真調(diào)試成功的基礎(chǔ)上進行PCB電路制作,脫機運行調(diào)試。11.單片機開放板的主要用途是什么?單片機開發(fā)板是用于學(xué)習(xí)系列單片機的實驗設(shè)備,用戶可以根據(jù)選用的單片機芯片系列選用相應(yīng)的單片機開發(fā)板。性能優(yōu)良的開發(fā)板配備常用各種實驗需求的匯編源程序及C51語言源程序代碼、電路原理圖、PCB電路圖、實驗手冊、使用手冊及單片機開發(fā)板的詳細講解視頻等學(xué)習(xí)資料,方便讀者自學(xué)使用。開發(fā)板也可以直接作為單片機應(yīng)用系統(tǒng)的控制器。12.結(jié)合1.6節(jié)所述單片機應(yīng)用示例,簡述單片機的仿真過程和開發(fā)過程。(參考教材)第2章2.7思考與習(xí)題1.舉例說明MCS-51有哪些典型產(chǎn)品,它們有何區(qū)別?51系列單片機可分為兩大系列:51子系列和52子系列。51子系列單片機的典型產(chǎn)品有8051、8751、80C51,89C51內(nèi)含4KB的閃速EEPROM,89S51內(nèi)含4KB的Flash閃速程序存儲器,它們的結(jié)構(gòu)基本相同,其主要差別反映在片內(nèi)存儲器的配置上有所不同。當(dāng)前流行使用的是51兼容、擴展的STC系列單片機,在51單片機的基礎(chǔ)上增加了脈寬調(diào)制電路(PWM)、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器、高速SPI通信端口、硬件看門狗等功能模塊。2.8051單片機內(nèi)部包含哪些主要功能部件?各功能部件的主要作用是什么?8051單片機內(nèi)部由CPU、4KB的ROM、128B的RAM、4個8位的I/O并行端口、一個串行口、兩個16位定時/計數(shù)器及中斷系統(tǒng)等組成。3.程序狀態(tài)字寄存器PSW各位的定義是什么?PSW是一個8位寄存器,用于寄存當(dāng)前指令執(zhí)行后的某些狀態(tài),即反映指令執(zhí)行結(jié)果的一些特征信息。Cy(PSW.7):即PSW的D7位,進位/借位標志。AC(PSW.6):即PSW的D6位,輔助進位標志。F0(PSW.5)及F1(PSE.1):即PSW的D5位、D1位,用戶標志位。RS1及RS0(PSW.4及PSW.3):即PSW的D4位、D3位,寄存器組選擇控制位。OV(PSW.2):即PSW的D2位,溢出標志。4.51存儲器結(jié)構(gòu)的主要特點是什么?程序存儲器和數(shù)據(jù)存儲器各有何不同?51單片機的存儲器結(jié)構(gòu)與一般微機存儲器的配置方法不同,一般微機把程序和數(shù)據(jù)共存同一存儲空間,各存儲單元對應(yīng)惟一的地址。而MCS-51的存儲器把程序和數(shù)據(jù)的存儲空間嚴格區(qū)分開。數(shù)據(jù)存儲器用于存放程序運算的中間結(jié)果、狀態(tài)標志位等。程序存儲器用于存放已編制好的程序及程序中用到的常數(shù)。5.-51單片機內(nèi)部RAM可分為幾個區(qū)?各區(qū)的主要作用是什么?內(nèi)部數(shù)據(jù)存儲器分為高、低128B兩大部分。低128B為RAM區(qū),地址空間為00H~7FH,可分為:寄存器區(qū)、位尋址區(qū)、堆棧及數(shù)據(jù)存儲區(qū)。存放程序運算的中間結(jié)果、狀態(tài)標志位等。高128B為特殊功能寄存器(SFR)區(qū),地址空間為80H~FFH,其中僅有21個字節(jié)單元是有定義的。6.-51單片機的P0~P3四個I/O端口在結(jié)構(gòu)上有何異同?使用時應(yīng)注意哪些事項?P0口是一個8位漏極開路型雙向I/O端口。P1口是一個內(nèi)部帶上拉電阻的8位準雙向I/O端口。P2口也是一個內(nèi)部帶上拉電阻的8位準雙向I/O端口P3口是一個內(nèi)部帶上拉電阻的8位多功能雙向I/O端口。在使用時應(yīng)注意以下方面:①P0~P3都是準雙向I/O口,即CPU在讀取數(shù)據(jù)時,必須先向相應(yīng)端口的鎖存器寫入“1”。各端口名稱與鎖存器名稱在編程時相同,均可用P0~P3表示。當(dāng)系統(tǒng)復(fù)位時,P0~P3端口鎖存器全為“1”,故可直接對其進行讀取數(shù)據(jù)。②在單片機進行外部存儲器擴展時,P0口必須作為地址/數(shù)據(jù)復(fù)用線使用,此時,不必外接上拉電阻,P0也不能作通用I/O口使用。③P1、P2、P3口輸出均接有內(nèi)部上拉電阻,輸入端無需外接上拉電阻,每一位輸出可以驅(qū)動4個LS型TTL電路。④P0、P2口除可以作通用I/O端口、以實現(xiàn)與外部進行數(shù)據(jù)交換外,更主要的是,當(dāng)CPU訪問外部存儲器時,CPU將自動地把外部存儲器的地址線信號(16位)送P0、P2口,作為地址總線(P0口輸出低8位地址,P2口輸出高8位地址),向外部存儲器輸出16位存儲單元地址。在控制信號作用下,該地址低8位被鎖存后,P0口自動切換為數(shù)據(jù)總線,這時經(jīng)P0口可向外部存儲器進行讀、寫數(shù)據(jù)操作。此時,P2口不再作通用I/O端口,P0口為地址/數(shù)據(jù)復(fù)用口。7.51單片機I/O端口輸出能力與上拉電阻的關(guān)系是什么?上拉電阻對輸出低電平?jīng)]有影響,但對輸出高電平時帶負載能力影響較大。8.為什么51單片機I/O端口輸出控制信號一般選擇為低電平有效?由于單片機開機后為高電平,還由于低電平輸出驅(qū)動電流大,一般情況應(yīng)該為低電平輸出為控制有效信號。9.為什么51單片機P0口在輸出高電平時要合理選擇上拉電阻值?P0口在作通用I/O口使用時應(yīng)合理選擇上拉電阻,一般為幾千歐。如果是輸出高電平控制負載,必須考慮其負載能力,否則可能使高電平值下降產(chǎn)生邏輯錯誤,為防止邏輯錯誤,輸出口可以通過高阻的電壓跟隨器連接負載。10.為什么51單片機I/O端口在讀取數(shù)據(jù)前應(yīng)先寫入“1”?單片機內(nèi)部的端口電路結(jié)構(gòu)決定的。11.為什么說單片機具有較強的位處理能力?對于許多控制系統(tǒng),開關(guān)量控制是控制系統(tǒng)的主要對象之一。作為傳統(tǒng)的CPU,對于簡單的個別開關(guān)量進行控制卻顯得不那么方便,而讓MCS-51值得驕傲的正是它有效地解決了單一位的控制。MCS-51片內(nèi)CPU還是一個性能優(yōu)異的位處理器,也就是說MCS-51實際上又是一個完整而獨立的1位單片機(也稱布爾處理機)。該布爾處理機除了有自己的CPU、位寄存器、位累加器(即進位標志Cy)、I/O口和位尋址空間外,還有專供位操作的指令系統(tǒng),可以直接尋址對位存儲單元和SFR的某一位進行操作。MCS-51單片機對于位操作(布爾處理)有置位、復(fù)位、取反、測試轉(zhuǎn)移、傳送、邏輯與和邏輯或運算等功能。所以,單片機具有較強的位處理能力。12.指出8051可進行位尋址的存儲空間。內(nèi)部RAM的20H.0~2FH.7(位地址00~7FH)及SFR地址能被8整除的寄存器中的各位。13.位地址90H和字節(jié)地址90H及P1.0有何異同?如何區(qū)別?位地址90H表示P1.0位字節(jié)地址90H表示P1口14.在訪問外部ROM或RAM時,P0和P2口各用來傳送什么信號?P0口為什么要采用片外地址鎖存器?P0口傳送地址低八位后可復(fù)用數(shù)據(jù)線,所以,P0口要采用片外地址鎖存器。P2口傳送地址高八位。15.什么是時鐘周期?什么是機器周期?什么是指令周期?當(dāng)振蕩頻率為12MHz時,一個機器周期為多少微秒?時鐘周期:也稱振蕩周期,即振蕩器的振蕩頻率fosc的倒數(shù),是時序中最小的時間單位。機器周期:執(zhí)行一條指令的過程可分為若干個階段,每一階段完成一規(guī)定的操作,完成一個規(guī)定操作所需要的時間稱為一個機器周期,一個機器周期包含12個時鐘周期。當(dāng)振蕩頻率為12MHz時,一個機器周期為12/(12×1000000)秒=1微秒指令周期:定義為執(zhí)行一條指令所用的時間。16.51單片機有幾種復(fù)位方法?復(fù)位后,CPU從程序存儲器的哪一個單元開始執(zhí)行程序?MCS-51的復(fù)位電路包括上電復(fù)位電路和按鍵(外部)復(fù)位電路程序存儲器的0000H開始執(zhí)行程序。17.8051系統(tǒng)掉電時如何保存內(nèi)部RAM中的數(shù)據(jù)?單片機在運行過程中,如果發(fā)生掉電,片內(nèi)RAM和SFR中的信息將會丟失。為防止信息丟失,可以把一組備用電源加到RST/VPD端,當(dāng)VCC上的電壓低于VPD上的電壓時,備用電源通過VPD端,以低功耗保持內(nèi)部RAM和SFR中的數(shù)據(jù)。18.8051單片機引腳ALE的作用是什么?當(dāng)8051不外接RAM和ROM時,ALE上輸出的脈沖頻率是多少?其作用是什么?地址鎖存使能輸出ALE:當(dāng)單片機訪問外部存儲器時,外部存儲器的16位地址信號由P0口輸出低8位,P2口輸出高8位,ALE可用作低8位地址鎖存控制信號;當(dāng)不用作外部存儲器地址鎖存控制信號時,該引腳仍以時鐘振蕩頻率的1/6固定地輸出正脈沖,可以驅(qū)動8個LS型TTL負載。19.單片機最小系統(tǒng)組成包括哪些部分?各部分功能是什么?單片機最小系統(tǒng)硬件電路包括電源電路、時鐘電路、復(fù)位電路及單片機、I/O口。各部分功能:電源電路為單片機提供穩(wěn)定可靠的工作電源;時鐘電路用于產(chǎn)生單片機最基本的時間單位;復(fù)位電路用于產(chǎn)生復(fù)位信號,使單片機從固定的起始狀態(tài)開始工作。第3章3.7思考與練習(xí)1.匯編語言有什么特征,為什么要學(xué)習(xí)匯編語言?匯編語言指令是在機器語言指令的基礎(chǔ)上,用英文單詞或英文單詞縮寫表示機器語言指令的操作碼(助記符),用符號表示操作數(shù)或操作數(shù)的地址。匯編語言指令實際上是符號化的機器語言。一條匯編指令必有一條相應(yīng)的機器語言指令與之對應(yīng),因此匯編語言表征了單片機能夠完成的基本功能和工作流程,這對于學(xué)好單片機工作原理,進而更加靈活地應(yīng)用單片機是大有好處的。2.51單片機有哪幾種尋址方式?說明它們是怎樣尋址的?51指令系統(tǒng)的尋址方式有以下7種:立即尋址方式:操作數(shù)直接出現(xiàn)在指令中。直接尋址方式中:操作數(shù)的單元地址直接出現(xiàn)在指令中。寄存器尋址方式中:寄存器中的內(nèi)容就是操作數(shù)。寄存器間接尋址方式中,指定寄存器中的內(nèi)容是操作數(shù)的地址,該地址對應(yīng)存儲單元的內(nèi)容才是操作數(shù)。變址尋址方式是以程序指針PC或數(shù)據(jù)指針DPTR為基址寄存器,以累加器A作為變址寄存器,兩者內(nèi)容相加(即基地址+偏移量)形成16位的操作數(shù)地址,相對尋址是以程序計數(shù)器PC的當(dāng)前值作為基地址,與指令中的第二字節(jié)給出的相對偏移量rel進行相加,所得和為程序的轉(zhuǎn)移地址。位地址:內(nèi)部RAM地址空間的可進行位尋址的128位和SFR地址空間的可位尋址的11個8位寄存器的88位。位尋址給出的是直接地址。3.位尋址和字節(jié)尋址如何區(qū)分?在使用時有何不同?由尋址方式可以看出,不同的尋址方式所尋址的存儲空間是不同的。正確地使用尋址方式不僅取決于尋址方式的形式,而且取決于尋址方式所對應(yīng)的存儲空間。字節(jié)尋址必須是對8位存儲單元,位尋址的存儲空間只能是片內(nèi)RAM的20H~2FH字節(jié)地址中的所有位(位地址為00H~7FH)和部分SFR的位,決不能是該范圍之外的任何單元的任何位。4.什么是堆棧?其主要作用是什么?堆棧是后進先出的數(shù)據(jù)存儲區(qū)一般用于中斷處理過程中,若需要保護現(xiàn)場數(shù)據(jù)(如內(nèi)部RAM單元的內(nèi)容),可使用入棧指令,將數(shù)據(jù)壓入堆棧,中斷處理過程執(zhí)行完后,再使用出棧指令恢復(fù)現(xiàn)場數(shù)據(jù)。5.編程將內(nèi)部數(shù)據(jù)存儲器20H~30H單元內(nèi)容清零。MOVR0,#20HMOVA,#0MOVR3,#17LOP:MOV@R0,AINCR0DJNZR3,LOP6.編程查找內(nèi)部RAM的32H~41H單元中是否有0AAH這個數(shù)據(jù),若有這一數(shù)據(jù),則將50H單元置為0FFH,否則清50H單元為0。MOVR3,#10H MOVA,#0AAHMOVR0,#31HLOP:INCR0SUBBA,@R0JZLOP1DJNZR3,LOPMOV50H,#0HAJMPLOP3LOP1:MOV50H,#0FFHLOP3:AJMP1OP37.查找20H~4FH單元中出現(xiàn)00H的次數(shù),并將查找結(jié)果存入50H單元。MOVR3,#30HMOVR0,#20HMOVA,#0LOP:MOVA,@R0JZLOP1LOP3:INCR0DJNZR3,LOPAJMPLOP2LOP1:INC50HAJMPLOP3LOP2:AJMPLOP28.已知A=83H,R0=17H,(17H)=34H,寫出下列程序段執(zhí)行完后的A中的內(nèi)容。ANL A,#17HORL 17H,AXRL A,@R0CPL A(A)=11001011B=0CBH9.已知單片機的fosc=12MHz,分別設(shè)計延時0.1s、1s、1min的子程序。設(shè)晶振頻率為12MHz,一個機器周期為1μs,延時1ms的子程序: 執(zhí)行時間(機器周期)DELAY: MOVR7,#0FFH 1LOOP: NOP 1 NOP 1 DJNZR7,LOOP 2 RET 2該程序段的總的執(zhí)行時間為:(1+4×255+2)s=1023μs≈1ms延時時間為0.1s的子程序:DELAY: MOVR5,#64H對延時1ms的子程序循環(huán)100次。LOP1: MOVR7,#0FFH LOOP: NOP NOP DJNZR7,LOOPDJNZR5,LOP1 RET 延時時間為1s的子程序:DELAY1:MOVR3,#0AH對延時100ms的子程序循環(huán)10次DELAY: MOVR5,#64H。LOP1: MOVR7,#0FFH LOOP: NOP NOP DJNZR7,LOOPDJNZR5,LOP1 DJNZR3,DELAYRET 延時時間為1min(60s)的子程序:對延時1s的子程序循環(huán)60次10.51單片機匯編語言中有哪些常用的偽指令?各起什么作用?BIT(地址符號命令)END(結(jié)束匯編)EQU(等值)DB(定義字節(jié))DW(定義字)DS(定義存儲單元)ORG(匯編起始地址)11.比較下列各題中的兩條指令有什么異同?①MOVA,R1;MOV0E0H,R1指令功能相同,尋址方式表示不同(目標操作數(shù)A寄存器尋址,0E0H直接尋址)②MOVA,P0;MOVA,80H指令功能相同,尋址方式表示不同③LOOP:SJMPLOOP;SJMP$指令功能相同12.下列程序段匯編后,從3000H開始各有關(guān)存儲單元的內(nèi)容是什么? ORG 3000H TAB1: EQU 1234H TAB2: EQU 5678H DB 65,13,"abcABC" DW TAB1,TAB2,9ABCH3000H:653001H:133002H:‘a(chǎn)’3003H:‘b’3004H:‘c’3005H:‘A’3006H:’B’3007H:‘C’3008H:34H3009H:12H300AH:78H300BH:56H300CH:0BCH300DH:9AH13.為了提高匯編語言程序的效率,在編寫時應(yīng)注意哪些問題?(1)把要解決的問題化成一個個具有一定獨立性的功能模塊,各模塊盡量采用子程序完成其功能。(2)力求少用無條件轉(zhuǎn)移指令,盡量采用循環(huán)結(jié)構(gòu)。(3)對主要的程序段要下功夫精心設(shè)計,這樣會收到事半功倍的效果。(4)能用8位數(shù)據(jù)解決問題的就不要使用16位數(shù)據(jù)。(5)累加器是信息傳遞的樞紐,在調(diào)用子程序時應(yīng)通過累加器傳送子程序的參數(shù),通過累加器向主程序傳送返回參數(shù)。所以,在子程序中一般不把累加器推入堆棧。若需保護累加器的內(nèi)容時,應(yīng)先把累加器的內(nèi)容存入其他寄存器單元,然后再調(diào)用子程序。(6)為了保證程序運行的安全可靠,應(yīng)考慮使用軟件抗干擾技術(shù),如數(shù)字濾波技術(shù)、指令冗余技術(shù)、軟件陷井技術(shù),用匯編語言程序?qū)崿F(xiàn)這些技術(shù),不需要增加硬件成本,可靠性高,穩(wěn)定性好,方便靈活。14.內(nèi)部RAM的20H單元開始有一個數(shù)據(jù)塊,以0DH為結(jié)束標志,試統(tǒng)計該數(shù)據(jù)塊長度,將該數(shù)據(jù)塊傳送到外部數(shù)據(jù)存儲器7E01H開始的單元,并將長度存入7E00H單元。MOVR0,#20HMOVDPTR,#7E01HLOP:MOVA,@R0MOV60H,ASUBBA,#0DHJZLOP1MOVA,60HMOVX@DPTR,AINCR3INCR0INCDPTRAJMPLOPLOP1:MOVDPTR,#7E00HMOVA,R3MOVX@DPTR,AEND15.內(nèi)部RAM的DATA開始的區(qū)域中存放著10個單字節(jié)十進制數(shù),求其累加和,并將結(jié)果存入SUM和SUM+1單元。MOVR0,#DATAMOVR3,#0AHMOVA,#0LOP:ADDA,@R0MOVR4,AADDCA,#0MOVR5,AINCR0DJNZR3,LOPMOVSUM,R4MOVSUM+1,R5END16.內(nèi)部RAM的DATA1和DATA2單元開始存放著兩個等長的數(shù)據(jù)塊,數(shù)據(jù)塊的長度在LEN單元中。請編程檢查這兩個數(shù)據(jù)塊是否相等,若相等,將0FFH寫入RESULT單元,否則將0寫入RESULT單元。MOVR0,#DATA1MOVR3,LENLOP:MOVA,@R0CJNZA,DATA2,LOP1INCR0INCDATA2DJNZR3,LOPMOVA,#0FFHMOVRESULT,AAJMPLOP2LOP1:MOVA,#0MOVRESULT,ALOP2:AJMPLOP2END17.有一輸入設(shè)備,其端口地址為20H,要求在1秒鐘時間內(nèi)連續(xù)采樣10次讀取該端口數(shù)據(jù),設(shè)計仿真電路,求其算術(shù)平均值,結(jié)果存放在內(nèi)部RAM區(qū)20H單元。設(shè)這個端口為外部數(shù)據(jù)存儲器一個單元,采用對外部數(shù)據(jù)存儲器尋址指令讀取采樣數(shù)據(jù),電路結(jié)構(gòu)參考本書8.4.1節(jié)MOVR0,#20HMOVR2,#0MOVA,#0MOVR4,#0LOP:MOVR3,#0AHIN:ACALLDELAYMOVXA,@R0MOVR2,AMOVA,R4ADDA,R2MOVR4,ADJNZR3,INMOVB,#0AHDIVABMOV20H,AAJMPLOPDELAY:MOVR5,#64H延時時間為0.1s的子程序:LOP1:MOVR7,#0FFH LOOP: NOP NOP DJNZR7,LOOPDJNZR5,LOP1 RETEND 18.編寫子程序,將內(nèi)部RAM區(qū)以30H為起始地址的連續(xù)10個存儲單元中的數(shù)據(jù),按照從小到大的順序排序,排序結(jié)果仍存放在原數(shù)據(jù)區(qū)。采用冒泡法排序:冒泡排序法的基本算法是:N個數(shù)排序,從數(shù)據(jù)存放單元的一端(如起始單元)開始,將相鄰二個數(shù)依次進行比較,如果相鄰兩個數(shù)的大小次序和排序要求一致,則不改變它們的存放次序,否則相互交換兩數(shù)位置,使其符合排序要求,這樣逐次比較,直至將最小(降序)或最大(升序)的數(shù)移至最后。然后,再將n-1個數(shù)繼續(xù)比較,重復(fù)上面操作,直至比較完畢。可采用雙重循環(huán)實現(xiàn)冒泡法排序,外循環(huán)控制進行比較的次數(shù),內(nèi)循環(huán)實現(xiàn)依次比較交換數(shù)據(jù)。程序如下:ORG 0000HBLOCK EQU30H;設(shè)BLOCK為30H單元 MOV R7,#9H;設(shè)置外循環(huán)計數(shù)器NEXT: MOVA,R7MOV80H,A MOVR6,A;設(shè)置外循環(huán)計數(shù)器 MOVR0,#30H;設(shè)置數(shù)據(jù)指針COMP: MOVA,@R0 MOVR2,A INC R0 CLR C SUBBA,@R0 JC LESS MOV A,R2 XCH A,@R0DEC R0 MOV @R0,A INC R0LESS: DJNZ R6,COMP;(R6)-1不等于0,轉(zhuǎn)COMP繼續(xù)內(nèi)循環(huán)MOV R0,#30H DEC 80HMOVR6,80h DJNZ R7,COMP RET END19.C51擴展了哪些數(shù)據(jù)類型?數(shù)據(jù)類型:sbitsfrsfr16bit.bdata20.簡述C51存儲器類型關(guān)鍵字與8051存儲空間的對應(yīng)關(guān)系。程序存儲器(code)內(nèi)部數(shù)據(jù)存儲器:data內(nèi)部RAM直接尋址128B(0x00~0x7F)idata內(nèi)部RAM間接尋址256B(0x00~0xFF)bdata內(nèi)部RAM16B(0x20~0x2F)的128位進行位尋址外部數(shù)據(jù)存儲器:xdata外部存儲器64KB的任何單元pdata訪問外部存儲器(一頁)低256B21.C51程序常用的頭文件有哪些?分別指出其主要內(nèi)容或定義。對每一類庫函數(shù),在調(diào)用該類庫函數(shù)前,用戶在源程序的include命令中應(yīng)該包含該類庫函數(shù)的頭文件名(一般安排在程序的開始)。文件包含通常還包括程序中使用的一些定義和聲明,常用的頭文件包含如下。#include<string.h> /*調(diào)用字符串處理函數(shù)需要包含的頭文件*/#include<intrins.h> /*調(diào)用本征函數(shù)(如移位函數(shù))需要包含的頭文件*/#include"stdio.h" /*調(diào)用調(diào)用輸入輸出函數(shù)需要包含的頭文件*/#include<reg51.h> /*定義51單片機內(nèi)部資源在程序中的符號表示*/#include<reg52.h> /*定義52單片機內(nèi)部資源在程序中的符號表示*/#include"math.h" /*調(diào)用數(shù)學(xué)庫函數(shù)前需要包含的頭文件*/22.什么是全局變量?什么是局部變量?所謂變量,實際上就是存儲器的某一指定數(shù)據(jù)存儲單元,由于該單元可以被賦予相應(yīng)數(shù)據(jù)類型的不同數(shù)值,所以謂稱變量。全局變量是在函數(shù)外面定義的,定義下面的函數(shù)都可以使用全局變量。局部變量是在函數(shù)內(nèi)部定義的,只有函數(shù)內(nèi)部才可以使用。23.在定義inta=1,b=1后,分別指出表達式b=a、b=a++和b=++a執(zhí)行后變量a和b的值。b=a;b=a++;a=2b=1b=++a;a=2b=227.用C51編程實現(xiàn)(1)當(dāng)P1.0輸入為高電平時,P1.2輸出控制信號燈點亮。#include<reg52.h>sbitkey1=P1^0;sbitkey2=P1^2;voidmain(){bita;for(;;){key1=1;a=key1; if(a)key2=a;}}(2)當(dāng)P1.0輸入為低電平時,P1.2輸出控制信號燈點亮。#include<reg52.h>sbitkey1=P1^0;sbitkey2=P1^2;voidmain(){bita;for(;;){key1=1;a=key1; if(a)key2=a;}}(3)P1.0外接一按鈕開關(guān)實現(xiàn)多路電子開關(guān),當(dāng)按鈕開關(guān)第1次、第2次、第3次按下時,分別控制P1.0、P1.1、P1.2輸出點亮信號燈。參考本章例3-38(4)分別編寫固定延時大約0.1s、1s、10s的無形式參數(shù)函數(shù)。voidmsec() /*秒延時函數(shù)*/{intx=1000;unsignedchari;while(x--) /*外循環(huán)*/{for(i=0;i<125;i++) /*嵌套內(nèi)循環(huán)*/{;} /*內(nèi)循環(huán)體執(zhí)行一條空語句*/}}本函數(shù)通過變量x的值可以實現(xiàn)延時。根據(jù)底層匯編代碼的分析表明,以變量i控制的內(nèi)部for循環(huán)一次大約需要(延時)8μs,循環(huán)125次約延時1ms。若傳遞給x的值為100,則該函數(shù)執(zhí)行時間約為0.1s,即產(chǎn)生約0.1s的延時;若傳遞給x的值為1000,則該函數(shù)執(zhí)行時間約為1s,即產(chǎn)生約1s的延時;若傳遞給x的值為10000,則該函數(shù)執(zhí)行時間約為10s,即產(chǎn)生約10s的延時,。在程序設(shè)計時,要注意不同的編譯器會產(chǎn)生不同的延時,可以改變內(nèi)循環(huán)變量i細調(diào)延時時間、改變外部循環(huán)變量x粗調(diào)延時時間。(5)編寫帶有形式參數(shù)的延時函數(shù),由主函數(shù)調(diào)用并傳遞參數(shù)控制延時時間。voidmsec(unsignedintx) /*秒延時函數(shù)*/{unsignedchari;while(x--) /*外循環(huán)*/{for(i=0;i<125;i++) /*嵌套內(nèi)循環(huán)*/{;} /*內(nèi)循環(huán)體執(zhí)行一條空語句*/}}main(){unsignedinta=1000;msec(a);;}28.設(shè)置P0.0~P0.3連接輸入按鍵4個,當(dāng)按下輸入端口某一位按鍵時,分別對應(yīng)調(diào)用函數(shù)h0、h1、h2、h3。參考P91函數(shù)調(diào)用29.在主函數(shù)調(diào)用一個自定義函數(shù),該函數(shù)實現(xiàn)在1s時間內(nèi)連續(xù)10次讀取P0口(8位字節(jié))數(shù)據(jù),存放在數(shù)組a中,求取平均值后返回主函數(shù)賦給變量ave。。程序如下。#defineucharunsingedcharsfrP0=0x80; /*聲明P0為特殊功能寄存器,地址為80H*/ucharaver(){uchara[10],*p=a,i,j;ucharx,y,s,ave;for(i=0;i<10;i++){*p++=P0; /*采樣10次P0口數(shù)據(jù)分別存入數(shù)組a中*/for(i=0;i<20;i++) /*每次采樣延時應(yīng)小于0.1s*/for(j=0;j<25;j++);}for(i=0;i<10;i++)s+=a[i]; /*求和*/ave=s/10;/*求平均值*/returnave; /*返回*/}30.編一個函數(shù)sum,求數(shù)組a中各元素的數(shù)據(jù)和。在main函數(shù)中輸入數(shù)組元素的數(shù)據(jù),通過調(diào)用sum函數(shù)并輸出返回的數(shù)據(jù)和。intsum(intb[],intn){inti,s=0;for(i=0;i<n;i++)s+=b[i];returns;}voidmain(){inta[10]={10,20,30,40,50,90,80,70,60,0}i,total;total=sum(a,10);printf("%d",total);}如果要求:在main()函數(shù)中分時讀取P0口輸入的10個無符號二進制數(shù)據(jù)存入數(shù)組a中,main()函數(shù)中通過調(diào)用sumr()函數(shù)并返回數(shù)據(jù)和。讀者參考以上內(nèi)容編寫程序31.編寫流水燈控制程序,要求由8051的P1口控制8個發(fā)光二極管(采用共陽極連接)左移依次輪流點亮,循環(huán)不止。C51程序如下。#include<intrins.h>#include<reg51.h>#defineucharunsignedcharvoiddelay(ucharm); //聲明延時函數(shù)delayvoidmain(){ uchars_data=0xFE; //FEH為點亮第一個發(fā)光二極管的代碼 while(1) { P1=s_data; //點亮P1.0位控制的發(fā)光二極管 s_data=_crol_(s_data,1); //左移 delay(20); //調(diào)用延時函數(shù),實參可以調(diào)整時間 }}voiddelay(ucharm) //延時函數(shù){ uchara,b,c; for(c=m;c>0;c--) for(b=20;b>0;b--)for(a=255;a>0;a--); //三層循環(huán)}如果要求循環(huán)左移后再循環(huán)右移,循環(huán)不止,讀者參考以上自行編寫。32.在while()循環(huán)體中,使用選擇結(jié)構(gòu)編寫程序,當(dāng)P0口通過鍵盤輸入的數(shù)字為1、2、3、4時,分別調(diào)用函數(shù)f1()、f2()、f3()、f4(),當(dāng)輸入數(shù)字0時,循環(huán)等待。#include<reg51.h>voidmain(){unsignedchana=0xff;while(1){;P0=a;a=P0:switch(a){case1:f1();break;case2:f2();break;case3:f3();break;case4:f4();break;case0:break;default:break;}}33.要求用P1口控制8支LED發(fā)光二極管,每一支LED實現(xiàn)左移循環(huán)點亮,緊接著右移循環(huán)點亮,循環(huán)不止。設(shè)計仿真電路,編寫控制程序,進行仿真調(diào)試。參考:本習(xí)題31題。第4章4.6思考與練習(xí)1.51系列單片機能提供幾個中斷源、幾個中斷優(yōu)先級?各個中斷源的優(yōu)先級怎樣確定?在同一優(yōu)先級中,各個中斷源的優(yōu)先順序怎樣確定?答:51系列單片機能提供5個中斷源,2個中斷優(yōu)先級。各個中斷源的優(yōu)先級是由特殊功能寄存器IP來確定,IP中和各個中斷源對應(yīng)位為1時,此中斷源為高優(yōu)先級,否則為低優(yōu)先級。在同一優(yōu)先級中,各個中斷源的優(yōu)先順序是由自然優(yōu)先級來確定的。2.簡述51系列單片機的中斷響應(yīng)過程。答:51系列單片機的中斷響應(yīng)過程是按照以下順序執(zhí)行的:開中斷中斷請求中斷判斷中斷響應(yīng)中斷返回。3.51系列單片機的外部中斷有哪兩種觸發(fā)方式?如何設(shè)置?對外部中斷源的中斷請求信號有何要求?答:51系列單片機的外部中斷有電平觸發(fā)和邊沿觸發(fā)兩種方式。是由特殊功能寄存器TCON中IT0、IT1的狀態(tài)確定的,如:IT0為1時外部中斷0為邊沿觸發(fā)方式,當(dāng)INT0外部引腳出現(xiàn)下降沿時向CPU提出中斷請求,否則為電平觸發(fā)方式,當(dāng)INT0外部引腳出現(xiàn)低電平時向CPU提出中斷請求。4.4.簡述外部中斷的控制位有哪些?作用是什么?外部中斷0。來自P3.2引腳的中斷請求輸入信號。外部中斷1。來自P3.3引腳的中斷請求輸入信號。對外部中斷1的控;IE1(TCON.3):外部中斷(P3.3)請求標志位。IT1(TCON.2):外部中斷觸發(fā)方式控制位。由軟件來置1或清0,以確定外部中斷1的觸發(fā)類型。對外部中斷0的控制;IE0(TCON.1):外部中斷0()請求標志位。當(dāng)引腳上出現(xiàn)中斷請求信號時,由硬件置位IE0,向CPU申請中斷。當(dāng)CPU響應(yīng)中斷后,如果采用沿觸發(fā)方式,則IE0被硬件自動清0;如果采用電平觸發(fā)方式,IE0是不能自動清0的。IT0(TCON.0):外部中斷0()觸發(fā)方式控制位,由軟件置位或復(fù)位。IT0=1,外部中斷0為邊沿觸發(fā)方式;IT0=0,外部中斷0為電平觸發(fā)方式。5.51單片機中斷響應(yīng)時間是否固定?為什么?答:51單片機中斷響應(yīng)時間不固定,因為當(dāng)中斷源向CPU提出中斷請求時,CPU正在執(zhí)行的指令的指令周期是不一樣的。6.51單片機如果擴展5個中斷源,可采用哪些方法?如何確定它們的優(yōu)先級?答:通過外部中斷申請中斷(參考圖4-8),一般可采取中斷加查詢方式,軟件先查詢到的為高優(yōu)先級,最后查詢到的為低優(yōu)先級。7.試用中斷技術(shù)設(shè)計8支發(fā)光二極管LED閃爍電路,閃爍周期為2s,要求亮1s再暗1s。要求:開關(guān)K按下實現(xiàn)外部中斷請求,中斷處理程序功能控制閃爍。設(shè)開關(guān)K控制P3.2為低電平或下降沿觸發(fā)作為外部中斷0請求信號。當(dāng)IT0=1時,為下降沿觸發(fā),K按下后不管是否彈起,僅中斷一次,中斷處理程序執(zhí)行完后返回主程序;當(dāng)IT0=0時,為低電平觸發(fā),K按下后如果鎖?。ū3值碗娖剑瑢⑦B續(xù)執(zhí)行中斷操作,只有在開關(guān)彈起后并且最后一次的中斷處理程序執(zhí)行完后返回主程序。外部中斷0電路如圖4-11所示。圖4-11外部中斷0電路程序設(shè)計C51程序如下。#include<reg51.h>#include<intrins.h>#defineuint8unsignedchar#defineLEDP1voiddelay(uint8m);voidinit();voidmain(){init();while(1);}voidinit() //中斷初始化{ EX0=1; //允許外部中斷0中斷 IT0=1; //外部中斷采用下降沿觸發(fā), EA=1; //CPU開中斷}voiddelay(uint8m)//設(shè)計延時函數(shù),時間自定{uint8a,b,c;for(c=m;c>0;c--)for(b=142;b>0;b--)for(a=2;a>0;a--);}voidex0()interrupt0using1 //外部中斷0服務(wù)程序{while(1) {LED=0x00; //8支LED同時閃爍,如果一支燈閃爍,此句可以修改為:LED=0xfe delay(200); LED=0xff; delay(200);} }8.當(dāng)正在執(zhí)行某一中斷源的中斷服務(wù)程序時,如果有新的中斷請求出現(xiàn),問在什么情況下可響應(yīng)新的中斷請求?在什么情況下不能響應(yīng)新的中斷請求?答:當(dāng)正在執(zhí)行某一中斷源的中斷服務(wù)程序時,如果有新的中斷請求出現(xiàn),當(dāng)新中斷源中斷級別比正在執(zhí)行中斷源的中斷級別高時可響應(yīng)新的中斷請求,否則不能響應(yīng)新的中斷請求。9.使用8051外部中斷0請求,在中斷服務(wù)程序中讀取P1口數(shù)據(jù);然后使用外部中斷1請求,在中斷服務(wù)程序中將讀入的P1口數(shù)據(jù)由P0口輸出。答:匯編語言程序:ORG 0000HAJMP START ;跳到主程序起始地址ORG 0003H ;中斷矢量地址AJMP EXT0 ;轉(zhuǎn)到子程序起始地址ORG 0013H ;中斷矢量地址AJMP EXT1 ;轉(zhuǎn)到子程序起始地址START: MOV IE,#10000101B ;允許、中斷,CPU開中斷MOV IP,#00000001B ;為高優(yōu)先級MOV TCON,#00H ;、為電平觸發(fā)方式MOV SP,#7H ;設(shè)定堆棧指針EXT0: PUSHACCMOVP1,#0FFHMOV A,P1 POPACCRETIEXT1: PUSHACCMOVP1,APOPACCRETIENDC51程序讀者自行完成。10.在單片機流水燈硬件電路運行情況下,利用外部中斷1(P3.2或P3.3)實現(xiàn)控制主程序(流水燈循環(huán)右移)的單步執(zhí)行,觀察運行結(jié)果。單步執(zhí)行程序段:voidinit() //中斷初始化{ EX0=1; //允許外部中斷0中斷 IT0=0; //外部中斷采用電平觸發(fā)(單步執(zhí)行設(shè)置為電平觸發(fā)), EA=1; //CPU開中斷}voidex0()interrupt0using1 //外部中斷0服務(wù)程序{;; sbita=P3^2;//在中斷服務(wù)程序的末尾加上以下程序段//即可完成對主程序指令的單步操作。while(!a);while(a);}11.用C51編寫外部中斷“0”的中斷函數(shù),該中斷函數(shù)的功能實現(xiàn)從P1口讀入8位數(shù)據(jù)存放在一數(shù)組中,如果數(shù)據(jù)全為0,置P2.1輸出1,否則P2.1輸出0。設(shè)計仿真電路,編寫控制程序,進行仿真調(diào)試。Proteus仿真電路,P1口通過8位開關(guān)(按下為0,彈起為1)設(shè)置8位二進制數(shù)據(jù)。#include<reg51.h>typedefunsignedcharuint8;typedefunsignedintuint16;uint8getdata[10];uint16sum;sbitOUT=P2^1;voiddelay(){inta,b,c;for(a=0;a<500;a++)for(b=0;b<500;b++)for(c=0;c<300;c++);//通過改變數(shù)據(jù)調(diào)整延時時間}voidmain(){ EX0=1; IT0=1; EA=1; while(1) { if(sum!=0) OUT=0; else OUT=1;}}voidEx0()interrupt0{ uint8i; sum=0; for(i=0;i<10;i++) { getdata[i]=P1; sum+=getdata[i]; delay();//延時,保證每次輸入數(shù)據(jù)準備好。 }}第5章5.5.思考與練習(xí)1.51單片機定時器/計數(shù)器有哪幾種工作模式?各有什么特點?答:8051定時器/計數(shù)器有0,1,2,3四種工作模式。模式0為13位1定時器/計數(shù)器,模式1為16位1定時器/計數(shù)器,模式2為自動賦初值的8位定時器/計數(shù)器,模式3可以增加一個8位定時器(T1沒有模式3)。2.51定時器作定時和計數(shù)時,其計數(shù)脈沖分別由什么信號提供?答:8051定時器作定時器時,輸入的記數(shù)脈沖是由晶體振蕩器的輸出經(jīng)12分頻后得到的,所以定時器可看作是對單片機機器周期的計數(shù)器。8051定時器作計數(shù)器時,則對外部事件進行計數(shù)。3.參考教材P134、135.4.定時器/計數(shù)器0已預(yù)置為156,且選定用于模式2的計數(shù)方式,現(xiàn)在T0引腳上輸入周期為1ms的脈沖,問:(1)此時定時器/計數(shù)器0的實際用途是什么?(2)在什么情況下,定時器/計數(shù)器0溢出?答:(1)此時定時器/計數(shù)器0的實際用途是0.1S脈沖信號發(fā)生器。(2)當(dāng)T0每計數(shù)100次后定時器/計數(shù)器0溢出。5.設(shè)fosc=12MHz,定時器0的初始化程序和中斷服務(wù)程序如下:MAIN: MOV TH0,#9DHMOV TL0,#0D0HMOV TMOD,#01HSETB TR0 …中斷服務(wù)程序:MOV TH0,#9DHMOV TL0,#0D0H…RETI問:(1)該定時器工作于什么方式?(2)相應(yīng)的定時時間或計數(shù)值是多少?答:(1)該定時器以模式1工作于定時方式。(2)相應(yīng)的定時時間為25.136ms.3)讀者自行編寫C51程序。6.8051單片機的fosc=6MHz,如果要求定時時間分別位0.1ms和5ms,當(dāng)T0工作在模式0、模式1和模式2時,分別求出定時器的初值。答:(1)定時時間分別位0.1ms時:模式0初值為8142、模式1初值為65486,模式2初值206。(2)定時時間分別位5ms時:模式0初值為5692、模式1初值為63036,模式2此時定時時間不夠。當(dāng)單片機的fosc=12MHz時,參考以上,讀者自行計算定時器初值。7.以定時器1進行外部事件計數(shù),每計數(shù)1000個脈沖后,定時器1轉(zhuǎn)為定時工作方式。定時10ms后,又轉(zhuǎn)為計數(shù)方式,如此循環(huán)不止。設(shè)fosc=6MHz,試用模式1編程。解:先確定T1作為計數(shù)器時初值為:64536(0FC68H)T1作為定時器時初值為:60536(0EC78H)程序:SETBTR1LOOP:MOVTMOD,#50HMOVTH1,#0FCHMOVTL1,#68HAA:JBCTF1,AAMOVTMOD,#10HMOVTH1,#0E0HMOVTL1,#78HBB:JBCTF1,BBSJMPLOOPEND8.已知8051單片機的fosc=6MHz,試利用T0和P1.0輸出矩形波。矩形波高電平寬100μs,低電平寬300μs。解:先確定T0作為定時器工作于模式2時初值為:高電平為50,低電平為150。采用中斷方式編程。ORG0000HAJMPMAINORG001BHAJMPTIM0ORG0030HMAIN:MOVSP,#30H;設(shè)置棧底MOVTMOD,#02HMOVTL0,#50MOVIE,#82HSETBP1.0SETBTR0SJMP$ORG0100HTIM0:JNBP1.0,AACLRP1.0MOVTL0,#150RETIAA:SETBP1.0MOVTL0,#50RETIEND9.設(shè)fosc=12MHz,試編寫一段程序,功能為:對定時器T0初始化,使之工作在模式2,產(chǎn)生200μs定時,并用查詢T0溢出標志的方法,控制P1.1輸出周期為2ms的方波。解:先確定T0作為定時器時初值為:56程序:MOVTMOD,#02HMOVTL0,#56MOVTH0,#56MOVR7,#5;設(shè)置循環(huán)次數(shù)SETBTR0AA:JBCTF0,AADJNZR7,AACPLP1.1MOVR7,#5SJMPAAEND10.已知8051單片機系統(tǒng)時鐘頻率為12MHz,利用其定時器測量某正脈沖寬度時,采用哪種工作模式可以獲得最大的量程?能夠測量的最大脈寬是多少?答:首先設(shè)置TMOD中GATE為1,以定時方式工作在模式1,外部正脈沖從外部中斷引腳引入,可獲得最大的量程。當(dāng)時鐘頻率為6MHz時能夠測量的最大脈寬為:131ms.。當(dāng)時鐘頻率為12MHz時,計算方法參考以上。11.設(shè)計一個以時間秒為單位的倒計時計數(shù)器。要求如下。1)P2.0(按鈕輸入次數(shù))分別控制設(shè)置計時時間、啟動計時及復(fù)位。2)P0口顯示2位數(shù)字(秒)計時時間。3)P1口輸入需要設(shè)置的計時時間。4)計時時間到,P2.7輸出低電平驅(qū)動LED顯示。本題讀者參考以下內(nèi)容自行完成:1)參考I/O端口LED顯示、應(yīng)用和定時器(產(chǎn)生秒單位發(fā)生);2)參考本書10.2.2秒計時器;仿真電路如圖10-14所示。圖10-14“秒”計時器仿真電路C51控制程序如下。#include<AT89X51.H>unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};/*七段數(shù)碼管譯碼表*/unsignedcharsecond;unsignedcharkeycnt;unsignedinttcnt;voidmain(void){unsignedchari,j;TMOD=0x02;/*定時器T0工作在方式2*/ET0=1;/*允許定時器T0中斷*/EA=1;/*CPU開中斷*/second=0;/*設(shè)置秒變量初值*/P0=dispcode[second/10];/*顯示定時值的十位*/P2=dispcode[second%10];/*顯示定時值的個位*/while(1){if(P3_4==0)/*P3.4引腳連接的按鍵按下*/{for(i=20;i>0;i--) for(j=248;j>0;j--);if(P3_4==0)/*如果按鍵確實按下*/{keycnt++;/*次數(shù)變量加1*/switch(keycnt){case1:TH0=0x06;TL0=0x06;TR0=1;break;/*啟動定時器T0運行*/case2:TR0=0;break; /*停止定時器T0運行*/case3:keycnt=0;second=0;break;}while(P3_4==0);/*等待按鍵抬起*/}}P0=dispcode[second/10];P2=dispcode[second%10];}}voidt0(void)interrupt1using0 /*定時器T0中斷服務(wù)程序*/{tcnt++; /*每中斷1次,tcnt加1*/if(tcnt==400){tcnt=0; /*將tcnt清零*/second++; /*秒變量加1*/if(second==100) /*如果秒變量等于100*/second=0; /*秒變量清零*/}}匯編語言控制程序如下:SECEQU40HTCOEQU41HKCOEQU42HKEYBITP3.4ORG0000HLJMPSTARTORG000BHLJMPINT_T0START:MOVDPTR,#TABLEMOVP0,#3FH;開始顯示“00”MOVP2,#3FHMOVSEC,#00HMOVTCO,#00HMOVKCO,#00HMOVTMOD,#01H ;設(shè)T0工作于方式1MOVTL0,#0DCH ;賦初值MOVTH0,#0BHK1: JBKEY,$ ;等待按鍵MOVA,KCOCJNEA,#00H,K2 ;第一次按鍵,啟動T0SETBEASETBTR0SETBET0JNBKEY,$INCKCOLJMPK1K2:CJNEA,#01H,K3;第二次按鍵,關(guān)閉T0CLRTR0CLRET0CLREAJNBKEY,$INCKCOK3:CJNEA,#02H,K1;第三次按鍵,返回初始狀態(tài)JNBKEY,$LJMPSTARTINT_T0:MOVTL0,#0DCHMOVTH0,#0BHINCTCOMOVA,TCOCJNEA,#02H,IN2MOVTCO,#00HINCSECMOVA,SECCJNEA,#100,IN1MOVSEC,#00HIN1:MOVA,SECMOVB,#10DIVABMOVCA,@A+DPTR ;顯示時間MOVP0,AMOVA,BMOVCA,@A+DPTRMOVP2,AIN2:RETITABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDELAY:MOVR6,#20D1:MOVR7,#248DJNZR7,$DJNZR6,D1RETEND12.設(shè)計由P1.0端口控制某工業(yè)指示燈(指示燈工作電壓24VDC,額定電流0.5ADC)按1s周期閃亮。要求如下。1)畫出硬件仿真電路(注意輸出接口加驅(qū)動器)。2)采用定時器查詢方法編寫控制程序并仿真調(diào)試。3)采用定時器中斷方法編寫控制程序并仿真調(diào)試。輸出驅(qū)動參考第7章圖7-18.控制程序參考第5章5.4.1-4查詢方式和5.4.1-5中斷方式。讀者可以自行參考相關(guān)內(nèi)容完成.作者在電子資源更新時相繼增加、完善和擴充習(xí)題解答。第6章6.5思考與練習(xí)2.解釋下列概念:(1)并行通信、串行通信。(2)波特率。(3)單工、半雙工、全雙工。(4)奇偶校驗。答案:(1)并行通信:數(shù)據(jù)的各位同時進行傳送。其特點是傳送速度快、效率高,數(shù)據(jù)有多少位,就需要有多少根傳輸線。當(dāng)數(shù)據(jù)位數(shù)較多和傳送距離較遠時,就會導(dǎo)致通信線路成本提高,因此它適合于短距離傳輸。串行通信:數(shù)據(jù)一位一位地按順序進行傳送。其特點是只需一對傳輸線就可實現(xiàn)通信,當(dāng)傳輸?shù)臄?shù)據(jù)較多、距離較遠時,它可以顯著減少傳輸線,降低通信成本,但是串行傳送的速度慢。(2)波特率:每秒鐘傳送的二進制數(shù)碼的位數(shù)稱為波特率(也稱比特數(shù)),單位是bps(bitpersecond),即位/秒。(3)單工:只允許數(shù)據(jù)向一個方向傳送,即一方只能發(fā)送,另一方只能接收。半雙工:允許數(shù)據(jù)雙向傳送,但由于只有一根傳輸線,在同一時刻只能一方發(fā)送,另一方接收。全雙工:允許數(shù)據(jù)同時雙向傳送,由于有兩根傳輸線,在A站將數(shù)據(jù)發(fā)送到B站的同時,也允許B站將數(shù)據(jù)發(fā)送到A站。(4)奇偶校驗:為保證通信質(zhì)量,需要對傳送的數(shù)據(jù)進行校驗。對于異步通信,常用的校驗方法是奇偶校驗法。3.51單片機串行口控制寄存器SCON中SM2、TB8、RB8有何作用?主要在哪幾種方式下使用?答案:SM2:多機通信控制位,主要在方式1、2、3下使用,僅在2.3下使用;TB8:存放發(fā)送數(shù)據(jù)的第9位,主要在方式2、3下使用;RB8:存放接收數(shù)據(jù)的第9位或停止位,主要在方式1、2、3下使用,僅在2.3下使用;。4.試分析比較51單片機串行口在四種工作方式下發(fā)送和接收數(shù)據(jù)的基本條件和波特率的產(chǎn)生方法。答案:發(fā)送數(shù)據(jù)的基本條件:方式0、1、2、3:CPU執(zhí)行一條將數(shù)據(jù)寫入發(fā)送緩沖器SBUF的指令;接收數(shù)據(jù)的基本條件:方式0:用軟件使REN=1(同時RI=0);方式1:用軟件使REN=1,一幀數(shù)據(jù)接收完畢后,必須同時滿足以下兩個條件:①RI=0;②SM2=0或接收到的停止位為1,這次接收才真正有效,將8位數(shù)據(jù)送入SBUF,停止位送RB8,置位RI。否則,這次接收到的數(shù)據(jù)將因不能裝入SBUF而丟失。方式2、3:軟件使REN=1,同時滿足以下兩個條件:①RI=0;②SM2=0或接收到的第9位數(shù)據(jù)為1(SM2=1),則這次接收有效,8位數(shù)據(jù)裝入SBUF,第9位數(shù)據(jù)裝入RB8,并由硬件置位RI。否則,接收的這一幀數(shù)據(jù)將丟失。波特率的產(chǎn)生方法:在方式0下,串行口的波特率是固定的,即波特率=fosc/12;在方式1、3下,串行口波特率由定時器T1的溢出率和SMOD值同時決定。相應(yīng)公式為:波特率=2SMOD×T1溢出率/32;在方式2下,串行口的波特率可由PCON中的SMOD位控制:若使SMOD=0,則所選波特率為fosc/64;若使SMOD=1,則波特率為fosc/32。即22SMOD64×fosc波特率=5.為何T1用作串行口波特率發(fā)生器時常用模式2?若fosc=6MHz,試求出T1在模式2下可能產(chǎn)生的波特率的變化范圍。答案:定時器T1作為波特率發(fā)生器可工作于模式0、模式1和模式2(模式1、3)。其中模式2在T1溢出后可自動裝入時間常數(shù),避免了重裝參數(shù),因而在實際應(yīng)用中除非波特率很低,一般都采用模式2。若fosc=6MHz,T1在模式2下可能產(chǎn)生的波特率的變化范圍為:61.04bps~15625bps。7.試用51單片機串行口方式0擴展并行輸出口,控制16個發(fā)光二極管自右向左以一定速度輪流發(fā)光,設(shè)計仿真電路,編寫控制程序,進行仿真調(diào)試。答案:電路如下:程序如下:ORG0000HAJMPMAINORG 0023HAJMP SBS ;轉(zhuǎn)向串行口中斷服務(wù)程序ORG 2000HMAIN:MOV SCON,#00H ;串行口設(shè)置為方式0MOV A,#01H ;最右邊一位發(fā)光二極管先亮CLR P1.0 ;關(guān)閉并行輸出,熄滅顯示CLR P1.1 MOV SBUF,A ;開始串行輸出LOOP: SJMP LOOP ;等待中斷SBS: INCR0CJNER0,#11H,DSPMOVR0,#01HDSP:CJNER0,#08H,DSPRSETB P1.1 ;啟動高8位并行輸出DSPR:SETB P1.0 ;啟動低8位并行輸出ACALL DELY ;顯示延遲1sCLR TI ;清發(fā)送中斷標志RL A ;準備點亮下一位CLR P1.0 ;關(guān)閉并行輸出,熄滅顯示CLR P1.1 MOV SBUF,A ;串行輸出ZDFH:RETIDELY: MOV R2,#05H ;延時1s子程序(fosc=6MHz)DELY0: MOV R3,#0C8HDELY1: MOV R4,#0F8HNOPDELY2: DJNZ R4,DELY2DJNZ R3,DELY1DJNZ R2,DELY0RETEND8.試設(shè)計一個8051單片機的雙機通信系統(tǒng),串行口工作在方式1,波特率為2400bps,編程將U1片內(nèi)RAM中40H~4FH的數(shù)據(jù)塊通過串行口傳送到U2片內(nèi)RAM的40H~4FH單元中。答案:雙方約定的通信協(xié)議如下:甲機先發(fā)送請求乙機接收信號“0AAH”,乙機收到該信號后,若為準備好狀態(tài),一個則發(fā)送數(shù)據(jù)“0BBH”作為應(yīng)答信號,表示同意接收。當(dāng)甲機發(fā)送完16個字節(jié)后,再向乙機發(fā)送一個累加校驗和。校驗和是針對數(shù)據(jù)塊進行的,即在數(shù)據(jù)發(fā)送時,發(fā)送方對塊中的數(shù)據(jù)簡單求和,產(chǎn)生一個單字節(jié)校驗字符(校驗和),附加到數(shù)據(jù)塊結(jié)尾。在數(shù)據(jù)接收時,接收方每接收一個數(shù)據(jù)也計算一次校驗和;接收完數(shù)據(jù)塊后,再接收甲機發(fā)送的校驗和,并將接收到的校驗和與乙機求出的校驗和進行比較,向甲機發(fā)送一個狀態(tài)字,表示正確(00H)或出錯(0FFH),出錯則要求甲機重發(fā)。甲機收到收到乙機發(fā)送的接收正確應(yīng)答信號(00H)后,即結(jié)束發(fā)送,否則,就重發(fā)一次數(shù)據(jù)。甲機采用查詢方式進行數(shù)據(jù)發(fā)送,乙機采用中斷方式進行數(shù)據(jù)接收。雙方約定傳輸波特率為2400bps,兩機主頻均為11.059MHz,雙機串行口都工作于方式1,查表6-2可知SMOD=0,定時器T1采用工作模式2,初值為F4H。(程序不完整)甲機發(fā)送子程序:ORG 2000HSEND: MOV TMOD,#20H ;定時器1設(shè)為模式2MOV TL1,#0F4HMOV TH1,#0F4H ;置定時器初值SETB TR1 ;啟動T1MOV SCON,#50H ;設(shè)串行口為方式2MOV PCON,#00H ;SMOD=0TLLS:MOV SBUF,#0AAH ;發(fā)送請求接收信號WFS1:JBC TI,RYD1;等待發(fā)送SJMPWFS1RYD1:JBC RI,RYD2;等待乙機回答SJMPRYD1RYD2:MOVA,SBUF;接收應(yīng)答信號XRLA,#0BBHJNZTLLS;乙機未準備好,繼續(xù)聯(lián)絡(luò)SDD1:MOV R0,#40H ;首地址40H→R0MOV R1,#10H ;數(shù)據(jù)個數(shù)→R1MOV R2,#00H ;清校驗和寄存器SDD2:MOV SBUF,@R0 ;發(fā)送一個數(shù)據(jù)MOV A,R2ADD A,@R0 ;求校驗和MOV R2,A ;保存校驗和INC

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論