單片機原理及應(yīng)用(張毅剛)完整答案[1]_第1頁
單片機原理及應(yīng)用(張毅剛)完整答案[1]_第2頁
單片機原理及應(yīng)用(張毅剛)完整答案[1]_第3頁
單片機原理及應(yīng)用(張毅剛)完整答案[1]_第4頁
單片機原理及應(yīng)用(張毅剛)完整答案[1]_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第一章第一章 單片機概述單片機概述 1.2 除了單片機這一名稱之外,單片機還可稱為(微控制器)和(嵌入式控制器) 。 1.3 單片機與普通計算機的不同之處在于其將(微處理器) 、 (存儲器)和(各種輸入輸出 接口)三部分集成于一塊芯片上。 1.4 單片機的發(fā)展大致分為哪幾個階段? 答:單片機的發(fā)展歷史可分為四個階段: 第一階段(1974 年1976 年) :單片機初級階段。 第二階段(1976 年1978 年) :低性能單片機階段。 第三階段(1978 年現(xiàn)在) :高性能單片機階段。 第四階段(1982 年現(xiàn)在) :8 位單片機鞏固發(fā)展及 16 位單片機、32 位單片 機推出階段 1.5 單片

2、機根據(jù)其基本操作處理的位數(shù)可分為哪幾種類型? 答:單片機根據(jù)其基本操作處理的位數(shù)可分為:1 位單片機、4 位單片機、8 位單片 機、16 位單片機和 32 位單片機。 1.6 mcs-51 系列單片機的基本芯片分別為哪幾種?它們的差別是什么? 答:基本芯片為 8031、8051、8751。 8031 內(nèi)部包括 1 個 8 位 cpu、128b ram,21 個特殊功能寄存器(sfr) 、4 個 8 位并行 i/o 口、 1 個全雙工串行口, 2 個 16 位定時器/計數(shù)器,但片內(nèi)無程 序存儲器,需外擴 eprom 芯片。 8051 是在 8031 的基礎(chǔ)上, 片內(nèi)又集成有 4kb rom, 作

3、為程序存儲器, 是 1 個 程序不超過 4kb 的小系統(tǒng)。 8751 是在 8031 的基礎(chǔ)上,增加了 4kb 的 eprom,它構(gòu)成了 1 個程序小于 4kb 的小系統(tǒng)。用戶可以將程序固化在 eprom 中,可以反復(fù)修改程序。 1.7 mcs-51 系列單片機與 80c51 系列單片機的異同點是什么? 答:共同點為它們的指令系統(tǒng)相互兼容。不同點在于 mcs-51 是基本型,而 80c51 采 用 cmos 工藝,功耗很低,有兩種掉電工作方式,一種是 cpu 停止工作,其它 部分仍繼續(xù)工作;另一種是,除片內(nèi) ram 繼續(xù)保持?jǐn)?shù)據(jù)外,其它部分都停止工 作。 1.8 8051 與 8751 的區(qū)別

4、是(c) (a)內(nèi)部數(shù)據(jù)存儲單元數(shù)目的不同 (b)內(nèi)部數(shù)據(jù)存儲器的類型不同 (c)內(nèi)部程序存儲器的類型不同 (d)內(nèi)部的寄存器的數(shù)目不同 1.9 在家用電器中使用單片機應(yīng)屬于微型計算機的(b) (a)輔助設(shè)計應(yīng)用 (b)測量、控制應(yīng)用 (c)數(shù)值計算應(yīng)用 (d)數(shù)據(jù)處理應(yīng)用 1.10 說明單片機主要應(yīng)用在哪些領(lǐng)域? 答:單片機主要運用領(lǐng)域為:工業(yè)自動化;智能儀器儀表;消費類電子產(chǎn)品;通信方 面;武器裝備;終端及外部設(shè)備控制;多機分布式系統(tǒng)。 第二章第二章 mcs-51 單片機的硬件結(jié)構(gòu)單片機的硬件結(jié)構(gòu) 2.1 mcs-51 單片機的片內(nèi)都集成了哪些功能部件?各個功能部件的最主要的功能是什么?

5、答: 功能部件如下: 微處理器 (cpu) ; 數(shù)據(jù)存儲器 (ram) ; 程序存儲器 (rom/eprom,8031 沒有此部件) ,4 個 8 位并行 i/o 口(p0 口、p1 口、p2 口、p3 口) ;1 個全雙工的串行口; 2 個 16 位定時器/計數(shù)器;中斷系統(tǒng);21 個特殊功能寄存器(sfr) 。 各部件功能:cpu(微處理器)包括了運算器和控制器兩大部分,還增加了面向 控制的處理功能,不僅可處理字節(jié)數(shù)據(jù),還可以進(jìn)行位變量的處理;數(shù)據(jù)存儲器 (ram)片內(nèi)為 128b(52 系列的為 256b) ,片外最多可外擴 64kb。數(shù)據(jù)存儲 器來存儲單片機運行期間的工作變量、運算的中間

6、結(jié)果、數(shù)據(jù)暫存和緩沖、標(biāo)志 位等;程序存儲器(rom/eprom)用來存儲程序;中斷系統(tǒng)具有 5 個中斷源, 2 級中斷優(yōu)先權(quán);定時器/計數(shù)器用作精確的定時,或?qū)ν獠渴录M(jìn)行計數(shù);串行 口可用來進(jìn)行串行通信,擴展并行 i/o 口,還可以與多個單片機相連構(gòu)成多機系 統(tǒng),從而使單片機的功能更強且應(yīng)用更廣;特殊功能寄存器用于 cpu 對片內(nèi)各 功能部件進(jìn)行管理、控制、監(jiān)視。 2.2 說明 mcs-51 單片機的引腳ea的作用,該引腳接高電平和接低電平時各有何種功能? 答:當(dāng)該引腳為高電平時,單片機訪問片內(nèi)程序存儲器,但在 pc(程序計數(shù)器)值超過 0fffh(對于 8051、8751)時,即超出片內(nèi)

