找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2320|回復(fù): 11
收起左側(cè)

關(guān)于單片機LED流水燈延時函數(shù)代碼分析

[復(fù)制鏈接]
ID:1046502 發(fā)表于 2023-2-1 22:49 | 顯示全部樓層 |閱讀模式
51hei截圖20230201224752.png 為什么要加一個循環(huán),循環(huán)里的xms每次減1是干嘛的
回復(fù)

使用道具 舉報

ID:584814 發(fā)表于 2023-2-2 08:44 | 顯示全部樓層
代碼寫的比較清奇,貌似非一般經(jīng)典。
不減 1 大概率進入死循環(huán)延時成凝時。
回復(fù)

使用道具 舉報

ID:332444 發(fā)表于 2023-2-2 09:14 | 顯示全部樓層
在C語言中非0即真所以不寫判斷式==比如要判斷等于2不循環(huán)則要寫判斷式while(xms<2)這樣值等于2就退出循環(huán)了,所有計數(shù)循環(huán)要么++要么--,本例要結(jié)束計數(shù)循環(huán)就用--。
回復(fù)

使用道具 舉報

ID:213173 發(fā)表于 2023-2-2 10:02 | 顯示全部樓層
224801fhjegp0knbduue57.png
回復(fù)

使用道具 舉報

ID:69038 發(fā)表于 2023-2-2 11:04 | 顯示全部樓層
xianfajushi 發(fā)表于 2023-2-2 09:14
在C語言中非0即真所以不寫判斷式==比如要判斷等于2不循環(huán)則要寫判斷式while(xms

用++也行~~

如果XMS=50,--運行50次循環(huán),++則int(65536-50)次循環(huán)。一個是下計數(shù),一個是上計數(shù)而已。
但原則上不用++,而是用--的道理是因為在匯編里有“減1為0跳轉(zhuǎn)”的指令(DJZ),而沒有“加一為0跳轉(zhuǎn)”。
這樣編譯時會節(jié)省點空間。

個人見解
回復(fù)

使用道具 舉報

ID:69038 發(fā)表于 2023-2-2 11:14 | 顯示全部樓層
xms每減1,就運行一次內(nèi)鉗的2級循環(huán) xms(i(j))。如果所有指令都是1T,這個延時約為(2*199*xms)/Fosc時間。調(diào)用與返回不算在其內(nèi)
回復(fù)

使用道具 舉報

ID:1010435 發(fā)表于 2023-2-2 11:43 | 顯示全部樓層
xms如果不減1,那么就永遠不會退出while循環(huán),
回復(fù)

使用道具 舉報

ID:158391 發(fā)表于 2023-2-2 15:39 | 顯示全部樓層

大神,那個_nop_()是啥意思?為什么要加,直接增加下面ij數(shù)值不行嗎
回復(fù)

使用道具 舉報

ID:1022674 發(fā)表于 2023-2-2 17:34 | 顯示全部樓層
不減1,就會一直卡在這里循環(huán),出不去了,然后后面的程序就都不會運行了。加了減1,每運行一次這里面的代碼都會減1,直到減到0,就能跳出這個函數(shù)了。然后就能運行后面的代碼了。
回復(fù)

使用道具 舉報

ID:162622 發(fā)表于 2023-2-2 19:34 | 顯示全部樓層
ldc2000 發(fā)表于 2023-2-2 15:39
大神,那個_nop_()是啥意思?為什么要加,直接增加下面ij數(shù)值不行嗎

多一個指令周期,使延時更準(zhǔn)確!
回復(fù)

使用道具 舉報

ID:824490 發(fā)表于 2023-2-2 19:37 | 顯示全部樓層
wjq0312 發(fā)表于 2023-2-2 17:34
不減1,就會一直卡在這里循環(huán),出不去了,然后后面的程序就都不會運行了。加了減1,每運行一次這里面的代碼 ...

一直加1,溢出不就回到0了?咋就不能跳出呢?不明白。
回復(fù)

使用道具 舉報

ID:965189 發(fā)表于 2023-2-2 20:15 | 顯示全部樓層
減1一直減到0就等于設(shè)定的時間值并且退出。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表