找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

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

查看数: 2326 | 评论数: 11 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-2-1 22:49

正文摘要:

为什么要加一个循环,循环里的xms每次减1是干嘛的

回复

ID:965189 发表于 2023-2-2 20:15
减1一直减到0就等于设定的时间值并且退出。
ID:824490 发表于 2023-2-2 19:37
wjq0312 发表于 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:1022674 发表于 2023-2-2 17:34
不减1,就会一直卡在这里循环,出不去了,然后后面的程序就都不会运行了。加了减1,每运行一次这里面的代码都会减1,直到减到0,就能跳出这个函数了。然后就能运行后面的代码了。
ID:158391 发表于 2023-2-2 15:39

大神,那个_nop_()是啥意思?为什么要加,直接增加下面ij数值不行吗
ID:1010435 发表于 2023-2-2 11:43
xms如果不减1,那么就永远不会退出while循环,
ID:69038 发表于 2023-2-2 11:14
xms每减1,就运行一次内钳的2级循环 xms(i(j))。如果所有指令都是1T,这个延时约为(2*199*xms)/Fosc时间。调用与返回不算在其内
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:213173 发表于 2023-2-2 10:02

ID:332444 发表于 2023-2-2 09:14
在C语言中非0即真所以不写判断式==比如要判断等于2不循环则要写判断式while(xms<2)这样值等于2就退出循环了,所有计数循环要么++要么--,本例要结束计数循环就用--。
ID:584814 发表于 2023-2-2 08:44
代码写的比较清奇,貌似非一般经典。
不减 1 大概率进入死循环延时成凝时。

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

Powered by 单片机教程网

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