7、程序存儲器的 4kb 地址范圍時,將自動轉(zhuǎn)向執(zhí)行外部程序存儲器內(nèi)的程序。當(dāng)該引腳為低電平時,單片機則只訪問外部程序存儲器,不論是否有內(nèi)部程序存儲器。對于 8031 來說,因其無內(nèi)部程序存儲器,所以該引腳必須接地,這樣只能選擇外部程序存儲器。 2.3 mcs-51 的時鐘振蕩周期和機器周期之間有何關(guān)系? 答:每 12 個時鐘周期為 1 個機器周期。 2.4 在 mcs-51 單片機中,如果采用 6 mhz 晶振,1 個機器周期為(2s) 。 2.5 程序存儲器的空間里,有 5 個單元是特殊的,這 5 個單元對應(yīng) mcs-51 單片機 5 個中斷源的中斷入口地址,請寫出這些單元的地址以及對應(yīng)的中斷

8、源。 中斷源 入口地址 外部中斷 0(int0) 0003h 定時器 0(t0) 000bh 外部中斷 1(int1) 0013h 定時器 1(t1) 001bh 串行口 0023h 表 2-1 5 種中斷源的中斷入口地址 2.6 內(nèi)部 ram 中,位地址為 30h 的位,該位所在字節(jié)的字節(jié)地址為(26h) 。 2.7 若 a 中的內(nèi)容為 63h,那么,p 標(biāo)志位的值為(0) 。 2.8 判斷下列說法是否正確: (a)8031 的 cpu 是由 ram 和 eprom 所組成。 (x) (b)區(qū)分片外程序存儲器和片外數(shù)據(jù)存儲器的最可靠的方法是看其位于地址范圍的低端還 是高端。 (x) (c)在

9、 mcs-51 中,為使準(zhǔn)雙向的 i/o 口工作在輸入方式,必須保證它被事先預(yù)置為 1。 () (d)pc 可以看成是程序存儲器的地址指針。 () 2.9 8031 單片機復(fù)位后, r4 所對應(yīng)的存儲單元的地址為 (04h) , 因上電時 psw= (00h) 。 這時當(dāng)前的工作寄存器區(qū)是(0)組工作寄存器區(qū)。 2.10 什么是機器周期? 1 個機器周期的時序是如何來劃分的?如果采用 12mhz 晶振,1個機器周期為多長時間? 答:cpu 完成一個基本操作所需要的時間稱為機器周期。時序劃分:一個機器周期包括 12 個時鐘周期, 分為 6 個狀態(tài); s1-s6。 每個狀態(tài)又分為 2 拍; p1

10、和 p2。因此,1 個機器周期中的 12 個時鐘周期表示為:s1p1、s1p2、s2p1、s2p2、s6p2。如果采用 12mhz 晶振,1 個機器周期為 1s。 2.11 判斷以下有關(guān) pc 和 dptr 的結(jié)論是否正確? (a)dptr 是可以訪問的,而 pc 不能訪問。 (x) (b)它們都是 16 位的寄存器。 () (c)它們都具有加 1 的功能。 () (d)dptr 可以分為 2 個 8 位寄存器使用,但 pc 不能。 () 2.12 內(nèi)部 ram 中,哪些單元可作為工作寄存器區(qū),哪些單元可以進(jìn)行位尋址?寫出它們的字節(jié)地址。 答:地址為 00h-1fh 的 32 個單元是 4 組

11、通用工作寄存器區(qū),每個區(qū)包括 8 個 8 位工作寄存器, 編號為 r0r7。 字節(jié)地址為 20h2fh 的 16 個單元可進(jìn)行 128 位的位尋址,這些單元構(gòu)成了 1 位處理機的存儲器空間。位地址范圍是 00h7fh。 2.13 使用 8031 單片機時,需將ea引腳接(低)電平,因為其片內(nèi)無(程序)存儲器。 2.14 片內(nèi) ram 低 128 個單元劃分為哪 3 個主要部分?各部分的主要功能是什么? 答:字節(jié)地址為 00h1fh 的 32 個單元是 4 組通用工作寄存器區(qū),每個區(qū)包括 8個 8 位工作寄存器,編號為 r0r7??梢酝ㄟ^改變 psw 中的 rs1、rs0 來切換當(dāng)前的工作寄存器

12、區(qū), 這種功能給軟件設(shè)計帶來極大的方便, 特別是在中斷嵌套時,為實現(xiàn)工作寄存器現(xiàn)場內(nèi)容保護提供了方便;字節(jié)地址為 20h2fh 的 16個單元可進(jìn)行工 128 位的位尋址, 這些單元構(gòu)成了 1 位處理機的存儲器空間; 字節(jié)地址為 30h7fh 的單元為用戶 ram 區(qū),只能進(jìn)行字節(jié)尋址。用于作為數(shù)據(jù)緩沖區(qū)以及堆棧區(qū)。 2.15 判斷下列說法是否正確 (a)程序計數(shù)器 pc 不能為用戶編程時直接使用,因為它沒有地址。 () (b)內(nèi)部 ram 的位尋址區(qū),只能供位尋址使用,而不能供字節(jié)尋址使用。 (x) (c)8031 共有 21 個特殊功能寄存器,它們的位都是可用軟件設(shè)置的,因此,是可以進(jìn)行位

13、尋址的。 (x) 2.16 pc 的值是: (c) (a)當(dāng)前正在執(zhí)行指令的前一條指令的地址 (b)當(dāng)前正在執(zhí)行指令的地址 (c)當(dāng)前正在執(zhí)行指令的下一條指令的地址 (d)控制器中指令寄存器的地址 2.17 通過堆棧操作實現(xiàn)子程序調(diào)用,首先就要把(pc)的內(nèi)容入棧,以進(jìn)行斷點保護。調(diào) 用返回時,再進(jìn)行出棧保護,把保護的斷點送回到(pc) 。 2.18 寫出 p3 口各引腳的第二功能。 答: 口引腳 第二功能 p3.0 rxd(串行輸入口) p3.1 txd(串行輸出口) p3.2 int0(外部中斷 0) p3.3 int1(外部中斷 1) p3.4 t0(定時器 0 外部計數(shù)輸入) p3.5

