找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1976|回复: 6
收起左侧

单片机汇编延时问题

[复制链接]
ID:261025 发表于 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
回复

使用道具 举报

ID:283954 发表于 2021-2-16 17:15 | 显示全部楼层
LOOP:
DJNZ 20H, LOOP  ;这一句跑了255次才到zero,跳下一行
DINZ 21H. LOOP ;这句也会跑255次,而每跑一次都会跳回上面的loop处,直到最后一次zero才跳下一行。

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

回复

使用道具 举报

ID:261025 发表于 2021-2-17 07:52 来自手机 | 显示全部楼层
dalaoshi 发表于 2021-2-16 17:15
LOOP:
DJNZ 20H, LOOP  ;这一句跑了255次才到zero,跳下一行
DINZ 21H. LOOP ;这句也会跑255次,而每跑 ...

为啥是255  不是放进去的0吗     
回复

使用道具 举报

ID:809671 发表于 2021-2-17 14:36 | 显示全部楼层
DJNZ 是 "先减一" 不為零則轉移的指令
0-1=?
回复

使用道具 举报

ID:155507 发表于 2021-2-17 17:24 | 显示全部楼层
418854190 发表于 2021-2-17 07:52
为啥是255  不是放进去的0吗

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

0 递减后 是255
回复

使用道具 举报

ID:261025 发表于 2021-2-17 21:46 来自手机 | 显示全部楼层
leehk88 发表于 2021-2-17 14:36
DJNZ 是 "先减一" 不為零則轉移的指令
0-1=?

我之前给20H21H#200 感觉和给#0的时间没差别啊   
回复

使用道具 举报

ID:809671 发表于 2021-2-18 13:22 | 显示全部楼层
418854190 发表于 2021-2-17 21:46
我之前给20H21H#200 感觉和给#0的时间没差别啊

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表