熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2023-8-22 18:46
正文摘要:51單片機(jī)void delay (void) {uint i; for(i=0;i<25530;i++;); } 能一條條解釋下嗎?感謝!! 是什么意思 |
for(i=0;i<25530;i++;) ;這條語(yǔ)句里i++;多了一個(gè); |
延時(shí)的for循環(huán)就是對(duì)設(shè)定的計(jì)數(shù)進(jìn)行計(jì)數(shù),直到計(jì)數(shù)完畢。 |
we199999 發(fā)表于 2023-8-23 00:28 這個(gè)可能是delay函數(shù)出問(wèn)題了吧 |
還是買個(gè)開發(fā)板 我看看教程 |
// 使用for循環(huán)來(lái)實(shí)現(xiàn)延遲 for(i=0; i<25530; i++) // 循環(huán)次數(shù)為25530次 { // 空循環(huán),不執(zhí)行任何操作 } |
定義1個(gè)無(wú)符號(hào)的整型變量i, |
51單片機(jī)利用for語(yǔ)句嵌套實(shí)現(xiàn)簡(jiǎn)單的延時(shí)1s功能 名詞解釋: (1)時(shí)鐘周期。定義為時(shí)鐘頻率的倒數(shù),本例使用12MHz的時(shí)鐘頻率,它的時(shí)鐘周期大約就是1/12μs。 (2)機(jī)器周期。單片機(jī)的基本操作周期,STC89C51系列的單片機(jī)來(lái)說(shuō),一個(gè)機(jī)器周期由12個(gè)時(shí)鐘周期組成,也就是1μs。 (3)指令周期。指的是單片機(jī)執(zhí)行一條指令需要的時(shí)間,一個(gè)指令周期需要1~4個(gè)機(jī)器周期。一個(gè)for循環(huán)需要8個(gè)指令周期。 假設(shè)單片機(jī)采用了12MHz的時(shí)鐘頻率,利用for語(yǔ)句嵌套實(shí)現(xiàn)簡(jiǎn)單的延時(shí)1s功能。 unsigned int i; Unsigned char j; //定義兩個(gè)循環(huán)變量i、j for (i = 1000; i > 0; i--) //外層循環(huán)1000次 for (j = 124; j > 0; j--) ; //內(nèi)層循環(huán)124次 內(nèi)層循環(huán)代碼含義: 在12MHz的時(shí)鐘頻率下,for循環(huán)124次所消耗的時(shí)間ntime是: ntime= 124次 × 8個(gè)指令周期 × 1μs = 992μs 也就是內(nèi)循環(huán)延時(shí)大概為1ms。 那么,全部執(zhí)行完成花費(fèi)的總時(shí)間T大約是: T = 1000 × ( ntime + 8 × 1 ) = 1000 ms=1s,基本上達(dá)到延時(shí)1s的功能。這個(gè)延時(shí)程序中外層循環(huán)的變量是多少,整個(gè)for嵌套語(yǔ)句就延時(shí)大約多少毫秒,在以后的應(yīng)用當(dāng)中,會(huì)經(jīng)常用到這個(gè)程序進(jìn)行不需要精確時(shí)間的延時(shí)。 比如,要實(shí)現(xiàn)4s的延時(shí),就把i=1000修改為i=4000就可以了。 |
延時(shí)的for循環(huán)就是對(duì)設(shè)定的計(jì)數(shù)進(jìn)行計(jì)數(shù),直到計(jì)數(shù)完畢。 |
sttt300 發(fā)表于 2023-8-24 09:23 剛學(xué),我看了是進(jìn)行宏定義了 |
we199999 發(fā)表于 2023-8-23 11:42 這種也有延時(shí)效果的 |
we199999 發(fā)表于 2023-8-23 00:28 第12行有問(wèn)題,會(huì)影響后面的代碼 |
we199999 發(fā)表于 2023-8-23 18:16 這不可能,可能中間有這個(gè)delay函數(shù),你再看看是不是看漏了 或者編譯一下,有沒(méi)有報(bào)錯(cuò) 我感覺(jué)你不是來(lái)問(wèn)問(wèn)題的,是來(lái)找老師的吧?這也太基礎(chǔ)了吧,連入門都不算 |
cnfloatleaf 發(fā)表于 2023-8-22 23:24 你就寵著她吧,符號(hào)都錯(cuò)了 ++ 和 + +能一樣嗎 |
51hei截圖_20230824090326.png (17.92 KB, 下載次數(shù): 52)
基本定義/主要內(nèi)容:該代碼段是一個(gè)名為"delay"的函數(shù),它沒(méi)有返回值(void)。函數(shù)中包含一個(gè)循環(huán),使用一個(gè)無(wú)符號(hào)整數(shù)變量i進(jìn)行計(jì)數(shù),循環(huán)的次數(shù)為25530次。 |
mengzhixinheng 發(fā)表于 2023-8-23 07:21 可以的,就是延時(shí)我換了個(gè)方法就出問(wèn)題,之前是能實(shí)現(xiàn)效果 |
201936010427 發(fā)表于 2023-8-23 10:21 我看有的教程只有聲明,沒(méi)有定義是怎么做到實(shí)現(xiàn)效果呢 |
we199999 發(fā)表于 2023-8-23 00:28 延時(shí)函數(shù)有問(wèn)題,延時(shí)函數(shù)就是為了讓單片機(jī)在那里空運(yùn)行,你現(xiàn)在只定義了一個(gè)延時(shí)函數(shù),卻沒(méi)有定義延時(shí)函數(shù)中的循環(huán)內(nèi)容,void delay (void) {uint i; for(i=0;i<25530;i++;); } |
we199999 發(fā)表于 2023-8-23 00:28 你的delay函數(shù)里面都是空的沒(méi)內(nèi)容。 void delay (uint ms) { unsigned char i, j,m; m=ms; while(m--) { _nop_(); _nop_(); _nop_(); i = 11; j = 190; do { while (--j); } while (--i); } } |
猜測(cè)是delay()函數(shù)有問(wèn)題,把delay函數(shù)貼出來(lái)看看吧 |
看錯(cuò)了,不好意思 |
n被不斷被初始化了,你這樣也不是流水燈的效果 |
cnfloatleaf 發(fā)表于 2023-8-22 23:24 多謝大佬 |
void delay (void) //定義一個(gè)子程序, void 沒(méi)有返回值 {uint i; // 定義一個(gè)變量,無(wú)符號(hào)整形數(shù) for(i=0;i<25530;i++;);//一個(gè)循環(huán)語(yǔ)句,i從0一直加到25530,結(jié)束循環(huán) } |
Hephaestus 發(fā)表于 2023-8-22 21:31 今天剛學(xué)哈哈 |
這已經(jīng)是最最最基礎(chǔ)的c語(yǔ)言問(wèn)題,連這個(gè)都看不懂實(shí)在是沒(méi)有講解的必要了。 |
for延時(shí) 上面的文章講的很詳細(xì) |
Powered by 單片機(jī)教程網(wǎng)