14、 t1(定時器 1 外部計數(shù)輸入) p3.6 wr(外部數(shù)據(jù)存儲器寫選通) p3.7 rd(外部數(shù)據(jù)存儲器讀選通) 2.19 mcs-51 單片機程序存儲器的尋址范圍是由程序計數(shù)器 pc 的位數(shù)所決定的,因為 mcs-51 的 pc 是 16 位的,因此其尋址的范圍為(64)kb。 2.20 當(dāng) mcs-51 單片機運行出錯或程序陷入死循環(huán)時,如何來擺脫困境? 答:可通過復(fù)位來解決。 2.21 判斷下列說法是否正確? (a)pc 是 1 個不可尋址的特殊功能寄存器 () (b)單片機的主頻越高,其運算速度越快 () (c)在 mcs-51 單片機中,1 個機器周期等于 1s (x) (d)特殊

15、功能寄存器 sp 內(nèi)裝的是棧頂首地址單元的內(nèi)容 (x) 2.22 如果手中僅有一臺示波器,可通過觀察哪個引腳的狀態(tài),來大致判斷 mcs51 單片 機正在工作? 答:ale 引腳。 第三章第三章 mcs-51 的指令系統(tǒng)的指令系統(tǒng) 3.1 判斷以下指令的正誤: (1) mov 28h,r2 (2) dec dptr (3) inc dptr (4) clr r0 (5) cpl r5 (6) mov r0,r1 (7) push dptr (8) mov f0,c (9)mov f0,acc.3 (10)movx a,r1 (11) mov c,30h (12)rlc r0 答: (3) 、 (

16、8) 、 (10) 、 (11)對,其余錯。 3.2 判斷下列說法是否正確。 (a)立即尋址方式是被操作的數(shù)據(jù)本身在指令中,而不是它的地址在指令中。 () (b)指令周期是執(zhí)行一條指令的時間。 () (c)指令中直接給出的操作數(shù)稱為直接尋址。 (x) 3.3 在基址加變址尋址方式中,以(a)作變址寄存器,以(dptr)或(pc)作基址寄存器。 3.4 mcs-51 共有哪幾種尋址方式?各有什么特點? 答: 共有 7 種尋址方式。 尋址方式 特點 寄存器尋址方式 操作數(shù)在寄存器中,因此指定了寄存器就能得到操作數(shù) 直接尋址方式 指令中操作數(shù)直接以單元地址的形式給出, 該單元地址中的內(nèi)容就是操作數(shù)

17、寄存器間接尋址方式 寄存器中存放的是操作數(shù)的地址,即先從寄存器中找到操作數(shù)的地址,再按該地址找到操作數(shù) 立即尋址方式 操作數(shù)在指令中直接給出,但需在操作數(shù)前面加前綴標(biāo)志“#” 基址寄存器加變址寄存器間接尋址方式 以 dptr 或 pc 作基址寄存器, 以累加器 a 作為變址寄存器,并以兩者內(nèi)容相加形成的 16 位地址作為操作數(shù)的地址, 以達(dá)到訪問數(shù)據(jù)表格的目的 位尋址方式 位尋址指令中可以直接使用位地址 相對尋址方式 在相對尋址的轉(zhuǎn)移指令中,給出了地址偏移量,以“rel”表示,即把 pc 的當(dāng)前值加上偏移量就構(gòu)成了程序轉(zhuǎn)移的目的地址 3.5 mcs-51 指令按功能可以分為哪幾類? 答:mcs

18、-51 指令系統(tǒng)按功能分為:數(shù)據(jù)傳送類(28 條) ;算術(shù)操作類(24 條) ;邏輯運算類(25 條) ;控制轉(zhuǎn)移類(17 條) ;位操作類(17 條) 。 3.6 訪問 sfr,可使用哪些尋址方式? 答:一般采用直接尋址,對于 sfr 中字節(jié)地址能被 8 整除的 sfr 可以使用位尋址,對于 sfr 中的 a、b、dptr 寄存器可以采用寄存器尋址。 3.7 指令格式是由(操作碼)和(操作數(shù))所組成,也可能僅由(操作碼)組成。 3.8 假定累加器 a 中的內(nèi)容為 30h,執(zhí)行指令:1000h: movc a,a+pc 后,把程序存儲器(1031h)單元的內(nèi)容送入累加器 a 中。 3.9 在

19、mcs-51 中,pc 和 dptr 都用于提供地址,但 pc 是為訪問(程序)存儲器提供地址,而 dptr 是為訪問(數(shù)據(jù))存儲器提供地址。 3.10 在寄存器間接尋址方式中,其“間接”體現(xiàn)在指令中寄存器的內(nèi)容不是操作數(shù),而是 操作數(shù)的(地址) 。 3.11 該程序段的功能是什么? push a push b pop a pop b 答:功能是 a、b 內(nèi)容互換。 3.12 已知程序執(zhí)行前有 a=02h,sp=52h, (51h)=ffh, (52h)=ffh。下列程序執(zhí)行后: pop dph pop dpl mov dptr,4000h rl a mov b,a movc a,a+dptr

20、 push a mov a,b inc a movc a,a+dptr push a ret org 4000h db 10h,80h,30h,50h,30h,50h 請問: a=50h sp=50h (51h)=30h (52h)=50h pc=5030h 3.13 寫出完成如下要求的指令,但是不能改變未涉及位的內(nèi)容。 (a)把 acc.3,acc.4,acc.5 和 acc.6 清 0。 解:anl a,#87h (b)把累加器 a 的中間 4 位清 0。 解:anl a,#c3h (c)使 acc.2 和 acc.3 置 1。 解:orl a,#0ch 3.14 假定 a=83h, (r

21、0)=17h, (17h)=34h,執(zhí)行以下指令: anl a,#17h orl 17h,a xrl a,r0 cpl a 后,a 的內(nèi)容為(0cbh) 3.15 假設(shè) a=55h, r3=0aah, 在執(zhí)行指令后 anl a, r3 后, a=(00h), r3=(0aah) 3.16 如果 dptr=507bh,sp=32h, (30h)=50h, (31h)=5fh, (32h)=3ch,則執(zhí)行下列指令后: pop dph pop dpl pop sp 則:dph=(3ch) dpl=(5fh) sp=(4fh) 3.17 假定 sp=60h,a=30h,b=70h,執(zhí)行下列指令: pu

