找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 995|回复: 11
收起左侧

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

[复制链接]
ID:1046502 发表于 2023-2-1 22:49 | 显示全部楼层 |阅读模式
51hei截图20230201224752.png 为什么要加一个循环,循环里的xms每次减1是干嘛的
回复

使用道具 举报

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 | 显示全部楼层
224801fhjegp0knbduue57.png
回复

使用道具 举报

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跳转”。
这样编译时会节省点空间。

个人见解
回复

使用道具 举报

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

使用道具 举报

ID:1010435 发表于 2023-2-2 11:43 | 显示全部楼层
xms如果不减1,那么就永远不会退出while循环,
回复

使用道具 举报

ID:158391 发表于 2023-2-2 15:39 | 显示全部楼层

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

使用道具 举报

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

使用道具 举报

ID:162622 发表于 2023-2-2 19:34 | 显示全部楼层
ldc2000 发表于 2023-2-2 15:39
大神,那个_nop_()是啥意思?为什么要加,直接增加下面ij数值不行吗

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

使用道具 举报

ID:824490 发表于 2023-2-2 19:37 | 显示全部楼层
wjq0312 发表于 2023-2-2 17:34
不减1,就会一直卡在这里循环,出不去了,然后后面的程序就都不会运行了。加了减1,每运行一次这里面的代码 ...

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

使用道具 举报

ID:965189 发表于 2023-2-2 20:15 | 显示全部楼层
减1一直减到0就等于设定的时间值并且退出。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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