第一范文网 - 专业文章范例文档资料分享平台

mcs-51单片机

来源:用户分享 时间:2025/10/10 16:43:36 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

MOV 22H,#0FFH MOV A,20H SUBB A,21H JB OV,NEXT

JNB ACC.7,NEXT1 ;差为正则转移

CPL A ;差为负,求补为绝对值 ING A

NEXT1:MOV 22H.,#00H NEXT: SJMP $

2-14 试编写程序,求20H,21H,22H单元的三个补码数差得绝对值,即

。结果保留在A中。若运算出现溢出,则置23H单元为0FFH;否则,

置23H单元为00H。

解:此题的解法与上题相似。只是每次减法以后都要判断是否出现溢出,而不是做完两次减法以后才判断溢出。因为有可能第一次减法以后已经溢出,再作一次减法以后反倒没有溢出,而这时的结果实际上已经不正确了。例如,64-(-64)-(-1)=129。结果已经溢出,但分两步运算时,先由

64-(-64)=01000000-11000000=10000000

这时已经出现溢出,OV=1。若再作第二次减法,则结果为: 10000000-11111111=10000001

溢出标志反而被清零(因为负数减负数不可能溢出),但实际的结果并不正确。所以,需要每作完一次减法运算就检查溢出标志。程序如下:

CLR C

MOV 23H,#0FFH ;先置溢出标志 MOV A,20H

SUBB A,21H ;第一次相减 JB OV,NEXT ;溢出则结束

CLR C ;准备第二次相减 SUBB A,22H ;第二次相减 JB OV,NEXT ;溢出则结束

JNB ACC.7,NEXT1 ;差为正则转移 CPL A ;求反加一 ING A NEXT1:MOV 23H.,#00H NEXT: SJMP $

2-15 有一个16位二进制数,高8位存于21H单元,低8位存于20H单元。试问:(1)执行以下程序段,完成什么逻辑功能?(2)能否用MOV指令替代其中的XCH指令而不改变程序的逻辑功能?写出相应的程序段。(3)这两个程序段的执行结果是否完全相同?差别在那里?

CLR C XCH A,21H RRC A XCH A,21H XCH A,20H RRC A XCH A,20H

解:(1)程序完成的逻辑功能是使21H和20H中的16位二进制数右移一位,并使最高位为0,一般称为逻辑右移一位。

(2)可以用MOV指令,修改后程序段如下: CLR C MOV A,21H RRC A MOV 21H,A MOV A,20H RRC A MOV 20H,A

(3)有所差别。虽然从16位右移功能来说两者的功能是相同的,但第一个程序段执行后,累加器A的内容仍维持原值,而第二个程序段执行后将改变A中的数值。

2-16 分析以下程序段的逻辑功能。若要用MOV指令代替其中的交换指令而不改变程序的逻辑功能,应如何进行修改?设20H中存放的是两个四位二进制数。

MOV R1,#20H

XCHD A,@R1 ADD A,#01H XCHD A,@R1 XCH A,@R1 ADD A,#01H XCH A,@R1

解:程序的功能是将20H单元中的两个四位二进制数分别加1,并且舍弃可能产生的进位。如(20H)=6AH,程序执行后位(20H)=7BH。又如(20H)=9FH,执行后(20H)=A0H。

不采用交换指令而要完成同样的功能,可以有多种修改方法。以下仅为一例: MOV R1,#20H XCHD A,@R1

ADD A,#01H ;低4位加1 JB AC,NEXT ;判断低四位有无进位 ADD A,#01H ;高4位加1 NEXT: MOV @R1,A ;送回20H单元

2-17 分析以下程序段的运行结果。若是将其中的DA A指令取消,则结果会有什么不同? CLR C

MOV 20H,#99H MOV A,20H ADD A,#01H DA A MOV 20H,A

解:程序运行结果是A=00H,Cy=1,(20H)=00H。

取消DAA指令后,运行结果为A=9AH,Cy=0,(20H)=9AH。

2-18 以下的两个程序段中,R2内所存入的都是两位16进制数。试问这两个程序段各进行多少次循环?

MOV R2,#60H LOOP:??

??

DJNZ R2,LOOP

SJMP $ MOV R2,#60H LOOP:??

?? MOV A,R2 ADD A,#99H DA A MOV R2,A JNZ LOOP SJMP $

解:第一个程序段循环96次,第二个程序段循环60次。

第一个程序段中,R2的值就当作一般二进数处理。而第二个程序段中,R2的值是按两位十进数处理的,所以两者的循环次不同。

2-19 指出以下哪些指令是不存在的,并改用其它指令(或若干条指令)来实现预期的指令功能。

(1) MOV 20H,30H (2) MOV R1,R2 (3) MOV @R3,20H (4) MOV DPH,30H (5) MOV C,PSW.1 (6) MOV SMOD,C (7) MOVX R2,@DPTR (8) PUSH 20H (9) POP R0 (10) XCH R1,R2

解:其中第(1),(4),(5),(8)条指令是正确的,其余都不正确,修改结果如下: (2) MOV A,R2 MOV R1,A (3) MOV A,R3

MOV R1,A

搜索更多关于: mcs-51单片机 的文档
mcs-51单片机.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c2fnuj1vhho1symv1jbsr_6.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top