![]() |
減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 大概率進入死循環延時成凝時。 |