找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3054|回復(fù): 14
打印 上一主題 下一主題
收起左側(cè)

看不懂毫秒的單片機(jī)延時程序,為什么不能這樣(我的想法)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1062123 發(fā)表于 2023-2-10 11:30 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
void delay_ms(u16 ms)
{
        u16 i,j;
        for(i=ms;i>0;i--);
        for(j=110;j>0;j--);
}
我的想法:
void delay_ms(u16 ms)
{
while(us--);
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1062123 發(fā)表于 2023-2-10 11:31 | 只看該作者

void delay_ms(u16 ms)
{
        u16 i,j;
        for(i=ms;i>0;i--);
        for(j=110;j>0;j--);
}
我的想法:
void delay_ms(u16 ms)
{
while(ms--);
}
回復(fù)

使用道具 舉報(bào)

板凳
ID:857072 發(fā)表于 2023-2-10 12:19 來自觸屏版 | 只看該作者
這到微秒級了
回復(fù)

使用道具 舉報(bào)

地板
ID:158391 發(fā)表于 2023-2-10 12:53 | 只看該作者
ylthpl 發(fā)表于 2023-2-10 11:31
void delay_ms(u16 ms)
{
        u16 i,j;

那個U16你要是定義成長整型到是可以。
不考慮浪費(fèi)資源和每次延時都得敲一堆數(shù)字的話,而且你這里的MS代表微秒
回復(fù)

使用道具 舉報(bào)

5#
ID:752974 發(fā)表于 2023-2-10 14:29 | 只看該作者
軟件延時是不準(zhǔn)的,是根據(jù)執(zhí)行的指令周期計(jì)算延時時間,這要看編譯后的匯編指令。
回復(fù)

使用道具 舉報(bào)

6#
ID:596109 發(fā)表于 2023-2-10 15:52 | 只看該作者
這種延時是要看硬件來估算的,j=110那行本就是估算的結(jié)果,你寫的那個估算這一步都沒有,單片機(jī)咋知道你要延時多久
回復(fù)

使用道具 舉報(bào)

7#
ID:646520 發(fā)表于 2023-2-10 16:28 | 只看該作者
因?yàn)槟鞘擒浖訒r,人家那是通過計(jì)算次才得出來的,傳入?yún)?shù)就可以得到粗略的延時。你的想法只是單純延時
回復(fù)

使用道具 舉報(bào)

8#
ID:883242 發(fā)表于 2023-2-10 16:55 | 只看該作者
沒人發(fā)現(xiàn)第一個for語句后面多寫了一個;導(dǎo)致延遲根本就不對嗎?
回復(fù)

使用道具 舉報(bào)

9#
ID:1034262 發(fā)表于 2023-2-10 22:02 | 只看該作者
樓主不理解一個循環(huán)的時間。
回復(fù)

使用道具 舉報(bào)

10#
ID:1060328 發(fā)表于 2023-2-11 09:41 | 只看該作者


void delay_ms(u16 ms)
{
        u16 i,j;
        for(i=ms;i>0;i--)                                                   //;
        for(j=110;j>0;j--);
}

這才是ms毫秒的延時
這個延時是不是很精確取決于編譯器將C語言轉(zhuǎn)換成匯編后的匯編語言情況,還有時鐘精確度,晶振一般精度高,RC精度要低。
回復(fù)

使用道具 舉報(bào)

11#
ID:872867 發(fā)表于 2023-2-11 18:44 | 只看該作者
可以,數(shù)據(jù)有范圍的
回復(fù)

使用道具 舉報(bào)

12#
ID:353115 發(fā)表于 2023-2-11 19:41 | 只看該作者
不是說變量取名叫ms,它減1就真的是過去1ms了,哈哈
回復(fù)

使用道具 舉報(bào)

13#
ID:743654 發(fā)表于 2023-2-13 09:28 | 只看該作者

void delay_ms(u16 ms)
{
        u16 i,j;
        for(i=ms;i>0;i--);
        for(j=110;j>0;j--);
}
這個是軟件延時,要根據(jù)MCU的時機(jī)器周期計(jì)算。
u16的范圍是0~65535,若ms為1ms,則最大可延時0~65535ms。
void delay_ms(u16 ms)
{
while(us--);
}
這個程序也有錯,兩個參數(shù)ms,us。若us為1us,則最大可延時0~65535us。
延時時間大于66ms,這個程序就不通用了,第一個程序也便于理解
精確延時請用定時器
回復(fù)

使用道具 舉報(bào)

14#
ID:587810 發(fā)表于 2023-2-17 14:02 | 只看該作者
機(jī)械延時,兩個for嵌套更精準(zhǔn)。
回復(fù)

使用道具 舉報(bào)

15#
ID:1062123 發(fā)表于 2023-3-4 16:48 | 只看該作者
你們都好厲害我應(yīng)該懂了
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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