标题: 单片机汇编延时问题 [打印本页]

作者: 418854190    时间: 2021-2-15 16:07
标题: 单片机汇编延时问题
这段程序是用来检测是否有设备接入    三个设备有信号时分别给 01H 02H 03H会写入#0  延时一段时间 如果这段时间内又收到设备信号  会从新给01H 02H 03H写入#0  超过时间没收到信号 图中的程序就会调用显示无信号输入
按照图中的程序延时大概5秒就执行调用显示无信号    去掉21H或22H其中一个瞬间就计数到40 调用显示无信号  21H和22H设置成任何数都不影响这段程序总体延时大概5秒左右   
为什么去掉DJNZ 20H,LOOP;或DJNZ 21H,LOOP;时间会差这么多    以前也遇到过 就是没搞明白什么原因

51hei截图20210215160830.png (31.89 KB, 下载次数: 53)

51hei截图20210215160830.png

作者: dalaoshi    时间: 2021-2-16 17:15
LOOP:
DJNZ 20H, LOOP  ;这一句跑了255次才到zero,跳下一行
DINZ 21H. LOOP ;这句也会跑255次,而每跑一次都会跳回上面的loop处,直到最后一次zero才跳下一行。

因此第一行得跑255 X 255次= 65025次,才会跳出LOOPING,延时当然很长。


作者: 418854190    时间: 2021-2-17 07:52
dalaoshi 发表于 2021-2-16 17:15
LOOP:
DJNZ 20H, LOOP  ;这一句跑了255次才到zero,跳下一行
DINZ 21H. LOOP ;这句也会跑255次,而每跑 ...

为啥是255  不是放进去的0吗     
作者: leehk88    时间: 2021-2-17 14:36
DJNZ 是 "先减一" 不為零則轉移的指令
0-1=?
作者: angmall    时间: 2021-2-17 17:24
418854190 发表于 2021-2-17 07:52
为啥是255  不是放进去的0吗

DJNZ指令首先递减第一个操作数指示的字节,如果结果值不为零,则跳转到第二个操作数指定的地址。

0 递减后 是255
作者: 418854190    时间: 2021-2-17 21:46
leehk88 发表于 2021-2-17 14:36
DJNZ 是 "先减一" 不為零則轉移的指令
0-1=?

我之前给20H21H#200 感觉和给#0的时间没差别啊   
作者: leehk88    时间: 2021-2-18 13:22
418854190 发表于 2021-2-17 21:46
我之前给20H21H#200 感觉和给#0的时间没差别啊

請問你根據甚麼數據定出 20H & 21H =200 =延遲5秒?
工作頻率,DJNZ時鐘週期,循環次數......




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