22、sh a push b 后,sp 的內(nèi)容為(62h) ,61h 單元的內(nèi)容為(30h) ,62h 單元的內(nèi)容為(70h) 。 3.18 借助本書中的指令表:表 3-3 表 3-7 對如下的指令代碼(16 進(jìn)制)進(jìn)行手工反匯編。 ff c0 e0 e5 f0 f0 解:查表可知 ff mov r7,a c0 e0 push 0e0h e5 f0 mov a,0f0h f0 movx dptr, a 第四章第四章 mcs-51 匯編語言程序設(shè)計匯編語言程序設(shè)計 4.1 用于程序設(shè)計的語言分為哪幾種?它們各有什么特點? 答:用于程序設(shè)計的語言基本上分為三種:機器語言、匯編語言和高級語言。 (1)機器

23、語言:在單片機中,用二進(jìn)制代碼表示的指令、數(shù)字和符號簡稱為機器語言,直接用機器語言編寫的程序稱為機器語言程序。用機器語言編寫的程序,不易看懂,不便于記憶,且容易出錯。 (2)匯編語言具有如下特點:a、匯編語言是面向機器的語言,程序設(shè)計人員必須對 mcs-51 單片機的硬件有相當(dāng)深入的了解。b、助記符指令和機器指令一一對應(yīng),所以用匯編語言編寫的程序效率高,占用的存儲空間小,運行速度快,因此用匯編語言能編寫出最優(yōu)化的程序。c、匯編語言程序能直接管理和控制硬件設(shè)備(功能部件) ,它能處理中斷,也能直接訪問存儲器及 i/o接口電路。 (3)高級語言:高級語言不受具體機器的限制,都是參照一些數(shù)學(xué)語言而設(shè)

24、計的,使用了許多數(shù)學(xué)公式和數(shù)學(xué)計算上的習(xí)慣用語,非常擅長于科學(xué)計算。計算機不能直接識別和執(zhí)行高級語言,需要將其“翻譯”成機器語言才能識別和執(zhí)行。 4.3 解釋下列術(shù)語:“手工匯編”、“機器匯編”、“交叉匯編”以及“反匯編”。 答、手工匯編:通常把人工查表翻譯指令的方法稱為“手工匯編”。機器匯編:機器匯編實際上是通過執(zhí)行匯編程序來對源程序進(jìn)行匯編的。交叉匯編:由于使用微型計算機完成了匯編,而匯編后得到的機器代碼卻是在另一臺計算機(這里是單片機)上運行,稱這種機器匯編為“交叉匯編”。反匯編:有時,在分析現(xiàn)成產(chǎn)品的rom/eprom 中的程序時, 要將二進(jìn)制數(shù)的機器代碼語言程序翻譯成匯編語言源程序,

25、該過程稱為反匯編。 4.4 下列程序段經(jīng)匯編后,從 1000h 開始的各有關(guān)存儲單元的內(nèi)容將是什么? org 1000h tab1 equ 1234h tab2 equ 3000h db “main” dw tab1,tab2,70h 答:(1000h) =m (1001h) =a (1002h) =i (1003h) =n (1004h) = 12h (1005h) = 34h (1006h) = 30h (1007h) = 00h (1008h) = 00h (1009h) = 70h 4.5 設(shè)計子程序時注意哪些問題? 答:在編寫子程序時應(yīng)注意以下問題: (1)子程序的第一條指令的地址稱

26、為子程序的入口地址。該指令前必須有標(biāo)號。 (2)主程序調(diào)用子程序,是通過主程序或調(diào)用程序中的調(diào)用指令來實現(xiàn)的。 (3)注意設(shè)置堆棧指針和現(xiàn)場保護,因調(diào)用子程序時,要把斷點壓入堆棧,子程序返回執(zhí)行 ret 指令時再把斷點彈出堆棧送入 pc 指針,因此子程序結(jié)構(gòu)中必須用堆棧。 (4)子程序返回主程序時,最后一條指令必須是 ret 指令,它的功能是在執(zhí)行調(diào)用指令時,把自動壓入堆棧中的斷點地址彈出送入 pc 指針中,從而實現(xiàn)子程序返回主程序斷點處繼續(xù)執(zhí)行主程序。 (5) 子程序可以嵌套, 即主程序可以調(diào)用子程序, 子程序又可以調(diào)用另外的子程序,通常情況下可允許嵌套 8 層。 (6)在子程序調(diào)用時,還要

27、注意參數(shù)傳遞的問題。 4.6 試編寫 1 個程序,將內(nèi)部 ram 中 45h 單元的高 4 位清 0,低 4 位置 1。 解: mov a, 45h anl a, #0fh orl a, #0fh mov 45h,a 4.7 已知程序執(zhí)行前有 a=02h,sp=42h, (41h)=ffh, (42h)=ffh。下述程序執(zhí)行后, pop dph pop dpl mov dptr, #3000h rl a mov b, a movc a, a+dptr push a mov a, b inc a movc a, a+dptr push a ret org 3000h db 10h,80h,30h

28、,80h,50h,80h a=(80h) sp=(40h) (41h)=(50h) (42h)=(80h) pc=(8050h)。 4.8 計算下面子程序中指令的偏移量和程序執(zhí)行的時間(晶振頻率為 12mhz) 。 7b0f mov r3,#15 ;1 個機器周期 7cff dl1: mov r4,#255 ;1 個機器周期 8b90 dl2: mov p1,r3 ;2 個機器周期 dc djnz r4,dl2 ;2 個機器周期 db djnz r3,dl1 ;2 個機器周期 22 ret ;2 個機器周期 解:程序執(zhí)行的時間為( (22)25512)151215348s 4.9 假定 a=8

