单片机习题参考答案.doc

上传人:scccc 文档编号:12046378 上传时间:2021-12-01 格式:DOC 页数:11 大小:183KB
返回 下载 相关 举报
单片机习题参考答案.doc_第1页
第1页 / 共11页
单片机习题参考答案.doc_第2页
第2页 / 共11页
单片机习题参考答案.doc_第3页
第3页 / 共11页
单片机习题参考答案.doc_第4页
第4页 / 共11页
单片机习题参考答案.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《单片机习题参考答案.doc》由会员分享,可在线阅读,更多相关《单片机习题参考答案.doc(11页珍藏版)》请在三一文库上搜索。

1、范文范例指导学习第3章习题参考答案word版本整理分享3.13.23.33.4(略)(略)(略)指出下列指令源操作数的寻址方式和功能。1) MOV A,# 40H ;立即寻址。40H A2) MOV A, 40H;直接寻址。(40H)A3) MOV A R1;寄存器间址。(R1)A4) MOV A R3;寄存器寻址。R3 A5) MOVC A A+PC 变址寻址。(A+PC A6) SJMP LOOP;相对寻址。程序转到标号为LOOP的语句处执行。3.5内部RAM的00H单元的寻址方式:1)直接寻址,MOV A 00H2) 因为00H是工作寄存器区,所以还可以寄存器寻址。MOV A R0 特殊

2、功能寄存器中的操作数的寻址方式:1)直接寻址,MOV A SP2)部分SFR可以位寻址,MOV C ACC.73.6变址寻址和相对寻址中的地址偏移量异同:1)变址寻址的偏移量是一个 00HFFH范围内的无符号数;相对寻址偏移量是一个带符号的范围为-128+127。8位二进制补码,3.73.82)变址寻址的偏移量放在累加器 A中,相对寻址的偏移量直接在指令中给岀3)都是将基地址与地址偏移量相加,形成操作数地址。指令50H的含义机器码MOVA,# 50H源操作数7450HMOVA,50H源操作数的地址E550HMOV50H,# 20H目的操作数的地址755020HMOVC, 50H位地址A250H

3、MOV50H,20H目的操作数的地址852050H指令66H的含义机器码MOVRQ# 66H源操作数7666HMOVR6,#66H源操作数7E66HMOV66H,# 45H目的操作数的地址756645HMOV66H,C位地址9266HMOV66H,R1目的操作数的地址8966H写出下列指令的机器码,指出指令中50H和66H各代表什么?1)写岀下列指令的机器码,指岀下列程序执行后的结果。1) MOV A # 60H机器码:7460H7840HF6 H8841HC8 HMOV R0 # 40HMOV R0AMOV 41H R0XCH A,R0 结果:A = 40H,R0 = 60H,( 40H)

4、= 60H,(41H) = 40H2) MOV DPTR # 2003HMOV A, # 18H机器码:902003H7418H752038HMOV 20H, # 38HMOV RO, # 20H7820HXCH A, R0C8H结果:A = 38H , RO = 20H , ( 20H) = 18H3.9 写出能完成下列数据传送的指令。1)R1中的内容传送到 R0MOV R0, 01H 或:MOV A, R1MOV R0, A2)内部RAM 20H单元中的内容送到 30HMOV 30H, 20H3)外部RAM 20H单元中的内容送到内部 RAM 20H单元MOV R0 , # 20HMOV

5、P2, # 00H;外部RAM区 16位地址的高8位清0MOVX A R0MOV 20H, A4)外部RAM 2000H单元中的内容送到内部 RAM 20H单元MOV DPTR # 2000HMOVX A DPTRMOV 20H, A5)外部ROM 2000H单元中的内容送到内部 RAM 20H单元MOV DPTR # 2000HMOV A , # 00HMOVC A A+DPTRMOV 20H , A6)外部ROM 2000H单元中的内容送到外部RAM 3000H单元SPMOV DPTR # 2000HMOV A , # 00HMOVC A A+DPTRMOV DPTR # 3000HMOV

6、X DPTR A3.10 试编出把外部RAM的2050H单元中的内容与2060H单元中的内容相交换的程序MOV DPTR # 2050HMOVX A , DPTRMOV R0, AMOV DPTR # 2060HMOVX A , DPTRXCH A , R0MOVX DPTRAMOV DPTR # 2050HMOV A , R0MOVX DPTRA3.11 已知(20H) = X ,( 21H) = Y ,(22H) = Z。请用图示说明下列程序执行以后堆栈中的内容是什么?MOV SP , # 70HPUSH 20HPUSH 21HPUSH 22H1) MOV SP, # 60HPUSH 22

7、HPUSH 21HPUSH20H3.123.133.141)POP20H;(20H) = ZPOP21H;(21H) = YPOP22H;(22H) = X2)POP22H;(22H) = ZPOP21H;(21H) = YPOP20H;(20H) = X试问如下程序执行后累加器 A和PSW中的内容是什数据出栈后SP的位置SP么?1) MOV A,ADD A,2) MOV A,ADD A,# 0FEH# 0FEH# 92H# 0A4H指令结果如下:1)A = 20H,Cy = 1,2)A = D5H,Cy = 13)A = 49H,Cy = 0 ,4)A = 4AH,Cy = 0 ,A = F

