延时函数:
DELAY: MOV R7, #250 ;1
D1: MOV R6, #250 ;2
D2: DJNZ R6, D2 ;3
DJNZ R7, D1 ;4
RET ;5
第一句是定义一个延时函数标号,并将250传到R7
第二句是放置一个标号,并把250放到R6
第三句是放置一个标号,并判断RR6的值是否为0,不为0的话转到后面标号对应处执行
第四句是先将R7减1 ,然后判断R7是否为0 ,不为0的话转到后面的标号对应处执行
第五句是函数结束,详细用法请自行百度。
过程:
程序调用延时函数,根据第一句的编号找到此函数并从第一句开始执行,将R7内的值变为250,执行之后:
R7:250
此时开始执行第二句,将250放在R6内,并在此句前放置标号:D1,执行之后:
R7:250
R6:250
然后开始执行第三句,判断R6是否为0,不为0转到标号D2处开始执行,而D2的标号也是第三条语句,因此只要R6不为0,则一直执行本条语句,又知R6=250,因此,这条语句将执行250次后结束。此时:
R7:250
R6:0
此时将执行第四句,首先将R7值减1,然后判断其值是否为0,将R7-1后R7为249,因此将执行其后的标号D1,即第二句。此时:
R7:249

本文分析了51单片机延时函数的实现细节,通过汇编语言描述了执行流程。在12M晶振的条件下,详细计算了每个指令的执行次数和总延时时间,主要耗时集中在第三条双周期语句上。
最低0.47元/天 解锁文章
7748

被折叠的 条评论
为什么被折叠?