29、3h, (r0)=17h, (17h)=34h,執(zhí)行以下指令: anl a, #17h orl 17h,a xrl a,r0 cpl a 后,a 的內(nèi)容為(0cbh) 4.10 試編寫程序,查找在內(nèi)部 ram 的 30h50h 單元中是否有 0aah 這一數(shù)據(jù)。若有,則將 51h 單元置為“01h”;若未找到,則將 51h 單元置為“00h”。 org 0000h mov r0, #30h mov r2, #21h loop: mov a, r0 cjne a, #0aah, not mov 51h, #01h sjmp dend not: inc r0 djnz r2, loop mov 5

30、1h, #00h dend: sjmp dend 4.11 試編寫程序,查找在內(nèi)部 ram 的 20h40h 單元中出現(xiàn)“00h”這一數(shù)據(jù)的次數(shù)。并將查找到的結(jié)果存入 41h 單元。 org 0000h mov r0, #20h mov r2, #21h mov 41h, #00h loop: mov a,r0 cjne a, #00h, note inc 41h note: inc r0 djnz r2, loop end 4.12 若 sp=60h,標(biāo)號 label 所在的地址為 3456h。lcall 指令的地址為 2000h,執(zhí)行如下指令: 2000h lcall label 后,堆棧

31、指針 sp 和堆棧內(nèi)容發(fā)生了什么變化?pc 的值等于什么?如果將指令 lcall 直接換成 acall 是否可以?如果換成 acall 指令,可調(diào)用的地址范圍是什么? 答: 堆棧指針 sp 的內(nèi)容為 62h,堆棧內(nèi)容(61h)=03h, (62h)=20h;pc 值為 3456h,不能將 lcall 換為 acall,因為 lcall 可調(diào)用 64kb 范圍內(nèi)的子程序,而 acall 所調(diào)用的子程序地址必須與 acall 指令下一條指令的第一個字節(jié)在同一個 2kb 區(qū)內(nèi)(即 16 位地址中的高 5 位地址相同) 。如果換為 acall,可調(diào)用的地址范圍為 2002h27ffh。 第五章第五章

32、mcs-51 的中斷系統(tǒng)的中斷系統(tǒng) 5.1 什么是中斷系統(tǒng)? 答:能夠?qū)崿F(xiàn)中斷處理功能的部件稱為中斷系統(tǒng)。 5.2 什么是中斷嵌套? 答:中斷系統(tǒng)正在執(zhí)行一個中斷服務(wù)時,有另一個優(yōu)先級更高的中斷提出中斷請求,這時會暫時終止當(dāng)前正在執(zhí)行的級別較低的中斷源的服務(wù)程序,去處理級別更高的中斷源,待處理完畢,再返回到被中斷了的中斷服務(wù)程序繼續(xù)執(zhí)行,這個過程就是中斷嵌套。 5.3 什么是中斷源? mcs-51 有哪些中斷源?各有什么特點? 答:產(chǎn)生中斷的請求源稱為中斷源。mcs-51 中斷系統(tǒng)共有 5 個中斷請求源: (1)外部中斷請求 0, 中斷請求標(biāo)志為 ie0。(2) 外部中斷請求 1, 中斷請求標(biāo)

33、志為 ie1。(3)定時器/計數(shù)器 t0 溢出中斷請求,中斷請求標(biāo)志為 tf0。 (4)定時器/計數(shù)器 t1 溢出中斷請求,中斷請求標(biāo)志為 tf1。 (5)串行口中斷請求,中斷請求標(biāo)志為 ti 或 ri。特點:2 個外部中斷源,3 個內(nèi)部中斷源。 5.4 外部中斷 1 所對應(yīng)的中斷入口地址為(0013h) 。 5.5 下列說法錯誤的是: (abc) (a)各中斷源發(fā)出的中斷請求信號,都會標(biāo)記在 mcs-51 系統(tǒng)的 ie 寄存器中。 (b)各中斷源發(fā)出的中斷請求信號,都會標(biāo)記在 mcs-51 系統(tǒng)的 tmod 寄存器中。 (c)各中斷源發(fā)出的中斷請求信號,都會標(biāo)記在 mcs-51 系統(tǒng)的 ip

34、 寄存器中。 (d)各中斷源發(fā)出的中斷請求信號,都會標(biāo)記在 mcs-51 系統(tǒng)的 tcon 和 scon 寄存器中。 5.6 mcs-51 單片機響應(yīng)外部中斷的典型時間是多少?在哪些情況下,cpu 將推遲對外部中斷請求的響應(yīng)? 答:典型時間是 38 個機器周期。在下列三種情況下,cpu 將推遲對外部中斷請求 的響應(yīng): (1)cpu 正在處理同級的或更高級優(yōu)先級的中斷 (2)所查詢的機器周期不是當(dāng)前所正在執(zhí)行指令的最后一個機器周期 (3)正在執(zhí)行的指令是 reti 或是訪問 ie 或 ip 的指令。 5.7 中斷查詢確認(rèn)后,在下列各種 8031 單片機運行情況中,能立即進(jìn)行響應(yīng)的是(d) (a)

35、當(dāng)前正在進(jìn)行高優(yōu)先級中斷處理 (b)當(dāng)前正在執(zhí)行 reti 指令 (c)當(dāng)前指令是 div 指令,且正處于取指令的機器周期 (d)當(dāng)前指令是 mov a,r3 5.8 8031 單片機響應(yīng)中斷后, 產(chǎn)生長調(diào)用指令 lcall, 執(zhí)行指令的過程包括: 首先把 (pc) 的內(nèi)容壓入堆棧,以進(jìn)行斷點保護,然后把長調(diào)用指令的 16 位地址送(pc) ,使程序執(zhí)行 轉(zhuǎn)向(響應(yīng)中斷請求的中斷入口的地址)中的中斷地址區(qū)。 5.9 編寫出外部中斷 1 為跳沿觸發(fā)的中斷初始化程序。 org 0000h ajmp main org 0013h ajmp pint1 org 0100h main: setb it1

36、 setb ex1 setb ea here: ajmp here pint1: reti end 5.10 在 mcs-51 中,需要外加電路實現(xiàn)中斷撤除的是(d) (a)定時中斷 (b)脈沖方式的外部中斷 (c)外部串行中斷 (d)電平方式的外部中斷 5.11 mcs-51 有哪幾種擴展外部中斷源的方法? 答:擴展外部中斷源的方法有:定時器/計數(shù)器作為外部中斷源的使用方法;中斷和 查詢結(jié)合的方法。 5.12 下列說法正確的是(cd) (a)同一級別的中斷請求按時間的先后順序順序響應(yīng)。 (b)同一時間同一級別的多中斷請求,將形成阻塞,系統(tǒng)無法響應(yīng)。 (c)低優(yōu)先級中斷請求不能中斷高優(yōu)先級中斷

