欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

新手入門,單片機(jī)延時(shí)函數(shù)看不懂

  [復(fù)制鏈接]
ID:288745 發(fā)表于 2018-3-7 15:54 | 顯示全部樓層 |閱讀模式
我學(xué)著一本書上打了一段控制led燈閃爍的單片機(jī)程序,如下
#include "reg52.h"         
                                                                 
                #define uInt16 unsigned int
                sbit LED1=P2^0 ;
                void delayms(uInt16 valMS)
        {
        uInt16 uival,ujval;
        for(uival=0;uival<valMS;uival++
for(ujval=0;ujval<113;ujval++);
}
        void main(void)         
        {
        while(1)
        {        LED1=0;
        delayms(1000);
        LED1=1;
        delayms(1000);
        }
        }

然后我試著刪除第二個(gè)for循環(huán),結(jié)果發(fā)現(xiàn)燈變成了常亮,這是怎么回事呢?這個(gè)函數(shù)的大致意思是什么?為什么要定義兩個(gè)局部變量?
回復(fù)

使用道具 舉報(bào)

ID:288753 發(fā)表于 2018-3-7 16:08 | 顯示全部樓層
第一個(gè)for循環(huán)括號沒括住,語句結(jié)束時(shí)加";"

評分

參與人數(shù) 1黑幣 +10 收起 理由
admin + 10 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:288641 發(fā)表于 2018-3-7 16:29 | 顯示全部樓層
通過循環(huán)實(shí)現(xiàn)延時(shí)函數(shù)的原理:單片機(jī)執(zhí)行每一條程序需要時(shí)間(時(shí)間非常短),通過循環(huán)函數(shù),達(dá)到延時(shí)的目的。
這個(gè)函數(shù)的意思:經(jīng)過多次調(diào)試,發(fā)現(xiàn)單片機(jī)每做113條循環(huán)指令需要的時(shí)間為1ms,因此,通過嵌套循環(huán),輸入形參valMS, 單片機(jī)就會(huì)執(zhí)行 113*valMS次循環(huán)指令,達(dá)到延時(shí)valMS 毫秒的目的.
去掉第二個(gè)循環(huán)燈常亮的原因:循環(huán)的執(zhí)行次數(shù)少了,導(dǎo)致延時(shí)效果減弱,實(shí)際燈還是在閃爍,只不過延時(shí)太短,肉眼無法分清。假如把里面的循環(huán)函數(shù)去掉,那么可以將for(uival=0;uival<valMS;uival++) 改成
for(uival=0;uival<valMS*113;uival++); 效果一樣,不過此時(shí)valMS最大值減小,因?yàn)閡ival 的數(shù)據(jù)類型是16位,uival不能超過65535.
為什么要有兩個(gè)局部變量:因?yàn)橐獙?shí)現(xiàn)兩個(gè)循環(huán)函數(shù),一個(gè)不夠

評分

參與人數(shù) 1黑幣 +90 收起 理由
admin + 90 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:287770 發(fā)表于 2018-3-7 16:31 | 顯示全部樓層
首先52的機(jī)器周期大約1us,也就是說走一個(gè)語句需要時(shí)間是1us。然后你要弄懂,C語言的for是怎么走的,for的作用我就不多說了。 你這里的   for(uival=0;uival<valMS;uival++)
for(ujval=0;ujval<113;ujval++);
實(shí)際上就是for(uival=0;uival<valMS;uival++)
{
  for(ujval=0;ujval<113;ujval++);
{

}
}

你在主函數(shù)里面給延時(shí)函數(shù)賦值1000,也就是說經(jīng)過那兩個(gè)for循環(huán)下來,執(zhí)行了1000*113。相當(dāng)于110ms,一般來說,人的肉眼能感覺的是25ms左右吧(我也不太記得)。所以你原本的程序延時(shí)100ms肉眼是能看出來的,所以你感覺燈在閃爍。   后面你把延時(shí)函數(shù)的第二個(gè)for刪了,你賦值1000,也就是執(zhí)行了1000下。相當(dāng)于1ms,1ms亮,1ms滅,肉眼是看不出來的。速度很快,你就感覺燈一直在亮著。

評分

