单片机课后题答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第三章习题解答

4.在8051片内RAM中,已知(30H)=38H,(38H)=40H,(40H)=48H,(48H)=90H,试分析下段程序中各条指令的作用,说出按顺序执行完指令后的结果:

MOV A.40H ;(A)=48H

MOV R1,A ;(R1)=48H

MOV P1,#0FOH ;(P1)=F0H

M0V @R1,30H ;(48H)=38H

MOV DPTR,#1234H ;(DPTR)=1234H

MOV 40H,38H ;(40H)=40H

MOV R1,30H ;(R1)= 38H

MOV 90H,R1 ;(90H)= 38H ,P1的地址为90H

MOV 48H,#30H ;(48H)= 30H

MOV A,@R1 ; (A)= 40H

MOV P2,P1 ; (P2)= 38H F0H错误

8.试编程将片外数据存储器80H单元的内容送到片内RAM的2BH单元。

MOV DPTR, #0080H 或:MOV R0, #80H

MOVX A, @DPTR MOV P2,#00H

MOV 2BH, A MOVX A, @R0

MOV 2BH, A

10.试编程将片内RAM20H单元中的两个BCD数拆开,并变成相应的ASCII码存入片内RAM 21H和22H单元。

MOV A, 20H ;20H的内容不变

ANL A,#0F0H

SWAP A ;4次移位 RR A 也可以

ADD A,#30H

MOV 21H, A

MOV A, 20H

ANL A,#0FH

ADD A,#30H

MOV 22H, A

12.试分析以下两段程序中各条指令的作用,程序执行完后转向何处?

(1) MOV P1,#0CAH ;(P1)= 11001010

MOV A,#56H ;(A)= 01010110

JB P1.2,L1

JNB ACC.3,L2 ;转向L2

L1:…

L2:…

(2)MOV A,#43H ;(A)=01000011

JBC ACC.2,L2

JBC ACC.6,L2 ;转向L2

L1:…

L2:…

18.分析下列程序执行后,(SP)的值。

MOV SP,#2FH

MOV DPTR,#2000H

MOV R7,#50H

NEXT:MOVX A,@DPTR

PUSH A

DJNZ R7,NEXT ;(SP)=2FH+50H 2F+2*50错误

19.试编写程序,查找在30~50H单元中是否有66H这个数据,若有将F0置1,否则将F0清0。

MOV R0,#30H

CLR F0 ;MOV A,#66H

L0:CJNE @R0,#66H, L1 ;SUBB A,@R0 错,因为A已发生变化,不能循环SETB F0 ;JNZ L1……

SJMP STP ;MOV A,@R0 正确

L1: INC R0 ; XRL A,#66H

CJNE R0,#51H, L0 ; JNZ L1

STP: ……

第四章习题解答

4.已知从内部RAM BLOCK单元开始存有一组无符号数,其长度存于LEN单元。试编制程序,将它们按从小到大的顺序排列之后仍存放在原存储区域内。

例4-15将给定数据块中的数据排序

设:N个数据依次存放在内部RAM LIST地址开始的存储区域中,将N个数比较大小之后,使它们按从小到大(或从大到小)的次序排列,仍存放在原存储区域中。

排序是在程序设计中经常使用的一种编程方法。排序的方法有多种,本例采用了较常用的“冒泡”排序法。

冒泡排序的基本思路是:从前向后依次将相邻两个单元中的数据进行比较,即第一个数与第二个数比较,第二个数与第三个数比较……,如两数比较的大小次序符合排序顺序,则不改变它们的存放顺序,否则交换两数位置,使其符合排序要求。

由于每次冒泡后只是从前向后排定一个大数(对于升序排列),所以在整个排序过程中,执行的内容包含两层:第一层为每一轮内的两两比较,第二层为每当一轮比较之后重新组织下一轮的比较,因此宜采用二重循环结构。源程序如下:

ORG 8000H

MOV R7,#N-1 ;置外循环计数 MOV R7,LEN

DEC R7

NEXT:MOV A,R7 ;置内循环计数

MOV R5,A

MOV R0,#LIST ;置数据指针 LIST改为BLOCK

MOV Rl,#0 ;清交换标志

COMP:MOV A,@R0 ;取数据Xi,i=o~n-1

MOV R3,A ;暂存Xi

INC R0 ;修改指针

CLR C ;清进位标志CY

SUBB A,@R0 ;Xi与Xi+1比较

JC LESS ;Xi<Xi+1,不交换

MOV A,R3 ;Xi>Xi+1,交换

XCH A,@R0

DEC R0

MOV @R0,A

INC R0 ;恢复数据指针

MOV R1,#1 ;置交换标志

LESS:DJNZ R5,COMP ;内循环未完,继续

DJNZ R7,LOOP ;外循环未完,查交换标志

SJMP STOP

LOOP:CJNE R1,#0,NEXT ;有交换;继续

STOP:END

程序中R7为外循环计数器,R5为内循环计数器,R0为数据指针,R1为交换标志,R3为暂存寄存器。

对于n个数据的排序,外循环次数需n-1次。内循环次数随着外循环执行次数按递减1规律变化,即第一次内循环次数为n-1,第二次内循环次数n-2,……,依此类推。为了提高排序速度,程序中还设置了数据交换标志R1,当两数比较发生过交换,使其置1,否则清零。在排序过程中,若两数比较没有发生过交换,说明数据顺序已排列就绪,可提前结束循环。

7.编程实现将内部RAM中以50H开始的10个字节的压缩BCD数转换成十六进制数,存放在以60H开始的单元中。

MOV R7,#10 ;循环10次

MOV R1,#60H ;结果存放地址

MOV R0,#50H

LP: MOV A,@R0

ANL A,#0F0H ;取高4位

SWAP A

MOV @R1,A

相关文档
最新文档