單片機(jī)原理與運(yùn)用_第三章答案_第1頁(yè)
單片機(jī)原理與運(yùn)用_第三章答案_第2頁(yè)
單片機(jī)原理與運(yùn)用_第三章答案_第3頁(yè)
單片機(jī)原理與運(yùn)用_第三章答案_第4頁(yè)
單片機(jī)原理與運(yùn)用_第三章答案_第5頁(yè)
已閱讀5頁(yè),還剩15頁(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、 第三章 單片機(jī)的匯編語(yǔ)言與程序設(shè)計(jì)習(xí)題1. 設(shè)內(nèi)部RAM中59H單元的內(nèi)容為50H,寫出當(dāng)執(zhí)行下列程序段后寄存器A,R0和內(nèi)部RAM中50H,51H單元的內(nèi)容為何值? MOV A,59H MOV R0,A MOV A,#00H MOV R0,A MOV A,#25H MOV 51H,A MOV 52H,#70H解: MOV A,59H ; A=50H MOV R0,A ; RO=50H MOV A,#00H ; A=00H MOV R0,A ; 50H=00H MOV A,#25H ; A=25H MOV 51H,A ; 51H=25H MOV 52H,#70H ; 52H=70H 所以:A

2、=25H R0=50H ; 50H=00H 51H=25H2. 請(qǐng)選用合適的指令對(duì)P0口內(nèi)容做修改(例如使P0.0P0.3不變,P0.4P0.7為0)。解: MOV A,P0 ANL A,0fh Mov P0,A3. 試問(wèn)外部數(shù)據(jù)存儲(chǔ)器和程序存儲(chǔ)器可以用哪些指令來(lái)實(shí)現(xiàn)?舉例說(shuō)明。解:訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器指令有:MOVX DPTR,A MOVX DPTR,#0100H MOV DPTR,AMOVX A,DPTR MOVX DPTR,#0200H MOV A,DPTRMOVX A,Ri MOVX A,R0MOVX Ri,A MOVX RI,A訪問(wèn)程序存儲(chǔ)器指令有:MOVX A,A+PCMOVX A,

3、A+DPTR4. 設(shè)堆棧指針SP中的內(nèi)容為60H,內(nèi)部RAM中30H和31H單元的內(nèi)容分別為24H和10H,執(zhí)行下列程序段后,61H,62H,30H,31H,DPTR及SP中的內(nèi)容將有何變化? PUSH 30H PUSH 31H POP DPL POP DPH MOV 30H,#00H MOV 31H,#0FFH解:PUSH 30H ;61H=24H PUSH 31H ;62=10H SP=62H POP DPL ;DPL=10H POP DPH ;DPH=24H SP=60H MOV 30H,#00H ;30H=00H MOV 31H,#0FFH ;31H=0FFH5. 設(shè)(A)=40H,(

4、R1)=23H,(40H)=05H。執(zhí)行下列兩條指令后,累加器A和R1以及內(nèi)部RAM中40H單元的內(nèi)容各位何值? XCH A,R1 XCHD A,R1解: XCH A,R1 ;A=23H R1=40H XCHD A,R1 ;A=25H 40H=03H6. 兩個(gè)四位BCD碼數(shù)相加,被加數(shù)和加數(shù)分別存于50H,51H和52H,53H單元中(次序?yàn)榍?、百位在低地址中),和?shù)存在54H,55H和56H中(56H用來(lái)存放最高位的進(jìn)位,試編寫加法程序)解: ORG 0000H LJMP START ORG 0100HSTART: MOV A,53H ADD A,51H DA A MOV 55H,A MO

5、V A,52H ADDC A,50H DA A MOV 56H,C SJMP $ END7.設(shè)(A)=01010101B,(R5)=10101010B,分別寫出執(zhí)行ANL A,R5;ORL A,R5:XRL A,R5指令后結(jié)果。解: ANL A,R5 ; 00000000B ORL A,R5 ; 11111111B XRL A,R5 ; 111111118.設(shè)指令SJMPrel=7EH,并假設(shè)該指令存放在2114H和2115H單元中。當(dāng)該指令執(zhí)行后,程序?qū)⑻D(zhuǎn)到何地址?解:2116H+60H=2176H9.簡(jiǎn)述轉(zhuǎn)移指令A(yù)JMP addr11,SJMP rel,LJMP addr16及JMP A

