微機(jī)原理習(xí)題答案(完整版)_第1頁(yè)
微機(jī)原理習(xí)題答案(完整版)_第2頁(yè)
微機(jī)原理習(xí)題答案(完整版)_第3頁(yè)
微機(jī)原理習(xí)題答案(完整版)_第4頁(yè)
微機(jī)原理習(xí)題答案(完整版)_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上第一章習(xí)題答案1-1 請(qǐng)說(shuō)明CPU的功能以及CPU是如何執(zhí)行指令和程序的。答:CPU的功能是執(zhí)行程序和統(tǒng)籌處理計(jì)算機(jī)系統(tǒng)中各類(lèi)事務(wù)。CPU執(zhí)行指令分為3步:取指令、分析指令、執(zhí)行指令;計(jì)算機(jī)程序是由一條條指令按一定的順序排列組成的,CPU執(zhí)行程序的過(guò)程就是一條條指令累計(jì)執(zhí)行的過(guò)程,其方式分為串行作業(yè)方式和流水線作業(yè)方式。1-2 請(qǐng)說(shuō)明單片機(jī)內(nèi)部主要是由哪些部件組成的,并說(shuō)明各部件的作用。答:CPU:由控制器和運(yùn)算器構(gòu)成,控制器的作用是執(zhí)行指令和協(xié)調(diào)系統(tǒng)各部件的工作;運(yùn)算器的作用是進(jìn)行邏輯運(yùn)算和算術(shù)運(yùn)算。存儲(chǔ)器:存儲(chǔ)計(jì)算機(jī)工作時(shí)使用的信息,即指令代碼和數(shù)據(jù)代碼。I/O接

2、口電路:具有數(shù)據(jù)緩沖、數(shù)據(jù)隔離及數(shù)據(jù)轉(zhuǎn)換的功能。1-3 請(qǐng)問(wèn)對(duì)于容量位8K的存儲(chǔ)器芯片,它的地址線是多少根?答:8K=8192=213,故地址線為13根。另附:存儲(chǔ)器的數(shù)據(jù)線由存儲(chǔ)器的字長(zhǎng)決定,例如一塊32K×16(存儲(chǔ)器容量顯示格式:存儲(chǔ)單元數(shù)×存儲(chǔ)單元的字長(zhǎng))的存儲(chǔ)器,其地址線為15根,數(shù)據(jù)線為16根。1-4 將十進(jìn)制數(shù)78,134,分別用二進(jìn)制數(shù)、十六進(jìn)制數(shù)和8421BCD嗎表示。答:(78)D=()B=(4E)H=()8421BCD(134)D=()B=(86)H=(0)8421BCD注:8421BCD碼為4位表示一個(gè)十進(jìn)制數(shù)符,本質(zhì)是符號(hào)不是數(shù)值,所以不可省略0。

3、 1-5 將下列真值分別轉(zhuǎn)化為用8位和16位二進(jìn)制數(shù)表示的原碼、補(bǔ)碼和反碼。X=;X8位原=X8位反=X8位補(bǔ)=;X16位原=X16位反=X16位補(bǔ)=00100X= -X8位原=,X8位反=,X8位補(bǔ)=;X16位原=00100,X16位反=11011,X16位補(bǔ)=11100;X= -X8位原=,X8位反=,X8位補(bǔ)=;X16位原=11111,X16位反=00000,X16位補(bǔ)=00001;1-6 將下列補(bǔ)碼轉(zhuǎn)化成二進(jìn)制數(shù)的真值。X補(bǔ)=;X=X補(bǔ)=;X= -1X補(bǔ)=;X= -1-7 已知下列補(bǔ)碼X補(bǔ)和Y補(bǔ),分別求X+Y補(bǔ)、X-Y補(bǔ)。并判斷運(yùn)算結(jié)果是否出現(xiàn)溢出。X補(bǔ)=, Y補(bǔ)=;-Y補(bǔ)=, X+Y

4、補(bǔ)=X補(bǔ)+Y補(bǔ)=不溢出;X-Y補(bǔ)=X補(bǔ)+-Y補(bǔ)=X補(bǔ)-Y補(bǔ)=溢出;X補(bǔ)=, Y補(bǔ)=;-Y9位補(bǔ)=, X+Y補(bǔ)=X補(bǔ)+Y補(bǔ)=溢出;X-Y補(bǔ)=X補(bǔ)+-Y補(bǔ)=X補(bǔ)-Y補(bǔ)=不溢出;X補(bǔ)=, Y補(bǔ)=;-Y補(bǔ)=, X+Y補(bǔ)=X補(bǔ)+Y補(bǔ)=不溢出;X-Y補(bǔ)=X補(bǔ)+-Y補(bǔ)=X補(bǔ)-Y補(bǔ)=不溢出;X補(bǔ)=, Y補(bǔ)=;-Y補(bǔ)=, X+Y補(bǔ)=X補(bǔ)+Y補(bǔ)=溢出;X-Y補(bǔ)=X補(bǔ)+-Y補(bǔ)=X補(bǔ)-Y補(bǔ)=不溢出;方法提示:由于補(bǔ)碼是按序列排列的,所以可以直接進(jìn)行加和減,即X+Y補(bǔ)=X補(bǔ)+Y補(bǔ);X-Y補(bǔ)=X補(bǔ)-Y補(bǔ)另補(bǔ)碼減法也可用加法實(shí)現(xiàn)X-Y補(bǔ)=X補(bǔ)+-Y補(bǔ)。上題的第2小題,由于Y8位補(bǔ)=28,Y=-28,所以(-Y)= 28,已

