汇编 用DJNZ写的延迟程序 如何结束循环

汇编 用DJNZ写的延迟程序 如何结束循环,第1张

延时方法很多,用定时/计数比较方便也比较精确。如果用软件延时,则可以用循环(多重、嵌套都行)。根据时间长短确定循环次数,力求精确。时间计算以机器的晶振频率为基准,算出各指令的运行时间(每条指令运行时间乘所循环的次数就是该指令的全部运行时间),所有指令运行时间的和就是延时的时间。

比如:设晶振频率为12MHz 则每机器周期为1us

513us延时程序

DL513: MOV R7,#0FFH ;1us

DJNZ R7,$;2us 255=510us

RET ;2us

延时时间为1+510+2=513us

延时时间较长则可以用多重循环(以四重循环为例),如:

KKKK0:MOV R2,#XX ;1us

KKKK1:MOV R3,#LL ;1usXX

KKKK2:MOV R4,#NN ;1usXXLL

KKKK3:MOV R5,#MM ;1usXXLLNN

DJNZ R5,$ ;2us XXLLNNMM

DJNZ R4,KKKK3 ;2us XXLLNN

DJNZ R3,KKKK2 ;2us XXLL

DJNZ R2,KKKK1 ;2us XX

RET ;2us

延时时间为1us+1usXX+1usXXLL+1usXXLLNN+2us XXLLNNMM+2us XXLLNN+2us XXLL+2us XX+2us

适当确定四个循环次数XX、LL、NN、MM就能得到准确的延时时间。

汇编语言中:

1 ret和SJMP $相同点: 都属于转移指令。

2 ret和SJMP $区别:

ret是子程序返回指令,放在子程序的结尾,当子程序执行完后,靠该指令返回主程序。

SJMP $ 是相对转移指令 是用在主程序中的,可以作为暂停。

等价于 LL: SJMP LL

就是又跳转到这条指令的本身,反复执行给指令,不再执行别的指令了。

相当于暂停 (或在这等待计算机的中断时间发生)

呵呵 满意 就选满意回答吧

一般这种的都会写成 减1, 程序比较清爽

加1也是要以的, 代码要多一些

LOOP:

INC R1

CJNE R1,#100, LOOP // 没到100转LOOP重新计数

RET // 加到100返回

1、在纸上完成程序初稿;

2、在ide环境中编辑录入程序;

3、编译程序并检查修改编译错误;

4、链接程序形成可执行文件,并继续修改可能影响生成可执行文件的错误;

5、运行程序并检查修改逻辑错误直至实现程序所需要的功能。

以上就是关于汇编 用DJNZ写的延迟程序 如何结束循环 全部的内容,包括:汇编 用DJNZ写的延迟程序 如何结束循环 、汇编语言中ret和SJMP $有什么区别,为什么有些程序结束的时候是用SJMP $ 而有些时候是用RET呢、请问单片机中怎么用汇编实现R1每次加1,到100的时候就结束程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10107519.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存