6、+DRTR的應(yīng)用場(chǎng)合。解:AJMP addr11為2K字節(jié)范圍內(nèi)的無(wú)條件轉(zhuǎn)跳指令,把程序的執(zhí)行轉(zhuǎn)移到指定的地址。SJMP rel是無(wú)條件轉(zhuǎn)跳指令,執(zhí)行時(shí)在PC加2后,把指令中補(bǔ)碼形式的偏移量加到PC上,并計(jì)算出轉(zhuǎn)向目標(biāo)地址。轉(zhuǎn)向的目標(biāo)地址可以在這條指令前128字節(jié)到后127字節(jié)之間LJMP addr16執(zhí)行這條指令時(shí)把指令的第二字節(jié)和第三字節(jié)分別裝入PC的高位和地位字節(jié)中無(wú)條件地轉(zhuǎn)向指定地址。轉(zhuǎn)移目標(biāo)地址可以在64K程序存儲(chǔ)器地址空間的任何地方,不影響任何標(biāo)志。JMP A+DRTR指令的功能是把累加器中8位無(wú)符號(hào)數(shù)與數(shù)據(jù)指針DRTR中的16位數(shù)相加,將結(jié)果作為下條指令地址送入PC,利用這條指令

7、能實(shí)現(xiàn)程序的散轉(zhuǎn)。10.試分析下列程序段,當(dāng)程序執(zhí)行后,位地址00H,01H中的內(nèi)容將為何值?P1口的8條I/O線為何狀態(tài)?CLR CMOV A,#66HJC LOOP1 CPL C SETB 01HLOOP: ORL C,ACC.0 JB ACC.2,LOOP2 CLR 00HLOOP2: MOV P1,A解: CLR C ;CY=0MOV A,#66H ;A=66HJC LOOP1 CPL C ;CY=1 SETB 01H ;20H.1=1LOOP: ORL C,ACC.0 ;CY=1 JB ACC.2,LOOP2 ; CLR 00HLOOP2: MOV P1,A ;P1=01100110

8、BSJMP $20H.0=0 20H.1=1 P1=66H11.的特查指令表,寫出下列兩條指令的機(jī)器碼,并比較一下機(jī)器碼中操作數(shù)排列次序點(diǎn)。MOV 78H,80HMOV 78H,#80H解:直接尋址單元傳送到直接尋址單元的機(jī)器碼是第二個(gè)操作數(shù)在前,而立即數(shù)傳送到直接地址單元是第一個(gè)操作數(shù)在前,次序正好相反。12.手工匯編下列程序段 ORG 873BHAAA EQU 851AHQQQ MOV A,35H CLR C SUBB A,#0AH JC QQ16 MOV A,36H SUBB A,#0AH JC QQ15 AJMP AAAQQ15: MOV 35H,#00HQQ16: JNB 02H,Q

9、Q17 MOV R6,39H DEC R6 SJMP QQ18QQ17: MOV R6,39H INC 39HQQ18: CLR 05H LJMP 8500H END13.若有兩個(gè)無(wú)符號(hào)數(shù)x,y分別存放于內(nèi)部存儲(chǔ)器50H,51H單元中,試編寫一個(gè)程序?qū)崿F(xiàn)x*10+y,結(jié)果存入52H,53H兩個(gè)單元中。解: ORG 0000HSJMP STARTORG 0030HSTART :MOV A,50HMOV B,#10MUL AB ;(50H)×10積的高、低字節(jié)分別在B、A中ADD A,51HMOV 53H,A ;積的低字節(jié)加(51H)其和存放在53H中MOV A,#00HADDC A,B