5、不能用8位補(bǔ)碼表示,可以先擴(kuò)補(bǔ)位9位補(bǔ)碼,然后進(jìn)行運(yùn)算,或直接用X-Y補(bǔ)= X補(bǔ)-Y補(bǔ)進(jìn)行計(jì)算。判斷結(jié)果是否溢出,可按下列方法:加法時(shí),如果正負(fù)數(shù)相加(即兩數(shù)的符號(hào)位不同),則結(jié)果肯定不溢出;如果同號(hào)數(shù)相加,結(jié)果與被加數(shù)和加數(shù)異號(hào)的則溢出(即正正相加結(jié)果為負(fù)或負(fù)負(fù)相加結(jié)果為正時(shí))。減法時(shí),如果同號(hào)數(shù)相減(即兩數(shù)的符號(hào)位相同),則結(jié)果肯定不溢出;如果異號(hào)數(shù)相減,結(jié)果與被加數(shù)異號(hào)的則溢出(即正負(fù)相減結(jié)果為負(fù)或負(fù)正相減結(jié)果為正時(shí))。此法比用變形補(bǔ)碼直觀,加和減都適用。第二章習(xí)題答案2-1 請(qǐng)說(shuō)明單片機(jī)89C52內(nèi)部有哪些資源。答:1個(gè)8位CPU、8KB的FLASH程序存儲(chǔ)器、256B的SRAM數(shù)據(jù)存

6、儲(chǔ)器、4個(gè)8位的并行I/O口(P0,P1,P2,P3)、1個(gè)全雙工串行口、中斷系統(tǒng)(5個(gè)中斷源、2個(gè)中斷優(yōu)先級(jí))、3個(gè)16位的定時(shí)/計(jì)數(shù)器(T0,T1,T2)、時(shí)鐘電路(時(shí)鐘頻率624MHZ)。2-2 為什么51系列單片機(jī)的存儲(chǔ)器系統(tǒng)采用哈佛結(jié)構(gòu)。答:哈佛結(jié)構(gòu)指的是指令代碼和數(shù)據(jù)分別存放在程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器中,兩部分存儲(chǔ)器分別采用不同的地址總線系統(tǒng)。單片機(jī)在工作時(shí)一般執(zhí)行固定不變的應(yīng)用程序代碼,而作為嵌入式控制系統(tǒng)的核心,受限于體積要求,單片機(jī)系統(tǒng)一般不會(huì)帶有輔助存儲(chǔ)器(例如硬盤(pán)等),為了在斷電時(shí)也能保存用戶的應(yīng)用程序,故需將程序固化在只讀存儲(chǔ)器中,而單片機(jī)工作時(shí)程序運(yùn)行過(guò)程中的數(shù)據(jù)是變化

7、的,所以需要放在隨機(jī)訪問(wèn)存儲(chǔ)器中。2-3 51單片機(jī)中的工作寄存器分布在存儲(chǔ)器的哪個(gè)區(qū)域?答:分布在內(nèi)部數(shù)據(jù)存儲(chǔ)器的00H1FH區(qū)域。2-4 在51系列單片機(jī)中,工作寄存器分幾個(gè)區(qū)?如何改變工作寄存器區(qū)? 答:分為0、1、2、3四個(gè)區(qū)。修改特殊功能寄存器PSW的RS1和RS0位可改變當(dāng)前工作寄存器區(qū)。2-5 特殊功能寄存器和工作寄存器在存放信息方面有和區(qū)別?答:特殊功能寄存器(SFR)中存放的是一些專(zhuān)用信息,這些信息與下列內(nèi)容有關(guān):計(jì)算機(jī)指令的執(zhí)行條件及狀態(tài)標(biāo)志,定時(shí)/計(jì)數(shù)器的使用控制、中斷系統(tǒng)的使用、并行I/O及串行I/O接口的使用。工作寄存器只是用于暫時(shí)存放指令執(zhí)行過(guò)程中一般的被操作數(shù)據(jù)。

8、2-6 特殊功能寄存器的地址空間如何?答:特殊功能寄存器(SFR)的地址為8為二進(jìn)制編碼,地址范圍為80H0FFH,但各特殊功能寄存器的地址并非連續(xù)分布的。指令通過(guò)直接尋址的方式才能訪問(wèn)到。2-7 51單片機(jī)中的位尋址區(qū)在哪里?它們的地址空間如何?答:51單片機(jī)的位尋址區(qū)分布在兩個(gè)地方。一部分位于內(nèi)部數(shù)據(jù)存儲(chǔ)器中字節(jié)地址為20H2FH的16個(gè)單元中,這部分包括128個(gè)位,位地址空間為00H7FH;另一部分位于字節(jié)地址能被8整除的特殊功能寄存器中, 位地址空間為80H0FFH。2-8 請(qǐng)指出下列位地址所在的內(nèi)部數(shù)據(jù)存儲(chǔ)器單元的字節(jié)地址或SFR名稱(chēng)。答:00H內(nèi)部RAM的20H單元;(20H).0

9、20H內(nèi)部RAM的24H單元;(24H).00A0HP2;P2.00B0HP3;P3.064H內(nèi)部RAM的2CH單元;(2CH).4E6H累加器ACC; ACC.6。提示:1) 內(nèi)部數(shù)據(jù)存儲(chǔ)器內(nèi)的可尋址位,其位地址(00H7FH)與所在單元的字節(jié)地址(20H2FH)間的關(guān)系如下:位地址(字節(jié)地址20H)×8DX, DX該位在字節(jié)單元中的位置(D0D7)位地址÷8,商20H字節(jié)地址,余數(shù)DX2) SFR中的可位尋址(位地址80H0FFH)的寄存器,其最低位的位地址與其字節(jié)地址相同。關(guān)系如下:位地址÷8,商*8SFR的字節(jié)地址,余數(shù)DX,DX該位在SFR中的位置(D0

10、D7)2-9 若某51單片機(jī)應(yīng)用系統(tǒng)將F000HFFFFH地址空間分配給它外部的I/O接口,那么該單片機(jī)應(yīng)用系統(tǒng)最多給外部數(shù)據(jù)存儲(chǔ)器分配多少單元?地址空間如何?答:51單片機(jī)的外部I/O接口和外部數(shù)據(jù)存儲(chǔ)器是統(tǒng)一編制的,占用同一個(gè)地址空間,地址空間的容量為64KB,地址范圍為0000HFFFFH。據(jù)題意,系統(tǒng)已將F000HFFFFH地址空間分配給它外部的I/O接口,則只剩下0000HEFFFH可分配給外部數(shù)據(jù)存儲(chǔ)器,容量為60KB。2-10 在圖2-9中的電容C,如果它取值太小,對(duì)復(fù)位電路有何影響?答:51單片機(jī)上電復(fù)位,需要在RST引腳上保持10ms以上的高電平。如果C太小,則其充電時(shí)間變短