37、請求,但是高優(yōu)先級中斷請求能中斷低優(yōu)先 級中斷請求。 (d)同級中斷不能嵌套。 5.13 中斷服務(wù)子程序返回指令 reti 和普通子程序返回指令 ret 有什么區(qū)別? 答:兩者的區(qū)別在于,reti 清除了中斷響應(yīng)時,被置 1 的 mcs-51 內(nèi)部中斷優(yōu)先 級寄存器的優(yōu)先級狀態(tài)。 5.14 某系統(tǒng)有 3 個外部中斷源 1、2、3,當(dāng)某一中斷源變?yōu)榈碗娖綍r,便要求 cpu 進(jìn)行處理,它們的優(yōu)先處理次序由高到低依次為 3、2、1,中斷處理程序的入口地址分別為 1000h,1100h,1200h。試編寫主程序及中斷服務(wù)程序(轉(zhuǎn)至相應(yīng)的中斷處理程序的入口即可) 。 org 0000h ajmp mai

38、n org 0003h ljmp pint0 org 0100h main: setb it0 setb ex0 setb ea here: sjmp here pint0: push psw push a jnb p1.3, ir3 jnb p1.2, ir2 jnb p1.1, ir1 pintir: pop a pop psw reti ir3: ljmp ir3int ir2: ljmp ir2int ir1: ljmp ir1int org 1000h ir3int: ljmp pintir org 1100h ir2int: ljmp pintir org 1200h ir1int

39、: ljmp pintir end 第六章第六章 mcs-51 的定時器的定時器/計數(shù)器計數(shù)器 6.1 如果采用的晶振的頻率為 3 mhz,定時器/計數(shù)器工作在方式 0、1、2 下,其最大的定時時間各為多少? 答:一個機器周期:1t124s3 方式 0: 13maxt24s32.768ms 方式 1: 16maxt24s262.144ms 方式 2: 8maxt24s1.024ms 6.2 定時器/計數(shù)器用作定時器時,其計數(shù)脈沖由誰提供?定時時間與哪些因素有關(guān)? 答:定時器/計數(shù)器被選定為定時器工作模式時,計數(shù)輸入信號是內(nèi)部時鐘脈沖,每個 機器周期產(chǎn)生 1 個脈沖使計數(shù)器增 1, 因此, 定時

40、器/計數(shù)器的輸入脈沖的周期與 機器周期一樣,為時鐘振蕩頻率的 1/2。 6.3 定時器/計數(shù)器作計數(shù)器使用時,對外界計數(shù)頻率有何限制? 答:定時器/計數(shù)器用作計數(shù)器時,計數(shù)脈沖來自相應(yīng)的外部輸入引腳 t0 或 t1。對 外界計數(shù)頻率要求為其最高頻率為系統(tǒng)振蕩頻率的 1/24。 6.4 采用定時器/計數(shù)器 t0 對外部脈沖進(jìn)行計數(shù), 每計數(shù) 100 個脈沖后, t0 轉(zhuǎn)為定時工作方式。定時 1ms 后,又轉(zhuǎn)為計數(shù)方式,如此循環(huán)不止。假定 mcs-51 單片機的晶體震蕩器的頻率為 6 mhz,請使用方式 1 實現(xiàn),要求編寫出程序。 org 0000h ajmp main org 000bh ljm

41、p pt0j org 0100h main: mov tmod, #05h ;00000001 mov th0, #0ffh ;x=65436 mov tl0, #9ch clr f0 setb tr0 setb et0 setb ea here: ajmp here pt0j: jb f0, pt0d mov tmod, #01h ;00000001 mov th0, #0feh ;x=65036 mov tl0, #0ch setb f0 reti pt0d: clr f0 mov tmod, #05h mov th0, #0ffh mov tl0, #9ch reti end 6.5 定

42、時器/計數(shù)器的工作方式 2 有什么特點?適用于哪些應(yīng)用場合? 答:工作方式 2 為自動恢復(fù)初值的(初值自動裝入)8 位定時器/計數(shù)器,tlx 作為 常數(shù)緩沖器,當(dāng) tlx 計數(shù)溢出時,在置 1 溢出標(biāo)志 tfx 的同時,還自動的將 thx 中的初值送至 tlx,使 tlx 從初值開始重新計數(shù)(x=0,1) 。 6.6 編寫程序, 要求使用 t0, 采用方式 2 定時, 在 p1.0 輸出周期為 400s, 占空比為 1:10的矩形脈沖。 org 0000h ajmp main org 000bh ajmp pt0 org 0100h main: mov r2, #00h mov tmod, #

43、02h mov th0, #0ech ;x=236 mov tl0,#0ech setb p1.0 setb tr0 setb et0 setb ea here: sjmp here pt0: cjne r2, #09h, pt01 setb p1.0 mov r2, #00h reti pt01: clr p1.0 inc r2 reti end 6.7 一個定時器的定時時間有限,如何實現(xiàn)兩個定時器的串行定時,來實現(xiàn)較長時間的定 時? 答:第一個定時溢出啟動第二個定時計數(shù),實行串行定時 6.8 當(dāng)定時器 t0 用于方式 3 時,應(yīng)該如何控制定時器 t1 的啟動和關(guān)閉? 答:控制信號 c/t

44、和 m1 m0。 6.9 定時器/計數(shù)器測量某正脈沖的寬度,采用何種方式可得到最大量程?若時鐘頻率為 6 mhz,求允許測量的最大脈沖寬度是多少? 答:上升沿從 0 開始計數(shù),計滿回到下降沿。最大脈沖寬度 tw=131.072s 6.10 編寫一段程序,功能要求為:當(dāng) p1.0 引腳的電平正跳變時,對 p1.1 的輸入脈沖進(jìn)行計數(shù);當(dāng) p1.2 引腳的電平負(fù)跳變時,停止計數(shù),并將計數(shù)值寫入 r0、r1(高位存 r1,低位存 r0) 。 org 0000h ljmp main main: org 0100h mov r0, #00h mov r1, #00h mov tl0, #00h mov

