- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第43-44讲
第43讲
分支程序设计
程序分支是通过条件转移指令实现的,即根据条件是否满足确定程序的流向,满足条件则转移,不满足条件就顺序执行程序。
例4-3 设X存放在30H单元中(补码),根据下式求出Y值并存入31H单元。
X+2 X>0
Y={100 X=0
X<0
解:本例题的关键是判断30H单元存放的数据X的正或负、是否等于0。符号位为数据的最高位,判断其是1还是0即可知其正负。由于30H单元不可位寻址,故应将其数据X送ACC,并在ACC中进行处理;判断X=0?可以使用指令CJNE A,#00H,rel实现,而使用JZ指令更方便。
流程图见图4-3,参考程序如下:
ORG 0100H
SJCL:MOV A,30H ;取数
JB ACC.7,NEG ;负数,转NEG
JZ ZERO ;零,转ZERO
ADD A,#2 ;正数,求Y
SJMP SAVE ;转保存结果
ZERO:MOV A,#100 ;零,Y=100
SJMP SAVE ;转保存结果
NEG: DEC A ;求|X|(末位减1,按位取反)
CPL A
SAVE:MOV 31H,A ;保存结果
RET
例4-5 编写延时1ms子程序,设晶振频率fosc=6MHz。
解:延时子程序均为循环结构程序。具体操作为:给某工作寄存器或直接地址单元装入初值,循环运行DJNZ指令对其减1,减到0时,延时时间到,脱离循环。fosc=6MHz时,机器周期Tm=2μs。DJNZ是双周期指令,即执行一次该指令需要4μs时间,循环执行250次需时250×4μs=1000μs=1ms。参考程序如下:
DEL1MS:MOV R7,#250 ;1×1×2μs=2μs
DEL1: DJNZ R7,DEL1 ;250×2×2μs=1000μs
MOV R7,#250
DEL2: DJNZ R7,DEL2
RET ;1×2×2μs=4μs
以上程序实际延时时间为1000μs+2μs+4μs=1006μs,若要获得准确延时时间,程序可修改为:
DEL1MS:MOV R7,#248 ;1×1×2μs=2μs
DEL1: DJNZ R7,DEL1 ;248×2×2μs=992μs
NOP ;1×1×2μs=2μs
RET ;1×2×2μs=4μs
延时时间恰为1ms。由于工作寄存器只有8位,最大只能装入255,故单重循环的最大延时时间为(1+255×2+2)×Tm,若需更长延时,应使用多重循环结构。
例4-6 编写延时1s子程序,设晶振频率fosc=6MHz。
解:fosc=6MHz时,机器周期Tm=2μs。单重循环能够产生的最大延时时间约为255×2×2μs=1020μs,显然不够,双重循环的最大延时时间约为255×255×2×2μs=260100μs≈0.26s,也达不到要求的延时时间,故需三重循环,设循环初值分别为X、Y、Z,则延时程序为:
DEL1S:MOV R2,#X ;1次×1周期×2μs=2μs
DEL1: MOV R3,#Y ;X次×1周期×2μs=2Xμs
DEL2: MOV R4,#Z ;X×Y次×1周期×2μs=2XYμs
DEL3: DJNZ R4,DEL3 ;X×Y×Z次×2周期×2μs=4XYZμs
DJNZ R3,DEL2 ;X×Y次×2周期×2μs=4XYμs
DJNZ R2,DEL1 ;X次×2周期×2μs=4Xμs
RET ;1次×2周期×2μs=4μs
总延时时间为:(2+2X+2XY+4XYZ+4XY+4X+4)=(6+6X+6XY+4XYZ)μs
设X=10,Y=101,则
Z=(1000000-6-6X-6XY)/4XY
=(1000000-6-6×10-6×10×101)/4×10×101=246.0084
第44讲
补例1:编写双字节与单字节无符号二进制数乘法子程序,即实现
(R2R3)×(R4)→R2R3R4
算法:使用乘法指令实现快速乘法,过程如下
R2 R3
× R4
R3R4H R3R4L
+ R2R4H R2R4L
R2 R3 R4
源程序如下:
ORG 0200H
QMUL:MOV A,R3 ;(R2R3)×(R4)→R2R3R4
MOV B,R4
MUL AB ;R3×R4
XCH A,R4 ;(R3×R4)L←→R4
MOV R5,B ;暂存(R3×R4)H到R5
MOV B,R2
M
您可能关注的文档
最近下载
- 屋面防水工程试水检查试验记录(蓄水)1.doc VIP
- 《十二公民》剧本.docx VIP
- 2025国务院国资委国企绩效评价中心招聘5人备考试题及答案解析.docx VIP
- 【四海】25下半年立体图推精讲班讲义-龙飞.docx VIP
- DLT5285-2018 输变电工程架空导线(800mm2以下)及地线液压压接工艺规程.pdf VIP
- 2024药疹基层诊疗指南(最全版) .pdf VIP
- (高清版)DT 1044-2014 生产项目土地复垦验收规程.pdf VIP
- 生产项目土地复垦验收规程(td1044-2014).pdf VIP
- 2022年11月杭州市直机关遴选公务员面试真题带题目详解.docx VIP
- 2023年11月杭州市直机关遴选公务员面试真题带详细解析.docx VIP
文档评论(0)