11、,上電后,RST引腳上高電平保持的時(shí)間太短,則單片機(jī)內(nèi)部復(fù)位將不能完全完成,有些寄存器內(nèi)容將變得不確定。2-11 上電復(fù)位和人工按鈕復(fù)位后對(duì)內(nèi)部數(shù)據(jù)存儲(chǔ)器具有什么不同的影響?答:上電復(fù)位后,內(nèi)部數(shù)據(jù)存儲(chǔ)器中的內(nèi)容為不確定的狀態(tài)。人工按鈕復(fù)位后,內(nèi)部數(shù)據(jù)存儲(chǔ)器中的內(nèi)容不變(因?yàn)闆](méi)有斷電)。2-12 51應(yīng)用系統(tǒng)中,為何要對(duì)堆棧指針SP重新設(shè)置?答:復(fù)位后(SP)=07H,則堆棧是從08H開(kāi)始存放數(shù)據(jù)的。而內(nèi)部數(shù)據(jù)存儲(chǔ)器中00H1FH單元為工作寄存器區(qū),而20H2FH單元為位尋址區(qū),在實(shí)際的應(yīng)用系統(tǒng)中,這些區(qū)域都可能使用到。故一般將堆棧設(shè)置在地址30H以后的單元中,所以需要對(duì)堆棧指針SP重新設(shè)置。

12、2-13 51單片機(jī)中的I/O接口中,那個(gè)接口在作為準(zhǔn)雙向口時(shí)需要外接電阻?若對(duì)某一接口進(jìn)行讀引腳的操作,必須事先對(duì)該接口做什么操作?答:P0口需外接上拉電阻(因?yàn)镻0是集電極開(kāi)路結(jié)構(gòu))。若需對(duì)某個(gè)接口讀引腳(即讀取外部輸入信號(hào)的狀態(tài)),需要對(duì)該接口的口鎖存器寫(xiě)入1(例如:若需要讀取P1.0、P1.1、P1.2、P1.3的引腳狀態(tài)時(shí),需要先執(zhí)行MOV P1, #0FH。這也是為什么復(fù)位后(P0)= (P1)=(P2)=(P3)=0FFH的道理。)第三章習(xí)題答案3-1 指令的格式是由哪些部分組成的?每部分的含義是什么?答:指令由操作碼和操作數(shù)組成。在形式上操作碼和操作數(shù)都是二進(jìn)制代碼。操作碼用來(lái)

13、表示指令的種類(lèi)和功能,經(jīng)由控制器中的指令譯碼器譯碼后產(chǎn)生控制信號(hào)。操作數(shù)是指令的操作對(duì)象,表示被操作數(shù)據(jù)或數(shù)據(jù)所在的存儲(chǔ)單元地址。3-2什么是尋址方式?51系列指令系統(tǒng)有哪些尋址方式?答:指令中給出操作數(shù)的方式叫做尋址方式。51系列機(jī)給出的尋址方式一般有7中:立即尋址、直接尋址、寄存器尋址、寄存器間接尋址、變址尋址、相對(duì)尋址、位尋址(直接尋址的一個(gè)特例地址指向位單元)。3-3對(duì)于內(nèi)部數(shù)據(jù)存儲(chǔ)器00H1FH區(qū)域的訪問(wèn)有哪些尋址方式?對(duì)于外部數(shù)據(jù)存儲(chǔ)器的訪問(wèn)有哪些尋址方式?對(duì)于特殊功能寄存器的訪問(wèn)有哪些尋址方式?答:對(duì)于內(nèi)部數(shù)據(jù)存儲(chǔ)器00H1FH區(qū)域的訪問(wèn)有直接尋址、寄存器尋址、寄存器間接尋址三種

14、方式。對(duì)于外部數(shù)據(jù)存儲(chǔ)器的訪問(wèn)只有寄存器間接尋址一種方式(以DPTR或R0、R1為指針)。對(duì)于特殊功能寄存器的訪問(wèn)只有直接尋址一種方式。同時(shí)對(duì)于內(nèi)部數(shù)據(jù)存儲(chǔ)器80H0FFH的128個(gè)單元的訪問(wèn)只有寄存器間接尋址一種方式(以R0、R1或SP為指針);借助于兩種不同的尋址方式,可以將在地址上重合(80H0FFH)的SFR和內(nèi)部RAM高128字節(jié)單元的兩部分空間加以區(qū)分。3-451系列單片機(jī)有哪些標(biāo)志位?這些標(biāo)志位存放在哪里?答:51單片機(jī)在程序運(yùn)行時(shí)通常需要一下標(biāo)志位:Cy,AC,OV,P,RS1,RS0,它們都存放在特殊功能寄存器PSW(程序狀態(tài)字寄存器)中。3-5 分析下列各指令的操作數(shù),指出

15、它們的尋址方式。MOV R4, 38H;寄存器尋址,直接尋址ADD A, R1;寄存器尋址,寄存器間接尋址MOVC A, A+DPTR;寄存器尋址,變址尋址(又稱(chēng)基址寄存器加變址寄存器間接尋址)MOVX A, DPTR;寄存器尋址,寄存器間接尋址DEC B;直接尋址SETB 24H;位尋址(直接尋址的一種,只是給出的直接地址是位地址)CJNE A, #100, NEXT;寄存器尋址,立即尋址,相對(duì)尋址ANL 30H, #00H;直接尋址,立即尋址PUSH P1;寄存器間接尋址(指針為SP,只是在堆棧操作指令中省略了),直接尋址堆棧操作除了用PUSH和POP指令,完全可以用其它指令來(lái)完成,舉例如

16、下:PUSH P1可用下列程序段完成INC SPMOV R0, SPMOV R0, P1 POP P1可用下列程序段完成MOV R0, SPMOV P1, R0DEC SP提示:上題答案中按操作數(shù)先后順序給出其對(duì)應(yīng)的尋址方式。3-6 下列各指令或指令組執(zhí)行前有關(guān)寄存器和存儲(chǔ)器的狀態(tài)如下表,要求分析各指令或指令組執(zhí)行后有關(guān)寄存器、存儲(chǔ)器和標(biāo)志位的狀態(tài)。內(nèi)部數(shù)據(jù)存儲(chǔ)器和特殊功能寄存器外部數(shù)據(jù)存儲(chǔ)器程序存儲(chǔ)器寄存器名內(nèi)容單元地址內(nèi)容單元地址內(nèi)容單元地址內(nèi)容程序計(jì)數(shù)器內(nèi)容B64H73H10H900BH12H1206H35H(PC)=1200HACC03H72H11H900AH83H1205H34HPS

17、W80H71H00H9009HD1H1204H33H標(biāo)號(hào)及標(biāo)號(hào)值DPL05H70H80H9008H79H1203H32HNEXT1=0800HDPH90H9007H0CH1201H31HNEXT2=0900HSP71H36HF8H9006H23H1200H30HNEXT3=1280HR000H35H2BH9005H13HLOOP=1148HR136H34H36H9004H4DHR235H33H74H9003H2EHR3B7H32H59H9002H7FHR403H9001H54HR5F6H26H66H9000H38HR6E4H25H55HR721H24H44HP07CHP290H提示:在上表中需

18、注意幾點(diǎn):(PSW)=80H,即Cy=1, AC=0, RS1=RS0=0(故當(dāng)前工作寄存器區(qū)為0區(qū))。工作寄存器區(qū)為0區(qū)時(shí),R0R7指向內(nèi)部數(shù)據(jù)存儲(chǔ)器的00H07H,所以當(dāng)指令中出現(xiàn)直接地址00H07H中的某個(gè)時(shí),其初始條件即為R0R7中某個(gè)對(duì)應(yīng)的寄存器的值。另,因?yàn)?DPH)=90H, (DPL)=05H, 所以(DPTR)=9005H。標(biāo)號(hào)值實(shí)質(zhì)上是代表標(biāo)號(hào)所在處的指令在程序存儲(chǔ)器中的地址,標(biāo)號(hào)往往出現(xiàn)在程序轉(zhuǎn)移指令中,指出轉(zhuǎn)移指令的目標(biāo)地址。1) MOV R0,#32;(R0)=32=20H2) MOV 25H,R1;(25H)= 0F8H3) MOVX A,DPTR;(A)=13HP

