久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15370|回復: 14
打印 上一主題 下一主題
收起左側

新手入門,單片機延時函數看不懂

  [復制鏈接]
跳轉到指定樓層
樓主
ID:288745 發表于 2018-3-7 15:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我學著一本書上打了一段控制led燈閃爍的單片機程序,如下
#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);
        }
        }

然后我試著刪除第二個for循環,結果發現燈變成了常亮,這是怎么回事呢?這個函數的大致意思是什么?為什么要定義兩個局部變量?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:288753 發表于 2018-3-7 16:08 | 只看該作者
第一個for循環括號沒括住,語句結束時加";"

評分

參與人數 1黑幣 +10 收起 理由
admin + 10 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:288641 發表于 2018-3-7 16:29 | 只看該作者
通過循環實現延時函數的原理:單片機執行每一條程序需要時間(時間非常短),通過循環函數,達到延時的目的。
這個函數的意思:經過多次調試,發現單片機每做113條循環指令需要的時間為1ms,因此,通過嵌套循環,輸入形參valMS, 單片機就會執行 113*valMS次循環指令,達到延時valMS 毫秒的目的.
去掉第二個循環燈常亮的原因:循環的執行次數少了,導致延時效果減弱,實際燈還是在閃爍,只不過延時太短,肉眼無法分清。假如把里面的循環函數去掉,那么可以將for(uival=0;uival<valMS;uival++) 改成
for(uival=0;uival<valMS*113;uival++); 效果一樣,不過此時valMS最大值減小,因為uival 的數據類型是16位,uival不能超過65535.
為什么要有兩個局部變量:因為要實現兩個循環函數,一個不夠

評分

參與人數 1黑幣 +90 收起 理由
admin + 90 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:287770 發表于 2018-3-7 16:31 | 只看該作者
首先52的機器周期大約1us,也就是說走一個語句需要時間是1us。然后你要弄懂,C語言的for是怎么走的,for的作用我就不多說了。 你這里的   for(uival=0;uival<valMS;uival++)
for(ujval=0;ujval<113;ujval++);
實際上就是for(uival=0;uival<valMS;uival++)
{
  for(ujval=0;ujval<113;ujval++);
{

}
}

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

評分

參與人數 1黑幣 +80 收起 理由
admin + 80 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:135900 發表于 2018-3-7 16:32 | 只看該作者
刪除后因為延時時間短,燈的閃爍肉眼看不到,就變成所謂的常亮了,定義兩個變量是為了延遲時間

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:288779 發表于 2018-3-7 16:51 | 只看該作者
現在是ms延時,你刪掉第二個循環之后延時就不是ms級了,很可能你的延時以ms都沒有,由于視覺暫留效應就是常亮了

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

7#
ID:266943 發表于 2018-3-8 15:24 | 只看該作者

加一句,應該是與轉換成匯編語言后語句條數有關

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

函數的每條語句運行需要時間,雖然只有幾微秒,延時函數中for語句循環代表了延時函數中執行語句的數量,執行延時函數所需的時間就是延時函數的延時時間。延時函數延時時間長短和延時函數里語句的多少是等價的。燈變常亮是因為閃的太快了,人眼分辨不出來。
回復

使用道具 舉報

8#
ID:289589 發表于 2018-3-9 11:38 | 只看該作者
你刪除一個for循環,延時時間你賦值的時間乘上113的循環,如果刪除循環次數不夠循環時間太短,人眼看起來就是一直常亮
回復

使用道具 舉報

9#
ID:289617 發表于 2018-3-9 12:36 | 只看該作者
應該是時間太短造成的
回復

使用道具 舉報

10#
ID:288745 發表于 2018-3-10 11:37 | 只看該作者
DYQ_DYQ 發表于 2018-3-7 16:31
首先52的機器周期大約1us,也就是說走一個語句需要時間是1us。然后你要弄懂,C語言的for是怎么走的,for的 ...

好的謝謝你的答案
回復

使用道具 舉報

11#
ID:288745 發表于 2018-3-10 11:38 | 只看該作者
accac 發表于 2018-3-7 16:08
第一個for循環括號沒括住,語句結束時加";"

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

使用道具 舉報

12#
ID:288745 發表于 2018-3-10 11:38 | 只看該作者
23131sda3dsad 發表于 2018-3-7 16:29
通過循環實現延時函數的原理:單片機執行每一條程序需要時間(時間非常短),通過循環函數,達到延時的目的 ...

謝謝你的回答,我會記下來的
回復

使用道具 舉報

13#
ID:288745 發表于 2018-3-10 11:39 | 只看該作者
ly4517143 發表于 2018-3-9 11:38
你刪除一個for循環,延時時間你賦值的時間乘上113的循環,如果刪除循環次數不夠循環時間太短,人眼看起來就 ...

謝謝啦
回復

使用道具 舉報

14#
ID:261175 發表于 2018-3-10 12:35 | 只看該作者
因為定義兩個的延時更長,常亮是因為延時太短,人眼因為余暉效應,看它是常亮的,大致意思就是延時
回復

使用道具 舉報

15#
ID:290016 發表于 2018-3-10 13:52 | 只看該作者
延時太短造成的
回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品1区 | 在线观看国产精品一区二区 | 羞羞视频免费观看 | av中文在线 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 欧美日韩亚洲二区 | 国产剧情一区 | 国产电影一区二区 | 国产精品视频久久 | www.av7788.com| 精品国产乱码久久久久久88av | 国产资源一区二区三区 | 午夜小电影 | www国产亚洲精品久久网站 | 91久久综合| 日本一区二区三区视频在线 | 日韩在线观看中文字幕 | 亚洲国产aⅴ成人精品无吗 综合国产在线 | 日韩中文一区 | 国产精品地址 | 亚洲综合久久精品 | 精品国产乱码久久久久久1区2区 | 亚洲一区二区av在线 | 白浆在线| 日日日视频 | 国产麻豆一区二区三区 | 亚洲成人福利视频 | 成人免费影院 | 91资源在线观看 | 欧美一级免费片 | 在线观看日本高清二区 | 欧美一区二区激情三区 | 中文精品视频 | 国产日批| 日韩视频在线免费观看 | 一区二区三区欧美大片 | 亚洲乱码国产乱码精品精的特点 | 爱综合 | 国产成人精品一区二区在线 | 日韩在线综合网 | 国产99免费视频 |