10、MOV 52H,A ;積的高字節(jié)加進(jìn)位位存放在52H中。SJMP $END14從內(nèi)部存儲(chǔ)器20H單元開始,有30個(gè)數(shù)據(jù)。試編一個(gè)程序,把其中的正數(shù),負(fù)數(shù)分別送51H和71H開始的存儲(chǔ)單元,并分別記下正數(shù)負(fù)數(shù)的個(gè)數(shù)送50H和70H單元。解: ORG 0000HSJMP STARTORG 0030HSTART: MOV 1EH,#51H ;正數(shù)存放首地址51H存于1EH單元MOV 1FH,#71H ;負(fù)數(shù)存放首地址71H存于1EH單元MOV R0,#20H ;建立取數(shù)(源操作數(shù))的地址指針MOV R2,#30 ;預(yù)置數(shù)據(jù)長(zhǎng)度MOV 50H,#00H ;正數(shù)個(gè)數(shù)統(tǒng)計(jì)單元清零MOV 70H,#00H

11、;負(fù)數(shù)個(gè)數(shù)統(tǒng)計(jì)單元清零LOOP:MOV A,R0 ;取數(shù)JB ACC.7,NEG ;是負(fù)數(shù)轉(zhuǎn)NEG處理POST:MOV R1,1EH ;是正數(shù),將暫存的地址送R1(間址寄存器)MOV R1,A ;將正數(shù)入存INC 50H ;正數(shù)個(gè)數(shù)加1INC 1EH ;正數(shù)暫存地址加1修正LOOP1: INC R0 ;取數(shù)地址加1修正DJNZ R2,LOOP ;計(jì)數(shù)長(zhǎng)度減1,不等于零,繼續(xù)循環(huán)統(tǒng)計(jì)SJMP $ ;結(jié)束NEG: MOV R1,1FH ;是負(fù)數(shù),將暫存的地址送R1(間址寄存器) MOV R1,A ;將正數(shù)入存INC 70H ;負(fù)數(shù)個(gè)數(shù)加1INC 1FH ;負(fù)數(shù)暫存地址加1修正SJMP LOOP1

12、;轉(zhuǎn)取數(shù)地址修正15內(nèi)部存儲(chǔ)單元40H中有一個(gè)ASCII碼字符,試編一程序,給該數(shù)的最高位加上奇檢驗(yàn)。解: ORG 0000H SJMP STARTORG 0030HSTART: MOV A,40H ;取數(shù)給ACLR ACC.7 ;A最高位(奇偶校驗(yàn)位)清零JB P, LOOP ;40H中的ASCII碼原來(lái)就是奇數(shù)個(gè)1(最高位給零)SETB ACC.7 ;40H中的ACSII碼原來(lái)是偶數(shù)個(gè)1,最高位置1 LOOP:MOV 40H,A ;入存 SJMP $ ;結(jié)束 END16.編寫一段程序,將存放在自DATA單元開始的一個(gè)四字節(jié)數(shù)(高位在前)取補(bǔ)后送回原單元。解:若DATA在內(nèi)部數(shù)據(jù)存儲(chǔ)器中(假

13、如存放在30H起始的4個(gè)單元中);采用求反加1的算法;ORG 000HSJMP STARTORG 0030HSTART: SETB C ;置進(jìn)位位為1MOV R2,#04H ;預(yù)置計(jì)數(shù)長(zhǎng)度MOV R0,#DATA1+3 ;取數(shù)指針指向低字節(jié)的地址LOOP: MOV A,R0 ;取數(shù)CPL A ;求反ADDC A,#00H ;加進(jìn)位MOV R0,A ;入存DEC R0 ;地址指針修正DJNZ R2,LOOP ;4字節(jié)未處理完,繼續(xù)循環(huán)處理SJMP $ ;結(jié)束DATA1 EQU 30H;END17.以BUF1為起始地址的外存儲(chǔ)區(qū)中,存放有16個(gè)單字節(jié)無(wú)符號(hào)二進(jìn)制數(shù),是編一程序,求其平均值并送BUF

14、2單元。解:設(shè)R2、R3存放和,將其除以16(R2、R3聯(lián)合左移4位)即為平均置值(單字節(jié)存放)ORG 0000HSJMP STARTORG 0030HSTART: MOV R2,#00H ;和高字節(jié)清零MOV R3,#00H ;和低字節(jié)清零MOV DPTR,#DATA1 ;建立外部數(shù)據(jù)存儲(chǔ)器的地址指針MOV R4,#10H ;預(yù)置計(jì)數(shù)長(zhǎng)度LOOP: MOVX A,DPTR ;從外部數(shù)據(jù)存儲(chǔ)器取數(shù)ADD A ,R3MOV R3,AMOV A,R2;ADDC A,#00H;MOV R2,A ;累加INC DPTR ;地址指針修正DJNZ R4,LOOP ;16字節(jié)未累加完,繼續(xù)循環(huán)累加MOV R

