减1一直减到0就等于设定的时间值并且退出。 |
wjq0312 发表于 2023-2-2 17:34 一直加1,溢出不就回到0了?咋就不能跳出呢?不明白。 |
ldc2000 发表于 2023-2-2 15:39 多一个指令周期,使延时更准确! |
不减1,就会一直卡在这里循环,出不去了,然后后面的程序就都不会运行了。加了减1,每运行一次这里面的代码都会减1,直到减到0,就能跳出这个函数了。然后就能运行后面的代码了。 |
大神,那个_nop_()是啥意思?为什么要加,直接增加下面ij数值不行吗 |
xms如果不减1,那么就永远不会退出while循环, |
xms每减1,就运行一次内钳的2级循环 xms(i(j))。如果所有指令都是1T,这个延时约为(2*199*xms)/Fosc时间。调用与返回不算在其内 |
xianfajushi 发表于 2023-2-2 09:14 用++也行~~ 如果XMS=50,--运行50次循环,++则int(65536-50)次循环。一个是下计数,一个是上计数而已。 但原则上不用++,而是用--的道理是因为在汇编里有“减1为0跳转”的指令(DJZ),而没有“加一为0跳转”。 这样编译时会节省点空间。 个人见解 ![]() |
![]() |
在C语言中非0即真所以不写判断式==比如要判断等于2不循环则要写判断式while(xms<2)这样值等于2就退出循环了,所有计数循环要么++要么--,本例要结束计数循环就用--。 |
代码写的比较清奇,貌似非一般经典。 不减 1 大概率进入死循环延时成凝时。 |