19、=14) MOVX A,R0;(A)=38HP=15) MOVC A,A+PC;(A)=33HP=06) MOV A,04H;(A)=03HP=07) XCH A,34H;(A)=36H(34H)= 03H8) XCHD A,R1;(A)=08H(36H)=0F3H9) PUSH DPL;(SP)=72H(72H)=05H10) POP DPH; (DPH)=00H(SP)=70H11) SUBB A,R1; (A)=0CCHCy=1P=0AC=1OV=012) ADD A,R6; (A)=0E7HCy=0P=0AC=0OV=013) ADDC A,36H; (A)=0FCHCy=0P=0AC

20、=0OV=014) MUL AB; (A)=2CH(B)=01H15) INC R0; (R0)= 01H16) DEC A; (A)=02HP=117) ADD A,#49H;DA A; (A)=52HCy=0P=118) ANL A, R1; (A)=02H(R1)=36HP=119) ORL A,32H; (A)=5BHP=120) ORL 26H,#35H; (26H)=77HP=021) XRL A,R0; (A)=03HP=022) XRL A, ACC; (A)=0P=023) XRL A,#0FFH; (A)=0FCHP=024) CPL A; (A)=0FCHP=025) R

21、L A; (A)=06HCy=126) RRC A; (A)=81HCy=127) MOV C,(25H).2;Cy=128) MOV F0,C;(PSW)=0A0H29) SETB RS0; (PSW)=88H30) CLR C; (PSW)=031) ANL C,(24H).0 Cy=032) JZ NEXT1; (PC)=1202H33) JC NEXT2; (PC)= 0900H34) CJNE A, 25H, NEXT3; (PC)= 1280HCy=135) DJNZ R7,LOOP; (PC)= 1148H(R7)=20H36) LCALL 1800H; (PC)=1800H(S

22、P)=73H(72H)=03H(73H)=12H37) RET; (PC)=0080H(SP)=6FH38) ANL C, /32H;Cy=0(32H)=1 ,提示此處32H為位存儲(chǔ)器39) STOP: JBC P0.3, STOP;(PC)=1200H(P0)=74H40) JNB P0.4, NEXT1;(PC)=1203H紅色部分為附加題,答案就在本期內(nèi)找_,看看你們的本事了,哈哈哈哈3-7 分析下列程序段的功能。1) MOV A, R3MOV R4, A功能:將R3中的內(nèi)容送入R4,即(R3)R42) MOV A, R5CPL AMOV R5, A功能:R5中的數(shù)據(jù)按位取反后送回R53

23、) MOV A, R4MOV B, R5DIV ABMOV R4, BMOV R5, A功能:R4中的數(shù)除以R5中的數(shù),結(jié)果商送入R5,余數(shù)送入R44) MOV C, P1.1ANL C, P1.2ANL C, /P1.3MOV P1.6, C功能:P1.1P1.2P1.3P1.65) MOV C, 0ORL C, 1MOV F0, CMOV C, 2ORL C, 3ANL C, F0MOV P1.7, C功能:(20H).0(20H).1) (20H).2(20H).3) P1.7 6) CLR CMOV A, R4RLC AMOV R4, AMOV A, R3RLC AMOV R3, A功