8、CH,PSW = C0HA = 36H,PSW = 84H(30H) = A6HR0 = 2FH(30H) = A4H3.15已知内部RAM的M1、M2和M3单元中有无符号数 X1、X2和X3。编程令其相加,并把和存入R0和R1( R0中为已知SP = 73H,( 71H) = X,( 72H) = Y,( 73H)= Z。试问执行下列程序后 20H, 21H和22H单元中的内容是 什么?并用图示说明堆栈指针 SP的指向和堆栈中数据的变化。高8位)中。 参考程序如下:ORG 1000HMOVA, BMOV R0, # M1MOVR0, # M3MOV R1, # M2ADDA, R0MOV A

9、,R0MOVR0, AADD A,R1MOVA, # 00HMOV B,ADDC A, R13.16MOV A,ADDCMOV参考程序:# 00HA, # 00HR1, AMOV R1,SJMPENDORG1000HMOV AR0取被乘数高8位MOVR0,# M1MOV B, R1MOVA,R0 ;取被乘数低8位MUL ABMOVR1,# M2ADD A ,R3MOVB,R1;取乘数MOV R3AMULAB;被乘数低8位与乘数相乘MOV ABMOVR4,A ;保存低8位ADDC A,# 00H;加上进位MOVR3,BMOV R2A;保存高8INCR0SJMP $END位3.17参考程序:ORG

10、 1000HMOV R0, # 20HMOV A, R0INC R0MOV B, R0DIV ABMOV R0, # 20H3.18参考程序:ORG 1000HCLR CMOV A, #5DHSUBB A, # B4HMOV R0, # 30HMOV R0, A;取被除数;取除数;A / B = A B;保存商的低8位MOV P2, # 00HMOVX R0, A ;保存商INC R0MOVX R0, B ;保存余数SJMP $ENDMOV A, # 6FHSUBB A, # 13HINC R0MOV R0, A;保存商的高 8位SJMP $END1)A = E1H,( 30H)= ABH2)

11、A = AAH3)A = 10H4)A = F0H3.20 参:考程序:3.19参考答案:1)ANL20H,3FH2)ORL20H,C0H3)XRL20H,C0H4)XRL20H,FFH或:MOV A,20HCPL AMOV 20H, A3.21 参考程序:(用移位指令,两操作数为8位无符号数,操作结果255)1) ORG 1000HMOV DPTR, # 2000HMOVX A, DPTRMOV R0, ACLR CRLC AADD A, R0MOV R0, A2) ORG 1000HMOV DPTR, # 2000HMOVX A, DPTRMOV R0, ACLR CRLC ACLR CR

12、LC AADD A, R0INC DPTRMOVX A, DPTRCLR CRLC AADD A, R0MOV 20H, ASJMP $ENDINC DPTRMOVX A, DPTRCLR CRLC AXCH A, R0CLR CSUBB A, R0MOV 20H, ASJMP $MOV R0, AEND3.22 设A为无符号数,当 A满足以下条件时转到LABEL的参考程序段:1)CJNE A , #14H ,COMP;若A工20,则形成 Cy并转到COMP2)3)4)3.233.243.253.26SJMP LABELCOMP: JNC LABELSJMPA < 20CJNESJMPA

13、 , #14H ,COMPDONECOMP: JC LABELDONE: SJMP $CJNE A , #0AH ,SJMP LABELCOMP: JC LABELSJMPA > 10CJNESJMPA , #0AH ,DONECOMP: JC DONESJMP LABELDONE: SJMP $参考程序:;若COMPCOMP;若 A = 20,则转至U LABEL;若Cy = 0,表示没有进位,则 A> 20,转到LABEL;若A工20,则形成Cy并转到COMP;若A = 20,则停机Cy = 0,表示没有进位,贝U A < 20,转至U LABEL;若A工10,则形成Cy

14、并转到COMP;若A = 10,则转到LABEL;若A工10则判断Cy,若小于则转到 LABEL;若A工10,则形成 Cy并转到COMP;若A = 10,则停机;若Cy = 1 ,表示A <10,则停机;若 A>10,转到 LABELORG 1000HMOV DPTR, # DATA1;源操作区的起始地址70HMOV R0, #30H;目的操作区的起始地址MOV R2, #14H;数据块长度71HNEXT: MOVX A, DPTR72HMOV R0, A;从源操作取操作数INC DPTRINC R0;判断数据块是否传送结束DJNZ R2, NEXTSJMP $END执行完调用指令

15、后,堆栈指针 堆栈中的内容为SP = 72H,2345H+02H = 2347H,如图所示:调用的子程序在:执行RET指令后,3456HSP = 70H , PC = 2347H71H 72H中的内容不变,仍为 47H和23H,但不属于堆栈区。 若SUPER = 4060H,则程序2、3都是正确的。程序 3更好一点。程序1是绝对调用指令,只能在 2KB区域内寻址。若SUPER = 2060H,程序1最好,因为绝对调用指令是在页内寻址,比长调用指令更有效。3.27参考程序:ORG 1000HMOV R0, #20HMOV R2, #14H;目的操作区的起始地址;数据块长度栈底47H23HSP3.28MOV DPTR, # 2000HLOOP: MOVX A, DPTR;源操作区的起始地址INC DPTRJB ACC.7 , NEXTMOV R0, AINC R0NEXT: DJNZ R2, LOOPSJMP $END参考程序:ORG 1000HMOV A, 20HCLR C;若为负数,则去判断下一个;若为正数,则送到片内 RAM区;判断数据块是否传送结束SUBB A, 21HJNB ACC.7, DONE ;差为正数则存结果CPL A ;若差为负数,则求绝对值INC ADONE: MOV 30H, A ;存结果SJMP $END

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1