45、th0, #00h loop1: jb p1.0, loop1 loop2: jnb p1.0, loop2 setb tr0 loop3: jnb p1.2, loop3 loop4: jb p1.2, loop4 clr tr0 mov r1, th0 mov r0, tl0 end 6.11 thx 與 tlx(x=0,1)是普通寄存器還是計數(shù)器?其內(nèi)容可以隨時用指令更改嗎?更改后的新值是立即刷新還是等當(dāng)前計數(shù)器計滿之后才能更新? 答:thx 與 tlx(x=0,1)是計數(shù)器,能用指令更改;能立即刷新。 6.12 判斷下列說法是否正確? (1)特殊功能寄存器 scon,與定時器/計數(shù)器的

46、控制無關(guān)。 () (2)特殊功能寄存器 tcon,與定時器/計數(shù)器的控制無關(guān)。 ( ) (3)特殊功能寄存器 ie,與定時器/計數(shù)器的控制無關(guān)。 ( ) (4)特殊功能寄存器 tmod,與定時器/計數(shù)器的控制無關(guān)。 ( ) 第七章第七章 mcs-51 的串行口的串行口 7.1 串行數(shù)據(jù)傳送的主要優(yōu)點和用途是什么? 答:串行數(shù)據(jù)傳送的主要優(yōu)點是硬件接口簡單,接口端口少(2 個)。主要用于多個 單片機系統(tǒng)之間的數(shù)據(jù)通信。 7.2 簡述串行口接收和發(fā)送數(shù)據(jù)的過程。 答:以方式一為例。發(fā)送:數(shù)據(jù)位由 txt 端輸出,發(fā)送 1 幀信息為 10 為,當(dāng) cpu 執(zhí) 行 1 條數(shù)據(jù)寫發(fā)送緩沖器 sbuf 的

47、指令,就啟動發(fā)送。發(fā)送開始時,內(nèi)部發(fā)送控 制信號/send 變?yōu)橛行В?將起始位想 txd 輸出, 此后, 每經(jīng)過 1 個 tx 時鐘周期, 便產(chǎn)生 1 個移位脈沖,并由 txd 輸出 1 個數(shù)據(jù)位。8 位數(shù)據(jù)位全部完畢后,置 1 中斷標(biāo)志位 t1,然后/send 信號失效。接收:當(dāng)檢測到起始位的負(fù)跳變時,則開 始接收。接受時,定時控制信號有 2 種,一種是位檢測器采樣脈沖,它的頻率是 rx 時鐘的 16 倍。也就是在 1 位數(shù)據(jù)期間,有 16 個采樣脈沖,以波特率的 16 倍 的速率采樣 rxd 引腳狀態(tài),當(dāng)采樣到 rxd 端從 1 到 0 的跳變時就啟動檢測器, 接收的值是 3 次連續(xù)采樣

48、,取其中 2 次相同的值,以確認(rèn)是否是真正的起始位的 開始,這樣能較好地消除干擾引起的影響,以保證可靠無誤的開始接受數(shù)據(jù)。 7.3 幀格式為 1 個起始位,8 個數(shù)據(jù)位和 1 個停止位的異步串行通信方式是方式(1) 。 7.4 串行口有幾種工作方式?有幾種幀格式?各種工作方式的波特率如何確定? 答:串行口有四種工作方式:方式 0、方式 1、方式 2、方式 3。 方式 0 幀格式 波特率是固定的,為 fosc/12 方式 1 幀格式 波特率=232smod定時器 t1 的溢出率 方式 2 幀格式 波特率=264smodoscf 方式 3 幀格式同方式 2 波特率=232smod定時器 t1 的溢

49、出率 7.5 假定串行口發(fā)送的字符格式為 1 個起始位,8 個數(shù)據(jù)位,1 個奇校驗位,1 個停止位,請畫出傳送字符“a”的幀格式? 0 0 0 0 0 1 0 1 0 1 1 7.6 判斷下列說法是否正確: (a) 串行口通行的第 9 數(shù)據(jù)位的功能可由用戶定義。 () (b) 發(fā)送數(shù)據(jù)的第 9 數(shù)據(jù)位的內(nèi)容在 scon 寄存器的 tb8 位中預(yù)先準(zhǔn)備好的。 () (c) 串行通訊幀發(fā)送時,指令 tb8 位的狀態(tài)送入發(fā)送 sbuf 中。 (x) (d) 串行通訊接收到的第 9 位數(shù)據(jù)送 scon 寄存器的 rb8 中保存。 () (e) 串行口方式 1 的波特率是口變的,通過定時器/計數(shù)器 t1

50、 的溢出率設(shè)定。 () d0 d1 d2 d3 d4 d5 d6 d7 起始位(0) d0 d1 d2 d3 d4 d5 d6 d7 停止位(1) 起始位(0) d0 d1 d2 d3 d4 d5 d6 d7 d8(0 或 1) 停止位(1) 7.7 通過串行口發(fā)送或接收數(shù)據(jù)時,在程序中應(yīng)使用: (c) (a)movc 指令 (b)movx 指令 (c)mov 指令 (d)xchd 指令 7.8 為什么定時器/計數(shù)器 t1 用作串行口波特率發(fā)生器時,常采用方式 2? 若已知時鐘頻率,通訊波特率,如何計算器初值? 答:定時器 t1 工作方式 2 是一種自動重裝方式,無需在中斷服務(wù)程序中送數(shù),沒有

51、 由于中斷引起的誤差。定時器工作在方式 2 是一種既省事又精確的產(chǎn)生串行口波 特率的方法。設(shè)定時器 t1 方式 2 的初值為 x,根據(jù)公式: 波特率osc23212 (256x)smodf,可計算出初值 x。 7.9 串行口工作方式 1 的波特率是: (c) (a)固定的,為 fosc/32。 (b)固定的,為 fosc/16。 (c)可變得,通過定時器/計數(shù)器 t1 的溢出率設(shè)定。 (d)固定的,為 fosc/64。 7.10 在串行通訊中,收發(fā)雙方對波特率的設(shè)定應(yīng)該是相同的。 7.11 若晶體振蕩器為 11.0592 mhz,串行口工作于方式 1,波特率為 4800b/s,寫出用 t1作為