24、能:R3、R4中的內(nèi)容左移一位,R4最低位移入0,R4最高位移入R3最低位,R3最高位移出至Cy。7) CLR CMOV A, R5RLC AADD A, R5MOV R5, A功能:(R5)×3R58) CLR AMOV R0, AMOV R7, ALOOP: MOV R0, AINC R0DJNZ R7, LOOPSTOP: SJMP STOP功能:將內(nèi)部數(shù)據(jù)存儲(chǔ)器00H0FFH 256個(gè)單元全部清零。9) PUSH ACCPUSH BPOP ACCPOP B功能:利用堆棧將ACC與B中的內(nèi)容互換,即(ACC)(B)10) MOV R0, #30HXCHD A, R0SWAP A

25、INC R0XCHD A, R0SWAP AMOV 40H , A功能:將ACC的低四位送入30H單元低四位,ACC的高四位送入31H的低四位,而原先30H單元的低四位送入40H單元的低四位,原31H單元的低四位送入40H單元的高四位。舉例說(shuō)明如下,設(shè)程序段運(yùn)行前有(ACC)=12H,(30H)=34H,(31H)=56H;則程序段運(yùn)行后有(30H)=32H,(31H)=51H, (ACC)= (40H)=64H3-8 指出下列指令中哪些是合法指令,哪些是非法指令。MOV P1, R4;合法MOV R2,R4;非法CLR R3;非法RLC R5;非法MOV 30H, 31H;合法MOV 00H

26、, P;非法ORL 40H, R7;非法PUSH R6;非法POP R0;非法INC DPTR;合法注:常見(jiàn)的錯(cuò)誤還有類(lèi)似:MOV R0, C; ADD 30H,31H; MOV A, R5; DEC DPTR等,編程時(shí)切記勿錯(cuò)!3-9 按要求編制下列各程序段。將內(nèi)部數(shù)據(jù)存儲(chǔ)器30H和31H單元的內(nèi)容互換。法一:MOV A, 30HXCH A ,31HMOV 30H, A 法二:XCH A, 30HXCH A ,31HXCH A, 30H比較法一、法二的優(yōu)缺點(diǎn),你認(rèn)為哪個(gè)方法更好?將寄存器R7的內(nèi)容向右循環(huán)移位一次。XCH A, R7RR AXCH A, R7將寄存器R3的內(nèi)容乘以4(結(jié)果不超

27、出8為二進(jìn)制數(shù)的范圍)。法一:MOV A, R3MOV B, #4MUL ABMOV R3, A法二:XCH A, R3RL ARL AXCH A, R3將寄存器DPTR的內(nèi)容減1。法一:判斷DPL=0否?如是, DPL減1后,DPH也減1;否則,DPH不變。XCH A, DPLJNZ NOBDEC DPHNBO: XCH A, DPL DEC DPL法二:(DPH)(DPL) -1DPH,DPL(即DPTR)CLR CXCH A, DPLSUBB A, #1XCH A, DPL XCH A, DPHSUBB A, #0XCH A, DPH法三:(DPH)(DPL)+0FFFFHDPTRXCH

28、 A, DPLADD A, #0FFHXCH A, DPL XCH A, DPHADDC A, #0FFHXCH A, DPH比較以上各方法,其中法三利用了-1的補(bǔ)碼是0FFFFH的原理,將減法改為了加法。將寄存器R6的內(nèi)容壓入堆棧(設(shè)寄存器工作在3區(qū))PUSH 1EH將R4, R5寄存器連接起來(lái)循環(huán)右移一位。(設(shè)R4為高8位,R5為低8位;執(zhí)行完后R4R5中的內(nèi)容右移一位,R4的最低位移入R5的最高位,同時(shí)R5的最低位移入R4的最高位)XCH A, R4;將R4中的內(nèi)容送入ACC,同時(shí)將ACC的內(nèi)容放入R4中暫存。RRC A;ACC中原先R4的內(nèi)容右移一位,同時(shí)Cy移入最高位,而原先R4的最

29、低位移入Cy位XCH A, R5;R5中的內(nèi)容送入ACC,上一步中產(chǎn)生的ACC的內(nèi)容送入R5暫存RRC A;ACC中原先R5的內(nèi)容右移一位,Cy(即原R4的最低位)移入最高位,而原R5的最低位移入Cy位XCH A, R5;將結(jié)果送入R5(R5移位已完成),同時(shí)將第三步暫存在R5中的內(nèi)容取出。MOV ACC.7, C;將Cy位中存放的原R5的最低位送入ACC的最高位(即送入R4的最高位)XCH A, R4;將結(jié)果送入R4,同時(shí)取出ACC原來(lái)的值第四章習(xí)題答案4-1 用偽指令將下列常數(shù)依次定義在1600H為首地址的程序存儲(chǔ)器中。0,1,4,9,16,25,36,49,64,81答:ORG1600H

30、DB 0,1,4,9,16,25,36,49,64,814-2 用偽指令將下列常數(shù)依次定義在1700H為首地址的程序存儲(chǔ)器中,要求數(shù)據(jù)類(lèi)型一致。0,1,8,27,64,125,216,343,512,729答:提示:因?yàn)?43,512,729為雙字節(jié)數(shù)據(jù)(>255),所以所有數(shù)據(jù)均應(yīng)以雙字節(jié)存入。ORG1700HDW 0,1,8,27,64,125,216,343,512,7294-3 用偽指令將字節(jié)型變量X1、X2定義在內(nèi)部數(shù)據(jù)存儲(chǔ)器30H、31H單元中,將字節(jié)型變量Y1、Y2定義在外部數(shù)據(jù)存儲(chǔ)器2000H、2001H單元中。答:X1 DATA30HX2DATA31HY1XDATA20

31、00HY2XDATA2001H4-4 用偽指令將ASCII碼字符串“Beijing,tjjtds!”定義在1200H為首地址的程序存儲(chǔ)器中。答:ORG1200HDB Beijing,tjjtds!4-5 用偽指令將邏輯變量A1、A2定義在00H、01H位單元中答:A1 BIT00HA2BIT01H4-6 編一程序段,將1400H為首地址的外部數(shù)據(jù)存儲(chǔ)器中200個(gè)單字節(jié)數(shù)據(jù)轉(zhuǎn)移至1500H為首地址的外部數(shù)據(jù)存儲(chǔ)器中。MOVDPTR, #1400H;用DRTR指向源數(shù)據(jù)塊單元地址MOV P2, #15H;用P2,R0指向目標(biāo)地址MOVR0, #00HMOVR7, #200;數(shù)據(jù)個(gè)數(shù)送入R7LOOP