15、4,#04H ;R2、R3聯(lián)合移位4次(除以16)LOOP1: CLR CMOV A,R2RRC AMOV R3,ADJNZ R4,LOOP1 ;平均值存放于R3中SJMP $ ;結(jié)束DATA1 EQU 1000H;END18.在DATA1單元中有一個(gè)帶符號(hào)8位二位進(jìn)制數(shù)x。編一程序,按以下關(guān)系計(jì)算y值,送DATA2單元。y =x+5,x>0y=x,x=0y=x-5,x<0解:設(shè)DATA1、DATA2為內(nèi)部數(shù)據(jù)存儲(chǔ)器的二個(gè)單元(假設(shè)為30H、31H)且y的值單字節(jié)不會(huì)產(chǎn)生溢除出ORG 000HSJMP STARTORG 0030HSTART: MOV A,30H ;取數(shù)X給AJZ

16、ZERO ;若X=0,則Y=0,轉(zhuǎn)入存JB ACC.7,NEG ;若X<0,則轉(zhuǎn)X-5POZI : ADD A,#05H ;若X>0,則X=5,入存SJMP ZERO;NEG: CLR C;SUBB A,#05H;ZERO: MOV 31H,A ;結(jié)果入存SJMP $END19.設(shè)內(nèi)部RAM中30H和31H單元中有兩個(gè)帶符號(hào)數(shù),求出其中的大數(shù)存放在32H單元中。解:若兩數(shù)同號(hào),則值大的數(shù)大;兩數(shù)異號(hào),正數(shù)值大ORG 000HSJMP STARTORG 0030HSTART: MOV A,30HXRL A,31H ;兩數(shù)異或JB ACC.7,YIHAO ;兩數(shù)異號(hào)TONGHAO: C

17、LR C ;兩數(shù)同號(hào)MOV A,30HSUBB A,31HJC LOOP1-2LOOP0: MOV A,30H ;同號(hào)被減數(shù)大,值大LOOED: MOV 32H, ASJMP $LOOP1: MOV A,31H ;異號(hào)被減數(shù)大,值小SJMP ED;YIHAO: MOV A,30H ;異號(hào),哪個(gè)正,其值大JNB ACC.7,LOOP0SJMP LOOP1END20.利用邏輯控制的方法,設(shè)計(jì)一個(gè)主程序,在第1,3,5,6次調(diào)出SB1子程序,第2,4,7,8次調(diào)用SB2程序。解: ORG 000HSJMP TESTORG 0030HTEST: MOV R2,#08HMOV A,#10101100BL

18、OOP: RLC AJC LOOP1 LCALL SB1SJMP RELTLOOP1: LCALL SB2RELT: DJNZ R2,LOOPSJMP $PRGO : RETPRG1: RETEND21.將DATA單元存放的以ASCII碼表示的16進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)存放于DATA+1單元。解:先將DATA的ASCII碼轉(zhuǎn)換成十六進(jìn)制的數(shù),再轉(zhuǎn)換成十進(jìn)制數(shù)。數(shù)字的ASCII碼轉(zhuǎn)成十六進(jìn)制數(shù)(即為十進(jìn)制數(shù))采用減30H字母的ASCII碼轉(zhuǎn)成十六進(jìn)制數(shù)采用減37H,十六進(jìn)制再轉(zhuǎn)十進(jìn)制可采用先減0AH,再加10H;這樣-37H-0AH+10H=-31H,可采用直接減31H。數(shù)字與字母的ASCII的區(qū)

19、別,可采用對(duì)D6的檢測(cè)D6=1為字母的ASCII碼,反之為數(shù)字的ASCII碼。ORG 000HSJMP TESTORG 0030HTEST: MOV R0,#DATA1MOV A,R0 ;將DATA1的數(shù)給ACLR C;LOOP: JB ACC.6,LOOP1 ;是字母,轉(zhuǎn)LOOP1SUBB A,#30H ;是數(shù)字減30HED: MOV DATA+1,A ;入存SJMP $ ;結(jié)束LOOP1:SUBB A,#31H ;是字母減31HSJMP ED;DATA1 EQU 30HEND22.編一個(gè)將十六進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)的子程序。解:一個(gè)單字節(jié)的十六進(jìn)制數(shù)轉(zhuǎn)成十進(jìn)制數(shù)一般考慮用二字節(jié)BCD碼來(lái)存放