52、波特率發(fā)生器的方式控制字和計數(shù)初值。 答:方式字為 01000000。 控制字:org 0000h mov scon, #40h mov pcon, #80h mov tmod, #10h mov tl1, #0f4h mov th1, #0f4h end 計算初值osc8212 32fb或者查閱 p148 表 7-2 可得,初值為 0fah。 7.14 使用 8031 的串行口按工作方式 3 進(jìn)行串行口數(shù)據(jù)通訊,假定波特率為 1200b/s,第 9數(shù)據(jù)位作奇偶校驗位,以中斷方式傳送數(shù)據(jù),請編寫通訊程序。 方法一:中斷方式 發(fā)送程序 org 0000h ljmp main org 0023h

53、ljmp ssend org 0100h main: mov sp, #60h mov tmod, #20h mov th1, #0f3h mov tl1, #0f3h mov r2, #0ffh mov 87h, #80h mov scon, #0c0h mov dptr, #2000h setb tr1 setb es setb ea send: movx a, dptr mov c, p mov tb8, c mov sbuf, a here: ajmp here ssend: djnz r2, send1 ajmp return send1: push dph push dpl pus

54、h psw push acc setb 0d4h setb 0d3h clr t1 inc dptr movx a, dptr mov c, p mov tb8, c mov sbuf, a pop acc pop psw pop dpl pop dph clr 0d4h clr 0d3h return: reti end 接收程序: org 0000h ljmp main org 0023h ljmp rres org 0100h main: mov sp, #60h mov tmod, #20h mov th1, #0f3h mov tl1, #0f3h mov r2, #0ffh set

55、b tr1 mov dptr, #3000h mov 87h, #80h mov scon, #0d0h setb es setb ea sjmp $ rres: djnz r2, res ajmp return res: clr ri mov a, sbuf mov c, p jnc l1 jnb rb8, erp ajmp l2 l1: jb rb8, erp l2: movx dptr, a inc dptr ajmp return erp: setb p1.0 cpl p1.0 return: reti end 查詢方式: 發(fā)送程序 org 0000h main: mov tmod,

56、#20h mov th1, #0f3h mov tl1, #0f3h mov 87h, #80h mov scon, #0c0h mov dptr, #2000h mov r2, #0ffh setb tr1 send: movx a, dptr mov c, p mov tb8, c mov sbuf, a sti: jnb ti, sti clr ti inc dptr djnz r2, send end 接收程序: org 0000h mov tmod, #20h mov th1, #0f3h mov tl1, #0f3h setb tr1 mov dptr, #3000h mov 87

57、h, #80h mov scon, #0d0h mov r2, #0ffh res: jnb ri, res clr ri mov a, sbuf mov c, p jnc l1 jnb rb8, erp ajmp l2 l1: jb rb8, erp l2: movx dptr, a inc dptr djnz r2, res erp: setb p1.0 cpl p1.0 end 7.15 某 8031 串行口,傳送數(shù)據(jù)的幀格式為 1 個起始位(0) ,7 個數(shù)據(jù)位,1 個偶校驗位和 1 個停止位(1)組成。當(dāng)該串行口每分鐘傳送 1800 個字符時,試計算出波特率。 答:波特率=1800*

58、(1+7+1+1)/60=300b/s 7.16 為什么 mcs-51 串行口的方式 0 幀格式?jīng)]有起始位(0)和停止位(1)? 答:因為方式 0 為同步移位寄存器輸入輸出方式,不需要起始和停止位,8 位數(shù)據(jù)為 1 幀,依次移入輸入式或輸出移位寄存器。 第八章第八章 mcs-51 單片機擴展存儲器的設(shè)計單片機擴展存儲器的設(shè)計 8.1 單片機存儲器的主要功能是存儲(程序)和(數(shù)據(jù)) 8.2 試編寫一個程序(例如將 05h 和 06h 拼為 56h) ,設(shè)原始數(shù)據(jù)放在片外數(shù)據(jù)區(qū) 2001h單元和 2002h 單元中,按順序拼裝后的單字節(jié)數(shù)放入 2002h。 參考源程序 org 0000h star

59、t: mov b, #10h mov dptr, #2001h movx a, dptr anl a, #0fh mul ab mov b, a mov dptr, #2002h movx a, dptr add a, b movx dptr, a end 8.3 假設(shè)外部數(shù)據(jù)存儲器 2000h 單元的內(nèi)容為 80h,執(zhí)行下列指令后: mov p2, #20h mov r0, #00h movx a, r0 累加器 a 中的內(nèi)容為(80h) 。 8.4 編寫程序,將外部數(shù)據(jù)存儲器中的 4000h40ffh 單元全部清零。 答:本題主要考察了對外部數(shù)據(jù)塊的寫操作;編程時只要注意循環(huán)次數(shù)和 mov

60、x 指令的使用就可以了。 org 0000h main: mov a,#0 ;送預(yù)置數(shù)給 a mov r0,#0ffh ;設(shè)置循環(huán)次數(shù) mov dptr,#4000h ;設(shè)置數(shù)據(jù)指針的初值 loop: movx dptr,a ;當(dāng)前單元清零 inc dptr ;指向下一個單元 djnz r0,loop ;是否結(jié)束 end 8.5 在 mcs-51 單片機系統(tǒng)中, 外接程序存儲器和數(shù)據(jù)存儲器共 16 位地址線和 8 位數(shù)據(jù)線,為何不發(fā)生沖突? 答: 程序存儲器和數(shù)據(jù)存儲器雖然公用 16 位地址線和 8 位數(shù)據(jù)線, 但由于數(shù)據(jù)存儲器的讀和寫有rd(p3.7)和wr(p3.6)信號控制,而程序存儲器

溫馨提示

  • 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

提交評論