32、:MOVXA, DPTRMOVXR0, AINCDPTR;修改源數(shù)據(jù)塊指針I(yè)NCR0;修改目標(biāo)單元地址指針DJNZR7, LOOPSJMP4-7 編一程序段,將30H為首地址的內(nèi)部數(shù)據(jù)存儲(chǔ)器中20個(gè)單字節(jié)補(bǔ)碼數(shù)據(jù)中的負(fù)數(shù)傳送至2400H為首地址的外部數(shù)據(jù)存儲(chǔ)器中。MOVR0, #30H;用R0指向源數(shù)據(jù)塊首地址MOVDPTR, #2400H;用DRTR指向目標(biāo)區(qū)首地址MOVR7, #20;數(shù)據(jù)個(gè)數(shù)送入R7LOOP:MOVA, R0;取出源數(shù)據(jù)JNBACC.7, NEXT;若源數(shù)據(jù)最高位=0,則表示數(shù)據(jù)為非負(fù)數(shù),無(wú)需傳送,可直接取下個(gè)數(shù)據(jù)MOVXDPTR, A;若取出的數(shù)據(jù)為負(fù)數(shù),則傳送到外部R

33、AM,同時(shí)修改DPTRINCDPTRNEXT:INCR0DJNZR7, LOOPSJMP4-8 編一程序段,將40H為首地址的內(nèi)部數(shù)據(jù)存儲(chǔ)器中25個(gè)單字節(jié)數(shù)據(jù),依次下移一個(gè)單元。提示:根據(jù)題意即將40H58H中的數(shù)據(jù)依次送入41H59H中XCHA, 40H;ACC內(nèi)容送入40H暫存保護(hù),同時(shí)取出40H單元中內(nèi)容MOVR0, #41H;R0指向目標(biāo)單元首地址MOVR7, #25;數(shù)據(jù)長(zhǎng)度送R7LOOP:XCHA, R0;前一個(gè)單元數(shù)送后一個(gè)單元,同時(shí)取出后一個(gè)單元原先的數(shù)據(jù)暫存入ACCINCR0DJNZR7, LOOPMOVA, 40H;恢復(fù)ACC原來(lái)的內(nèi)容STOP:SJMPSTOP4-9 編一

34、程序段,完成函數(shù)y=x2+5x+6的計(jì)算。設(shè)0x10。提示:據(jù)題意6y156,即結(jié)果為單字節(jié)數(shù)據(jù)。XDATA30HYDATA31HMOVA, XMOVB, XMULABMOVY, A;X2YMOVA, XMOVB, #5MULABADDA, Y; X2+5X ACCADDA, #6; X2+5X+6 ACCMOVY, A; X2+5X+6 YSTOP:SJMPSTOP討論:有時(shí)仔細(xì)分析問(wèn)題,可以將程序變得更簡(jiǎn)單,如上題中y=x2+5x+6=(x+2)(x+3),則程序?yàn)閄DATA30HYDATA31HMOVA, XADDA, #2MOVB, A; (x+2)INCA; (x+3)MULABMO

35、VY, A; X2+5X+6 YSTOP:SJMPSTOP4-10 編一程序段,完成邏輯函數(shù)L=XYZ 的計(jì)算。提示:此程序按照51匯編程序標(biāo)準(zhǔn)格式編寫(xiě),整個(gè)程序構(gòu)成一個(gè)完整結(jié)構(gòu),單片機(jī)運(yùn)行時(shí)將反復(fù)執(zhí)行該程序,即當(dāng)輸入變量發(fā)生變化時(shí),輸出邏輯函數(shù)L將立刻發(fā)生相應(yīng)的變化。XBITP1.0YBITP1.1ZBITP1.2;分別定義變量X,Y,Z由P1口的低三位(P1.0,P1.1,P1.2)輸入LBITP1.7;定義函數(shù)L由P1.7輸出ORG0;用戶程序第一條指令必須放在程序存儲(chǔ)器0000H單元中LJMPMAIN;此處安排一條長(zhǎng)調(diào)換指令,跳到主程序處,目的:避開(kāi)03H開(kāi)始的中斷入口ORG200H;

36、主程序安排在程序存儲(chǔ)器200H單元開(kāi)始MAIN:MOVC, XANLC, /YANLC, ZCPLCMOVL, CSJMPMAIN;真正的實(shí)用程序必須構(gòu)成一個(gè)死循環(huán)結(jié)構(gòu),使得單片機(jī)可以反復(fù)地執(zhí)行;用戶設(shè)定的功能討論一:若上列函數(shù)改為L(zhǎng)=XY+XZ+YZ,如何編程,給兩個(gè)答案,自己比較體會(huì)!MOVC, XANLC, YMOVF0, CMOVC, XANLC, ZORLC, F0MOVF0, CMOVC, YANLC, ZORLC, F0MOVL, C MOVC, XANLC, YJCOUTMOVC, XANLC, ZJCOUTMOVC, YANLC, ZOUT: MOVL, C討論二:若上列函數(shù)

37、改為L(zhǎng)=(X+Y)(X+Z)(Y+Z),如何編程,給兩個(gè)答案,結(jié)合討論一自己比較體會(huì)!MOVC, XORLC, YMOVF0, CMOVC, XORLC, ZANLC, F0MOVF0, CMOVC, YORLC, ZANLC, F0MOVL, C MOVC, XORLC, YJNCOUTMOVC, XORLC, ZJNCOUTMOVC, YORLC, ZOUT: MOVL, C4-11 閱讀下列各程序段,并說(shuō)明其功能。START:MOV DPTR, #1000HMOV R7, #10MOVX A,DPTRMOV B, A;取出外部RAM單元1000H單元中的數(shù)送入BLOOP:INC DPTR

