单片机与微机原理及应用课后答案(张迎新等)电子工业出版社(DOC) 下载本文

指令和弹栈指令的作用及执行过程。 答:压栈(入栈或进栈)指令的作用是将数据存入堆栈中,其执行过程是先将堆栈指针SP 的内容加1,然 后将直接地址单元中的数据压入SP 指向的单元中。若数据已推入堆栈,则SP 指向最后推入数据所在的存 储单元(即指向栈顶)。 弹栈(出栈)指令的作用是将数据从堆栈中取出,其执行过程为先将堆栈指针 SP 所指出单元的内容送入 直接寻址单元中,然后将SP 的内容减1,此时SP 指向新的栈顶。 24、下述程序执行后,SP=?,A=?,B=?。 ORG 201H MOV SP,#40H MOV A,#30H LCALL 250H ;下条指令地址208H 送41H、42H,SP=42H ADD A,#10H MOV B,A ;地址为20AH L1: SJMP L1 ORG 250H MOV DPTR,#20AH PUSH DPL

SP+1=43H,DPL→(43H)

PUSH

DPH

SP+1=44H,DPH→(44H) RET ;20AH→PC 答:上述程序执行后,SP=42H,A=30H,B=30H。 25、发光二极管点亮规律:先是第1 和第8 个亮,延时一段时间后,第2 和第7 个亮,延时 后,再是第3 和第6 个亮,延时后,最后是第4 和第5 个点亮,延时后循环。 26、若系统晶振频率为 6MHz,求子程序 DELAY 的延时时间,若想加长或缩短时间,应该 怎样修改? 答: DELAY: MOV R2,#0FAH L1: MOV R3,#0FAH L2: DJNZ R3,L2 DJNZ R2,L1 RET 总时间计算:T=4μ s+(250×4μ s+4μ s)×250+4μ s=251.008ms 估算:T=250×4μ s×250=250ms 若想加长延时时间,可以增加循环次数或再加一重循环; 若想减小延

时时间,可以减少循环次数或较少一重循环。 27、P1 口连接8 个共阳极连接的发光二极管,是编制灯亮移位程序。 答: MOV A,#0FEH L1: MOV P1,A RL A LCALL DELAY ;DELAY 子程序同上题 SJMP L1 28、试编一程序,将外部数据存储器2100H 单元中的高4 位置“1”,其余位清“0”。 答: MOV DPTR,#2100H MOVX A,@DPTR ORL A,#0F0H ANL A,#0F0H MOVX @DPTR,A 29、试编程将片内数据存储器40H 单元的第0 为和第7 位置1,其余取反。 答: MOV A,40H CPL A SETB ACC.0 SETB ACC.7 MOV 40H,A 30、将A.5 与80H 位相与的结果,通过P1.4 输出。 MOV C,80H ANL C,ACC.5 MOV P1.4,C 31、请用位操作指令,求下列逻辑方程。 (1) MOV C,B.0 ORL C,P2.1 ANL C,ACC.0 ORL C,/P3.2 MOV P1.7,C (2) MOV C,P1.3 ANL C,ACC.2 MOV 20H,C MOV C,B.5 ANL C,/P1.1 ORL C,20H MOV PSW.5,C (3) MOV C,B.4 ANL C,/P1.5 MOV 20H,C MOV C,P1.0 ANL C,/ACC.7 ORL C,20H MOV P2.3,C 第四章 汇编语言程序设计 1、编程将片内40H~60H 单元中的内容送到以3000H 为首的存储区内。 答: MOV R1,#40H MOV R2,#21H MOV DPTR,#3000H L1: MOV A,@R1 MOVX @DPTR,A INC R1 INC DPTR DJNZ R2,L1 2、编程计算下列算式的程序 (1)23H+45H+ABH+03H= MOV A,#23H ADD A,#45H ADD A,#0ABH XCH A,B ;溢出处理 ADDC A,#00H XCH A,B ADD

A,#03H ;A 中为结果低位,B 中为高位 (2)CDH+15H-38H-46H= MOV A,#0CDH ADD A,#15H SUBB A,#38H SUBB A,#46H (3)1234H+8347H= MOV A,#34H ADD A,#47H MOV 30H,A MOV A,#12H ADDC A,#83H MOV 31,A ;30H 存结果低位,31H 存结果高位 (4)AB123H-43ADCH= CLR C MOV A,#23H SUBB A,DCH MOV 30H,A MOV A,#0B1H SUBB A,#3AH MOV 31H,A MOV A,#0AH SUBB A,,#04H MOV 32H,A ;30H 为低位,32H 为高位 3、设有两个4 位BCD 码,分别存放在23H、22H 单元和33H、32H 单元中,求他们的和, 并送入43H、42H 单元中(低位在低字节,高位在高字节)。 答: MOV A,22H ADD A,32H DA A MOV 42H,A MOV A,23H ADDC A,33H DA A MOV 43H,A 4、略 5、编程计算片内RAM区50H~59H 单元中数的平均值,结果存放在5AH 中。 答: MOV R0,#8 MOV R1,#50H MOV A,#00H L1: ADD A,@R1 INC R1 DJNZ R0,L1 MOV B,#8 DIV AB MOV 5AH,A 6、编写计算下式的程序。设乘积和平方结果均小于 255。a 、b 值分别存在片外 3001H 和3002H 单元中,结果存于片外3000H 单元中。 (1) MOV DPTR,#3001H MOVX A,@DPTR MOV 30H,A ;a 暂存30H 单元 INC DPL MOVX A,@DPTR CJNE A,30H,L1 ;是否a=b MOV A,#25 SJMP SAVE L1: JNC L2 MOV B,30H MUL AB SJMP SAVE L2: MOV B,A MOV A,30H DIV AB SAVE: MOV

DPTR,#3000H MOVX @DPRT,A (2) MOV DPTR,#3001H MOVX A,@DPTR MOV 30H,A INC DPTR MOVX A,@DPTR ADD A,30H MOV B,A MUL AB ; (a+b)2 MOV 31H,A CJNE A,#10,L1 SJMP SAVE L1: JC L2 CLR C SUBB A,#10 SJMP SAVE L2: ADD A,#10 SAVE: MOV DPTR,#3000H MOVC @DPTR,A 7、设有两个长度均为 15 的数组,分别存放在以 200H 和 210H 为首地址的存储区中,试编 程求其对应项之和,结果存放到以220H 为首地址的存储区中。 答: MOV DPH,#02H MOV R1,#15 MOV R2,#00H ; 数组1 首地址低位 MOV R3,#10H ; 数组2 首地址低位 MOV R4,#20H ; 和首地址低位 L1: MOV DPL,R2 MOVX A,@DPTR MOV R1,A MOV DPL,R3 MOVX A,@DPTR ADD A,R1 MOV DPL,R4 MOVX @DTPR,A INC R2 INC R3 INC R4 DJNZ R1,L1 SJMP $ 8、设有 100 个无符号数,连续存放在以 2000H 为首地址的存储区中,试编程统计正数、负 数和零的个数。 答: MOV 30H,#00H ;正数计数器 MOV 31H,#00H ;负数计数器 MOV 32H,#00H ;零计数器 MOV DPTR,#2000H MOV R1,#100 L4: MOVX A,@DPTR INC DPTR CJNE A,#0,L1 INC 32H SJMP L2 L1: JC L3 INC 30H SJMP L2 L3: INC 31H L2: DJNZ R1,L4 SJMP $ 9、将片外数据存储器地址为1000H~1030H 的数据块,全部搬迁到片内RAM 30H~60H 中, 并将原数据块区域全部清零。 答: MOV R0,#30H MOV R2,#31H