当前位置:文档之家› 单片机课后习题解答

单片机课后习题解答


LOOP:MOVX
A,@DPTR
ADD A,R4
MOV R4,A
CLR A
ADDC A,R3
MOV R3,A
INC DPTR
DJNZ R2,LOOP
RET
双字节除以20的子程序
子程序名:D-DIV
子程序功能:除以20的子程序
子程序入口:(R3)(R4)=被除数
子程序出口:(R3)(R4)=商
D-DIV: MOV R7,#08H;置计数初值
直到被除数的所有位都处理完为止,一般商的 字长为n,则需循环n次。这种除法上商前,先 比较被除数与除数,根据比较结果,决定商1 或0,并且只有在商为1时,才执行减法,因此 称之为比较法。根据这个算法,可画出适于计 算机编程的框图,如图4.13所示。
3-4 试分析在执行完下面的程序段后,A,R0,R1,R7,SP以及片内RAM的一 些单元中内容各是什么?
MOV SP,#65H MOV R7,#5 MOV R0,#30H MOV R1,#40H LOOP:MOV A,@R1 PUSH ACC MOV A,@R0 MOV @R1,A INC R0 INC R1 DJNZ R7,LOOP
1000 部分余数 - 101
011 余数
1(商)
• 可以看出,商位是以串行方式获得的,下次得 一位。首先把被除数的高位与除数相比较,如 被除数高位大于除数,则商位为1,并从被除 数中减去除数,形成一个部分余数;否则商位 为0,不执行减法。然后把新的部分余数左移 一位,并与除数再次进行比较。循环此步骤,
(A)=AAH,Cy=0,AC=0,OV=1,P=0 (3) ADDC A,30H;01111010+10100101+1=1,00100000 ( A ) =20H , Cy=1,AC=1,OV=0,P=1 (4) SUBB A,@R0;01111010-10100101-1=1,11010100,
DV1:
CLR C
MOV A,R4;将(R3)(R4)左移1位
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV 00H,C;将移出的标志位送00H
CLR C
SUBB A,R2;余数高位减除数
JB
பைடு நூலகம்
00H,GOU;标志位为1够减
JNC
GOU;无借位,也说明够减
ADD A,R2,不够减,恢复余数
4. 定点数除法
1) 无符号二进制数除法
• 正如乘法能由一系列加法和移位操作实 现一样,除法也可由一系列减法和移位 操作实现。为了设计出除法的算法,先 分析二进制数的手算除法。下式说明两 个二进制数A=100100和B=101的手算除 法步骤:
100100÷101=1 0 - 101
0100 部分余数 - 000
(8)PUSH 30H;SP=66H,(66H)=A5H (9)POP B;SP=64H,(B)=(65H) (10) XCH A,@R0;(A)=A5H,(30H)=7AH, OV=0,AC=0,P=0
Cy=1,
3-3 已知片内RAM中(30H)=64H,(50H)=04H,片外RAM中(1000H) =0FFH,(2004H)=00H,并且TAB=2000H,试分析顺序执行每条指令的结果。
MOV DPTR,#2000H ACALL AVG
子程序名:AVG
子程序功能:求20个无符号数平均值子程序
子程序入口:(DPTR)=数据区首地址指针
子程序出口:(R3)(R4)=均值
AVG: MOV
R2,#20
MOV R3,#00H;部分和高位字节单元清零
MOV R4,#00H;部分和低位字节单元清零
ACALL D-ADD;调用累加和子程序
ACALL D-DIV;调用除以20的子程序
求多字节累加和子程序
子程序名:D-ADD
子程序功能:多字节累加和子程序
子程序入口:(DPTR)=数据区首地址指针
子程序出口:(R3)(R4)=累加和,R3中内容为和高字节,R4中
内容为和低字节
D-ADD:CLR C
结果:(A)=(34H), (R0)=34H,(R1)=44H,(R7)=0, SP=70H ,( 70H)=(44H),(30H)=(40H),…(34H)=(44H)。 3-5 已知SP=62H,(62H)=50H,(61H)=30H,问执行指令RET后,PC=? ,SP=?并解释。 答:执行指令RET,从堆栈中弹出地址值给PC,栈指针减2,(62H),(61H)中 的内容分别弹出PC=5030H,SP=60H 3-7 试编程求出片外RAM从2000H开始的连续20个单元的平均值,并将结果存入内 部RAM20H单元。
(1) MOV R0,#30H;(R0)=30H (2) MOV A,@R0;(A)=64H (3) MOV DPTR,#1000H;(DPTR)=1000H (4) MOVX @DPTR,A;(1000H)=64H (5) MOV A,50H;(A)=04H (6) MOV DPTR,#TAB;(DPTR)=2000H (7) MOVC A,@A+DPTR;(A)=00H (8) MOV P1,A;(P1)=00H
(A)=D4H,Cy=1,AC=0,OV=1,P=0
(5) DA A;01111010+00000110=10000000, (A)=80H,Cy=0,其它无影响
(6) RLC A;(A)=11110101B=F5H,Cy=0, AC=0,OV=0,P=0
(7)RR A;(A)=00111101B=3DH,Cy=1, AC=0,OV=0,P=1
AJMP DV2
GOU:INC
R4;够减,商上1
DV2: MOV R3,A
DJNZ R7,DV1;减完?没完继续
MOV 20H,R3;转存20H
MOV 21H,R4;转存21H
RET
MOV 21H,R4;转存21H RET
商数 除数 被除数
-除数 作减法,够减商上1 余数 -除数 再作减法,不够减商为0,并恢复减法前的余数 余数 -除数 再作减法,直至最后
第三章
3-1 已知A=7AH,R0=30H(30H=A5H),PSW=80H,SP=65H,试分析下面每条 指令的执行结果及对标志位的影响。 (1) ADD A,@R0; 01111010+10100101=1,00011111, ( A ) =1FH , Cy=1 ,AC=0,OV=0,P=1 (2)ADD A,#30H;01111010+00110000=10101010,
相关主题