38、;每次循環(huán)逐個(gè)取出外部RAM單元1001H開(kāi)始的單元中的內(nèi)容MOVX A, DPTRCJNE A, B, COMP;比較(A)和(B),無(wú)論是否相等,均轉(zhuǎn)向下條指令,判斷Cy位COMP:JC NEXT;Cy=1,則(A)(B),不作處理,直接進(jìn)下個(gè)循環(huán),取下個(gè)數(shù)據(jù)判斷MOV B, A;若Cy=0,則(A)(B),將(A)BNEXT:DJNZ R7, LOOPSTOP:SJMP STOP功能:判斷外部數(shù)據(jù)寄存器1000H開(kāi)始的11個(gè)單元中的最大值,將最大值送入寄存器B。START:MOV R2, #0MOV R7, #8MOV A, R3;(R3) ACCLOOP:RLC A;8次循環(huán),每次循環(huán)

39、,將R3中的內(nèi)容由最低位開(kāi)始,逐位移入CyJNC NEXT;Cy=0,則不做任何操作,直接進(jìn)入下個(gè)循環(huán)INC R2;若上句條件不成立,即R3中移出的位=1, 則(R2)+1 R2NEXT:DJNZ R7, LOOPSTOP:SJMP STOP功能:統(tǒng)計(jì)R3中1的個(gè)數(shù),并將統(tǒng)計(jì)結(jié)果送入R2。START:MOV 30H, #0MOV R0, #50HLOOP:MOV A, R0CJNE A, #0FFH, NEXTSJMP STOPNEXT:INC 30HINC R0SJMP LOOPSTOP:SJMP STOP功能:統(tǒng)計(jì)存放在內(nèi)部數(shù)據(jù)存儲(chǔ)器50H開(kāi)始的數(shù)據(jù)塊的長(zhǎng)度(即數(shù)據(jù)塊占多少個(gè)字節(jié)),數(shù)據(jù)塊

40、以0FFH為結(jié)束標(biāo)志。4-12 編一子程序,將一個(gè)非壓縮8421BCD碼(即單字節(jié)BCD碼)轉(zhuǎn)換成七段顯示碼。設(shè)09的BCD碼對(duì)應(yīng)的七段顯示碼分別為3FH、06H、6BH、4FH、66H、6DH、7DH、07H、7FH、6FH。進(jìn)子程序前,BCD碼被放在累加器ACC中;子程序運(yùn)行后,相應(yīng)的七段碼也放在ACC中。(即入口參數(shù)和出口參數(shù)均在ACC中)。;BCD碼轉(zhuǎn)換成顯示碼;入口參數(shù):子程序名CHSEG,單字節(jié)BCD碼放在累加器ACC中;出口參數(shù):七段顯示碼放在ACC中CHSEG:ADDA, #1;加上偏移量,偏移量為MOVCA, A+PC指令與數(shù)據(jù)表首間的字節(jié)數(shù)MOVCA, A+PCRET;單字

41、節(jié)指令DB3FH, 06H, 6BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH;數(shù)據(jù)表一般緊跟著RET指令有另一法,不需計(jì)算偏移量CHSEG:ADDA, #SEGTB-SSG;用標(biāo)號(hào)表達(dá)式,讓編譯程序計(jì)算偏移量MOVCA, A+PCSSG:RETSEGTB:DB3FH, 06H, 6BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH4-13 編一子程序,將一個(gè)09的七段顯示碼轉(zhuǎn)換成對(duì)應(yīng)的格雷碼。09的格雷碼請(qǐng)參閱本書(shū)表1-2。設(shè)進(jìn)子程序前,七段顯示碼被放在內(nèi)部數(shù)據(jù)存儲(chǔ)器40H中;子程序運(yùn)行后,相應(yīng)的格雷碼放在內(nèi)部數(shù)據(jù)存儲(chǔ)器50H中。(即入口參

42、數(shù)為40H,出口參數(shù)為50H)。算法一提示:根據(jù)09的序號(hào)依次查出對(duì)應(yīng)的顯示碼,然后與40H中的內(nèi)容比較,如果相等,則根據(jù)當(dāng)前序號(hào)查表得到對(duì)應(yīng)的格雷碼。; 顯示碼轉(zhuǎn)換成格雷碼;入口參數(shù):子程序名CHGRY,七段顯示碼被放在內(nèi)部數(shù)據(jù)存儲(chǔ)器40H中,影響ACC,B,Cy位;出口參數(shù):格雷碼放在內(nèi)部數(shù)據(jù)存儲(chǔ)器50H中CHGRY:PUSHACC;保護(hù)現(xiàn)場(chǎng)PUSHBPUSHPSWMOVB, #0;用B記錄09的序號(hào)NEXT:MOVA, B;ADDA, #SEGTB-SSG;用標(biāo)號(hào)表達(dá)式,讓編譯程序計(jì)算偏移量MOVCA, A+PC;根據(jù)當(dāng)前序號(hào),查取對(duì)應(yīng)的顯示碼SSG:CJNEA, 40H, NEQ;比較

43、取得的顯示碼與源單元中的顯示碼MOVA, B;如果相等,則根據(jù)當(dāng)前序號(hào),查取對(duì)應(yīng)的格雷碼ADDA, #GRYTB-SGRMOVCA, A+PCSGR:MOV50H, A;將查取的格雷碼送入目標(biāo)單元POPPSW;恢復(fù)現(xiàn)場(chǎng)POPBPOPACCRET;返回NEQ:INCB;如果不想等,則將序號(hào)增1,查取下個(gè)顯示碼作比較SJMPNEXTSEGTB:DB3FH, 06H, 6BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH;顯示碼表GRYTB:DB00H, 01H, 03H, 02H, 04H, 05H, 07H, 06H, 08H, 09H;格雷碼表算法二提示:直接將顯示碼轉(zhuǎn)