參與人數(shù) 1黑幣 +80 收起 理由
admin + 80 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:135900 發(fā)表于 2018-3-7 16:32 | 顯示全部樓層
刪除后因?yàn)檠訒r(shí)時(shí)間短,燈的閃爍肉眼看不到,就變成所謂的常亮了,定義兩個(gè)變量是為了延遲時(shí)間

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:288779 發(fā)表于 2018-3-7 16:51 | 顯示全部樓層
現(xiàn)在是ms延時(shí),你刪掉第二個(gè)循環(huán)之后延時(shí)就不是ms級了,很可能你的延時(shí)以ms都沒有,由于視覺暫留效應(yīng)就是常亮了

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:266943 發(fā)表于 2018-3-8 15:24 | 顯示全部樓層

加一句,應(yīng)該是與轉(zhuǎn)換成匯編語言后語句條數(shù)有關(guān)

本帖最后由 出來逛逛 于 2018-3-9 13:38 編輯

函數(shù)的每條語句運(yùn)行需要時(shí)間,雖然只有幾微秒,延時(shí)函數(shù)中for語句循環(huán)代表了延時(shí)函數(shù)中執(zhí)行語句的數(shù)量,執(zhí)行延時(shí)函數(shù)所需的時(shí)間就是延時(shí)函數(shù)的延時(shí)時(shí)間。延時(shí)函數(shù)延時(shí)時(shí)間長短和延時(shí)函數(shù)里語句的多少是等價(jià)的。燈變常亮是因?yàn)殚W的太快了,人眼分辨不出來。
回復(fù)

使用道具 舉報(bào)

ID:289589 發(fā)表于 2018-3-9 11:38 | 顯示全部樓層
你刪除一個(gè)for循環(huán),延時(shí)時(shí)間你賦值的時(shí)間乘上113的循環(huán),如果刪除循環(huán)次數(shù)不夠循環(huán)時(shí)間太短,人眼看起來就是一直常亮
回復(fù)

使用道具 舉報(bào)

ID:289617 發(fā)表于 2018-3-9 12:36 | 顯示全部樓層
應(yīng)該是時(shí)間太短造成的
回復(fù)

使用道具 舉報(bào)

ID:288745 發(fā)表于 2018-3-10 11:37 | 顯示全部樓層
DYQ_DYQ 發(fā)表于 2018-3-7 16:31
首先52的機(jī)器周期大約1us,也就是說走一個(gè)語句需要時(shí)間是1us。然后你要弄懂,C語言的for是怎么走的,for的 ...

好的謝謝你的答案
回復(fù)

使用道具 舉報(bào)

ID:288745 發(fā)表于 2018-3-10 11:38 | 顯示全部樓層
accac 發(fā)表于 2018-3-7 16:08
第一個(gè)for循環(huán)括號沒括住,語句結(jié)束時(shí)加";"

沒加好像也可以啊我試過了,不過不知道為什么?
回復(fù)

使用道具 舉報(bào)

ID:288745 發(fā)表于 2018-3-10 11:38 | 顯示全部樓層
23131sda3dsad 發(fā)表于 2018-3-7 16:29
通過循環(huán)實(shí)現(xiàn)延時(shí)函數(shù)的原理:單片機(jī)執(zhí)行每一條程序需要時(shí)間(時(shí)間非常短),通過循環(huán)函數(shù),達(dá)到延時(shí)的目的 ...

謝謝你的回答,我會(huì)記下來的
回復(fù)

使用道具 舉報(bào)

ID:288745 發(fā)表于 2018-3-10 11:39 | 顯示全部樓層
ly4517143 發(fā)表于 2018-3-9 11:38
你刪除一個(gè)for循環(huán),延時(shí)時(shí)間你賦值的時(shí)間乘上113的循環(huán),如果刪除循環(huán)次數(shù)不夠循環(huán)時(shí)間太短,人眼看起來就 ...

謝謝啦
回復(fù)

使用道具 舉報(bào)

ID:261175 發(fā)表于 2018-3-10 12:35 | 顯示全部樓層
因?yàn)槎x兩個(gè)的延時(shí)更長,常亮是因?yàn)檠訒r(shí)太短,人眼因?yàn)橛鄷熜?yīng),看它是常亮的,大致意思就是延時(shí)
回復(fù)

使用道具 舉報(bào)

ID:290016 發(fā)表于 2018-3-10 13:52 | 顯示全部樓層
延時(shí)太短造成的
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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