标题: 关于单片机LED流水灯延时函数代码分析 [打印本页]

作者: 爱学习的小郎君    时间: 2023-2-1 22:49
标题: 关于单片机LED流水灯延时函数代码分析
为什么要加一个循环,循环里的xms每次减1是干嘛的

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


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

个人见解
作者: zhuls    时间: 2023-2-2 11:14
xms每减1,就运行一次内钳的2级循环 xms(i(j))。如果所有指令都是1T,这个延时约为(2*199*xms)/Fosc时间。调用与返回不算在其内
作者: mtt661    时间: 2023-2-2 11:43
xms如果不减1,那么就永远不会退出while循环,
作者: ldc2000    时间: 2023-2-2 15:39
wulin 发表于 2023-2-2 10:02

大神,那个_nop_()是啥意思?为什么要加,直接增加下面ij数值不行吗
作者: wjq0312    时间: 2023-2-2 17:34
不减1,就会一直卡在这里循环,出不去了,然后后面的程序就都不会运行了。加了减1,每运行一次这里面的代码都会减1,直到减到0,就能跳出这个函数了。然后就能运行后面的代码了。
作者: 我也喜欢    时间: 2023-2-2 19:34
ldc2000 发表于 2023-2-2 15:39
大神,那个_nop_()是啥意思?为什么要加,直接增加下面ij数值不行吗

多一个指令周期,使延时更准确!
作者: 名字不是重点    时间: 2023-2-2 19:37
wjq0312 发表于 2023-2-2 17:34
不减1,就会一直卡在这里循环,出不去了,然后后面的程序就都不会运行了。加了减1,每运行一次这里面的代码 ...

一直加1,溢出不就回到0了?咋就不能跳出呢?不明白。
作者: 君工创    时间: 2023-2-2 20:15
减1一直减到0就等于设定的时间值并且退出。




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