44、化成格雷碼,程序煩了些,但方法很簡(jiǎn)單。; 顯示碼轉(zhuǎn)換成格雷碼;入口參數(shù):子程序名CHGRY,七段顯示碼被放在內(nèi)部數(shù)據(jù)存儲(chǔ)器40H中,影響ACC,Cy位;出口參數(shù):格雷碼放在內(nèi)部數(shù)據(jù)存儲(chǔ)器50H中CHGRY:PUSHACC;保護(hù)現(xiàn)場(chǎng)PUSHPSWMOVA, 40HCJNEA, #3FH, NEQ0MOV50H, #00H;40H單元中的內(nèi)容=0的顯示碼,則將0的格雷碼送入50HNEQ0:CJNEA, #06H, NEQ1MOV50H, #01H;40H單元中的內(nèi)容=1的顯示碼,則將1的格雷碼送入50HNEQ1:CJNEA, #6BH, NEQ2MOV50H, #03H;40H單元中的內(nèi)容=2的顯

45、示碼,則將2的格雷碼送入50HNEQ2:CJNEA, #4FH, NEQ3MOV50H, #02H;40H單元中的內(nèi)容=3的顯示碼,則將3的格雷碼送入50HNEQ3:CJNEA, #66H, NEQ4MOV50H, #04H;40H單元中的內(nèi)容=4的顯示碼,則將4的格雷碼送入50HNEQ4:CJNEA, #6DH, NEQ5MOV50H, #05H;40H單元中的內(nèi)容=5的顯示碼,則將5的格雷碼送入50HNEQ5:CJNEA, #7DH, NEQ6MOV50H, #07H;40H單元中的內(nèi)容=6的顯示碼,則將6的格雷碼送入50HNEQ6:CJNEA, #07H, NEQ7MOV50H, #06

46、H;40H單元中的內(nèi)容=7的顯示碼,則將7的格雷碼送入50HNEQ7:CJNEA, #7FH, NEQ8MOV50H, #08H;40H單元中的內(nèi)容=8的顯示碼,則將8的格雷碼送入50HNEQ8:CJNEA, #6FH, QUITMOV50H, #09H;40H單元中的內(nèi)容=9的顯示碼,則將9的格雷碼送入50HQUIT:POPPSW;恢復(fù)現(xiàn)場(chǎng)POPACCRET4-14 編一子程序,完成兩雙字節(jié)無(wú)符號(hào)數(shù)相加。設(shè)加數(shù)和被加數(shù)分別放在0區(qū)寄存器R2、R3和R4、R5中,運(yùn)算結(jié)果存放在0區(qū)寄存器R6、R7中。若運(yùn)算結(jié)果發(fā)生進(jìn)位,使00H位單元=1;反之,使00H位單元=0。;雙字節(jié)無(wú)符號(hào)數(shù)相加;入口參

47、數(shù):子程序名NADD,加數(shù)和被加數(shù)分別放在0區(qū)寄存器R2、R3和R4、R5中,影響ACC, 位Cy;出口參數(shù):運(yùn)算結(jié)果存放在0區(qū)寄存器R6、R7中,00H位單元存放雙字節(jié)相加的進(jìn)位標(biāo)志NADD:PUSHACC;保護(hù)現(xiàn)場(chǎng)PUSHPSWMOVA, R2;(R2)+(R4)R6ADDA, R4MOVR6, AMOVA, R3;(R3)+(R5)R7ADDCA, R5MOVR7, AMOV00H, C;Cy00HPOPPSWPOPACC;恢復(fù)現(xiàn)場(chǎng)RET 4-15 編制一子程序,完成10ms較精確延時(shí)功能。設(shè)系統(tǒng)時(shí)鐘頻率為24MHz。提示:時(shí)鐘頻率為24MHz,則每個(gè)機(jī)器周期T0.5us,10ms延時(shí)即

48、需要10000us /0.5us =20000=500×40個(gè)機(jī)器周期T。軟件延時(shí)子程序,就是用循環(huán)結(jié)構(gòu)反復(fù)執(zhí)行一些指令,而指令執(zhí)行時(shí)都需要時(shí)間,所以執(zhí)行完該子程序后,即完成了延時(shí)功能。;軟件延時(shí)10ms;入口參數(shù):子程序名DELAY,影響2區(qū)寄存器R0, R1;出口參數(shù):無(wú)DELAY:PUSHPSW;1TMOVPSW, #18H;1TMOVR0, #40;1TDL:MOVR1, #248;1T*40DL1:DJNZR1, DL1;2T*248*40=19840TNOP;1T*40DJNZR0, DL;2T*40POPPSW;1TRET;2T,總延時(shí)3T+40T+19840T+40T

49、+80T+3T=20006T,誤差6T=3 us,相當(dāng)準(zhǔn)了4-16 編制一子程序,將10個(gè)非壓縮BCD碼轉(zhuǎn)換成5個(gè)壓縮BCD碼。設(shè)進(jìn)子程序前,非壓縮BCD碼被放在40H為首地址的內(nèi)部數(shù)據(jù)存儲(chǔ)器中;子程序運(yùn)行后,壓縮BCD碼放在50H為首地址的內(nèi)部數(shù)據(jù)存儲(chǔ)器中。功能說(shuō)明:若進(jìn)子程序前40H49H單元中的內(nèi)容為01H,02H,03H,04H,05H,06H,07H,08H,09H,00H,則子程序運(yùn)行后50H54H中的內(nèi)容為12H,34H,56H,78H,90H;BCD碼壓縮;入口參數(shù):子程序名BCDCH,非壓縮BCD碼被放在40H為首地址的內(nèi)部數(shù)據(jù)存儲(chǔ)器中;影響ACC,2區(qū)寄存器R0, R1, R7;出口參數(shù):壓縮BCD碼放在50H為首地址的內(nèi)部數(shù)據(jù)存儲(chǔ)器BCDCH:PUSHACC;保護(hù)現(xiàn)場(chǎng)PUSHPSWMOVPSW, #10H;設(shè)定當(dāng)前工作寄存器區(qū)為2區(qū)MOVR0, #40H;R0指向源數(shù)據(jù)塊首地址MOVR1, #50H;R1指向目標(biāo)數(shù)據(jù)塊首地址MOVR7, #5;轉(zhuǎn)換5次LO

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論