20、。設(shè)轉(zhuǎn)換后的數(shù)存放在R3(高)、R4(低)中。ORG 000HSJMP TESTORG 0030HTEST: MOV DPTR,#TAB ;建立表頭地址MOV A,30HANL A,#0F0HSWAP A ;高半字節(jié)分離ADD A,0E0H ;高半字節(jié)數(shù)乘2MOV B,A ;暫存MOVC A,A+DPTR;MOV R3,A ;取轉(zhuǎn)換后的高半字節(jié)存R3INC DPTR;MOV A,B;MOVC A,A+DPTR;MOV R4,A ;取轉(zhuǎn)換后的低半字節(jié)存R4MOV A,30H;ANL A,#0FH;ADD A,R4;DA A;MOV R4,A ;加原數(shù)的低半字節(jié)(DA A)MOV A,R3;ADD

21、C A,#00H;DA A;MOV R3,A;RET;TAB:DB 00H,00H,00H,16H,00H,32H,00H,48H,00H,64HDB 00H,80H,00H,96H,01H,12H,01H,28H,01H,44HDB 01H,60H,01H,76H,01H,92H,02H,08H,02H,24HDB 02H,40H,02H,40H,02H,56HEND23.編一程序,將存儲(chǔ)區(qū)DATA1單元開始的20個(gè)單字節(jié)數(shù)據(jù)依次與DATA2單元為起始地址的20個(gè)單字節(jié)數(shù)據(jù)進(jìn)行交換。解:設(shè)DATA1、DATA2分別為內(nèi)部RAM30H和50H單元。ORG 0000HSJMP STARTORG

22、0030HSTART: MOV R0,#30H ;建立源地址指針MOV R1,#50H ;建立目標(biāo)地址指針MOV R6,#20 ;置計(jì)數(shù)長(zhǎng)度LOOP: MOV A,R0 ;取源地址數(shù)據(jù)XCH A,R1 MOV R0,A ;源地址數(shù)據(jù)與目標(biāo)地址數(shù)據(jù)交換INC R0 ;源地址指針修正INC R1 ;目標(biāo)地址指針修正DJNZ R6,LOOP ;計(jì)數(shù)長(zhǎng)度減1,不等于0繼續(xù)循環(huán)RET END24試編寫一程序,將存儲(chǔ)區(qū)DATA1單元開始的50個(gè)單字節(jié)逐一移至DATA2單元開始的存儲(chǔ)區(qū)中。解:START:MOV R0,#DATA1 ;建立源操作數(shù)地址指針 MOV R1,#DATA2 ;建立目標(biāo)操作數(shù)地址指針

23、MOV R6,#50 ;置計(jì)數(shù)長(zhǎng)度LOOP: MOV A,R0 MOV R0,A INC R0 INC R1 DJNZ R6,LOOP RET END25試編寫一采用查表法求120的平方數(shù)子程序(要求:x在累加器A中,1x20,平方數(shù)高位存放在R6,低位在R7)解:為了方便起見,每一數(shù)的平方在表中統(tǒng)一用雙字節(jié)來(lái)存放,這樣只要把數(shù)乘以2加表頭地址,就可以找到平方數(shù)的高字節(jié)存放的地址,連續(xù)取兩個(gè)字節(jié)即可 ORG 0000HSJMP STARTORG 0030HSTART: MOV DPTR,#TAB ;建立源地址指針DEC AMOV B,AADD A,BMOV B,ALOOP: MOVC A,A+DPTRMOV R5,AINC DPTRMOV A,BMOVC A,A+DPTRMOV R6,ARET TAB: DB00H,00H,00H,01H,00H,04H,00H,09H,00H,16H;平方數(shù)用BCD表示(也可用DB 00H,25H,00H,36H,00H,49H,00H,64H,00H,81H;十六

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論