找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2303|回复: 11
打印 上一主题 下一主题
收起左侧

关于单片机LED流水灯延时函数代码分析

[复制链接]
跳转到指定楼层
楼主
为什么要加一个循环,循环里的xms每次减1是干嘛的
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:584814 发表于 2023-2-2 08:44 | 只看该作者
代码写的比较清奇,貌似非一般经典。
不减 1 大概率进入死循环延时成凝时。
回复

使用道具 举报

板凳
ID:332444 发表于 2023-2-2 09:14 | 只看该作者
在C语言中非0即真所以不写判断式==比如要判断等于2不循环则要写判断式while(xms<2)这样值等于2就退出循环了,所有计数循环要么++要么--,本例要结束计数循环就用--。
回复

使用道具 举报

地板
ID:213173 发表于 2023-2-2 10:02 | 只看该作者

回复

使用道具 举报

5#
ID:69038 发表于 2023-2-2 11:04 | 只看该作者
xianfajushi 发表于 2023-2-2 09:14
在C语言中非0即真所以不写判断式==比如要判断等于2不循环则要写判断式while(xms

用++也行~~

如果XMS=50,--运行50次循环,++则int(65536-50)次循环。一个是下计数,一个是上计数而已。
但原则上不用++,而是用--的道理是因为在汇编里有“减1为0跳转”的指令(DJZ),而没有“加一为0跳转”。
这样编译时会节省点空间。

个人见解
回复

使用道具 举报

6#
ID:69038 发表于 2023-2-2 11:14 | 只看该作者
xms每减1,就运行一次内钳的2级循环 xms(i(j))。如果所有指令都是1T,这个延时约为(2*199*xms)/Fosc时间。调用与返回不算在其内
回复

使用道具 举报

7#
ID:1010435 发表于 2023-2-2 11:43 | 只看该作者
xms如果不减1,那么就永远不会退出while循环,
回复

使用道具 举报

8#
ID:158391 发表于 2023-2-2 15:39 | 只看该作者

大神,那个_nop_()是啥意思?为什么要加,直接增加下面ij数值不行吗
回复

使用道具 举报

9#
ID:1022674 发表于 2023-2-2 17:34 | 只看该作者
不减1,就会一直卡在这里循环,出不去了,然后后面的程序就都不会运行了。加了减1,每运行一次这里面的代码都会减1,直到减到0,就能跳出这个函数了。然后就能运行后面的代码了。
回复

使用道具 举报

10#
ID:162622 发表于 2023-2-2 19:34 | 只看该作者
ldc2000 发表于 2023-2-2 15:39
大神,那个_nop_()是啥意思?为什么要加,直接增加下面ij数值不行吗

多一个指令周期,使延时更准确!
回复

使用道具 举报

11#
ID:824490 发表于 2023-2-2 19:37 | 只看该作者
wjq0312 发表于 2023-2-2 17:34
不减1,就会一直卡在这里循环,出不去了,然后后面的程序就都不会运行了。加了减1,每运行一次这里面的代码 ...

一直加1,溢出不就回到0了?咋就不能跳出呢?不明白。
回复

使用道具 举报

12#
ID:965189 发表于 2023-2-2 20:15 | 只看该作者
减1一直减到0就等于设定的时间值并且退出。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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