标题: 关于单片机汇编语言延时程序的小疑惑 [打印本页]

作者: Johncui    时间: 2021-1-5 18:40
标题: 关于单片机汇编语言延时程序的小疑惑
在我的理解中按顺序执行程序的话应该是在8那里循环250次,然后在9那里循环250*250=62500,一共就是62500+250=62750,教程里讲解说62500次,我有点不是很明白,还是说7和8是被6包括在里面的,求解答

7a83fd0ef5d84cbdf253f651hei993dc3.jpg (6.05 MB, 下载次数: 111)

7a83fd0ef5d84cbdf253f651hei993dc3.jpg

作者: Y_G_G    时间: 2021-1-6 08:53
循环的次数就是250*250呀,你这+250什么意思?
教材说的是"循环次数",并不是执行时间,执行时间是要计算上6和7,
而且,MOV指令是要一个时钟,而DJNZ是要两个时钟的
整个的执行时间是:1+250+250*250*2+250*2+2
分别对应的是6,7,8,9,10
但一般来说,在长延时里,主要的延时都是在8和9,其它的都可以不计算在内的,因为它占的时间是很少的,而且晶振也会有一定的误差
以上对应的是传统的8051系统
而常用的STC指令执行时间和传统的8051是不一样的
如果学汇编,你是一定要会计算这个的,当你学会计算这个之后,就可以在STC下载器那直接复制就行了


作者: csmyldl    时间: 2021-1-6 13:51
在9那里循环250*250=62500次是对的,但对延时时间来说,9处的250次循环要包括(7的1T,8的2T*250 9的2T),所以总延时时间是:6处1T 7处250T 8处的500T*250  9处的2T*250  10处的2T ,所有时间加起来就是延时时间,其中T代表1个机器周期时间
作者: Johncui    时间: 2021-1-6 15:09
Y_G_G 发表于 2021-1-6 08:53
循环的次数就是250*250呀,你这+250什么意思?
教材说的是"循环次数",并不是执行时间,执行时间是要计算上6和 ...

他这是在6运行完直接到9吗
作者: Y_G_G    时间: 2021-1-6 17:29
Johncui 发表于 2021-1-6 15:09
他这是在6运行完直接到9吗

一步一步来的
你去看一下这DJNZ指令的含义就知道了,它要执行到条件满足了才执行下一个指令的
作者: Johncui    时间: 2021-1-6 19:27
Y_G_G 发表于 2021-1-6 17:29
一步一步来的
你去看一下这DJNZ指令的含义就知道了,它要执行到条件满足了才执行下一个指令的

ok,谢谢啦




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1