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

標題: 請大家幫忙看看這個單片機程序 void Delay10ms(50)是什么意思? [打印本頁]

作者: aojieage    時間: 2017-12-16 13:18
標題: 請大家幫忙看看這個單片機程序 void Delay10ms(50)是什么意思?
最近又開始學單片機,請高手幫忙看看這個程序是什么意思,最好有詳盡的解釋,void Delay10ms(50)是什么意思?執行void Delay10ms延時函數50次嗎?


#include <reg51.h>
#include <intrins.h>

void main(void)
{
        unsigned char LED;

        LED = 0xFE;

        while(1)
        {
                P0 = LED;

                Delay10ms(50);

                LED = _crol_(LED,1);  //循環右移1位,點亮下一個LED  此函數于庫函數
        }
}

void Delay10ms(unsigned int c)   //誤差 0us
{
    unsigned char a, b;

        //--c已經在傳遞過來的時候已經賦值了,所以在for語句第一句就不用賦值了--//
    for (;c>0;c--)
        {
                for (b=38;b>0;b--)
                {
                        for (a=130;a>0;a--);
                }         
        }
}



作者: zl2168    時間: 2017-12-16 18:20
學單片機,必須先讀一本教材書,先學理論,打基礎,否則,問題多多,事倍功半。給你介紹一本書,張志良編著的:《80C51單片機實用教程——基于Keil C和Proteus》高等教育出版社ISBN 978-7-04-044532-9, 用于學習51單片機原理,程序(雙解c和匯編)語句條條有注解,便于閱讀理解,便于自學,可從零基礎c語言開始學習。
作者: 不倒翁.WZT    時間: 2017-12-16 19:57
標題: RE: 請大家幫忙看看這個單片機程序 void Delay10ms(50)是什么意思?
void Delay10ms(unsigned int c)   //誤差 0us
{
    unsigned char a, b;
        //--c已經在傳遞過來的時候已經賦值了,所以在for語句第一句就不用賦值了--//
    for (;c>0;c--)
        {
             for (b=38;b>0;b--)
             {
                  for (a=130;a>0;a--);
             }這是一個有輸入參數的延時函數,當執行void Delay10ms(50) 語句時,是將c賦值50。所以,執行for (;c>0;c--)語句時c可以減50次,for (;c>0;c--)所包含的語句都將執行50次。for (a=130;a>0;a--);自身要執行130次,for (b=38;b>0;b--)語句要執行38次,所以for (a=130;a>0;a--);執行了130*38=4940次,再乘以 for (;c>0;c--)50次,for (a=130;a>0;a--);共執行了130*38*50=247000次,假如執行for (a=130;a>0;a--)一次需要0.000002秒,那么0.000002秒*247000次=0.494秒。

作者: aojieage    時間: 2017-12-17 09:26
zl2168 發表于 2017-12-16 18:20
學單片機,必須先讀一本教材書,先學理論,打基礎,否則,問題多多,事倍功半。給你介紹一本書,張志良編著 ...

謝謝意見!
作者: aojieage    時間: 2017-12-17 09:29
不倒翁.WZT 發表于 2017-12-16 19:57
void Delay10ms(unsigned int c)   //誤差 0us
{
    unsigned char a, b;

謝謝意見,很不喜歡編程者這種故作高深的寫法,把它寫成for (c=50;c>0;c--),不就很好理解嗎?
作者: 哈里路    時間: 2018-5-11 22:01
不是的,這是個函數,這次設置好,下次可以隨時調用,且可以調整時間,這個是延遲50*10ms下次可以延遲更多,就直接調用,這是c語言的
作者: 1362478958    時間: 2018-5-12 02:22
樓主問題解決的嗎,及解決方法分享下啊。。。。。。。。。
作者: xue199581    時間: 2018-5-12 09:16
500毫秒延遲
作者: 列子御風    時間: 2019-7-27 09:48
aojieage 發表于 2017-12-17 09:29
謝謝意見,很不喜歡編程者這種故作高深的寫法,把它寫成for (c=50;c>0;c--),不就很好理解嗎?

因為前面已經給C賦值50了。

后面再寫一次的話,以后調整賦值就要記得改兩個一樣的地方。

所以,不在這里再次賦值是有道理的。只是這個注釋說的不夠詳細周密。初學者沒那么快轉過來。
作者: 列子御風    時間: 2019-7-27 09:57
我把當年的學習筆記放出來給樓主和初學同好:

void Delay10ms(unsigned int c)   //誤差 0us
{
    unsigned char a, b;//--賦值無符號變量a和b--//

        //--c已經在傳遞過來的時候已經賦值了,所以在for語句第一句就不用賦值了。見18、22行--//
        //--完整應該為:for (c=50;c>0;c--)--//
    for (;c>0;c--)//--條件循環。這里是把c用累減方式循環50次,每次減1直至c=0。實際效果是將10ms增加50倍--//
        {
               
        //--b和a的條件循環,用于將機器指令時長通過循環方式拉為10ms時長。具體取值與單片機、晶振的指令周期有關,51單片機下這些參數是直接用的。--//
               
                for (b=38;b>0;b--)//
                {
                        for (a=130;a>0;a--);
                }
           
        }
        
作者: aaaaaa。    時間: 2019-7-28 19:33
void Delay10ms(50)是這個函數執行50次,他想表達的大約是0.5秒
作者: cphnkj188    時間: 2019-7-29 08:50
延時(10ms*50次)500ms
作者: witheMe    時間: 2019-8-11 19:55
這是一個在51里面常用的粗略的延時函數。單片機的時鐘往往由外部晶振決定,晶振頻率的倒數就是這個單片機的一個時鐘周期,而單片機執行一條語句所用的時間為時鐘周期的12的整數倍(因為一個機器周期為12個時鐘周期,這是單片機進行讀或寫操作所用的時間,而執行一次直徑的時間為幾個機器周期)。你這里用的晶振應該是11.0592Mhz,所以執行一次指令的時間是12n/11.0592M秒(一般這種空指令n=1),進行一次底層的while循環總共就需要112*12/11.0592M秒,大約100us,所以你給到的函數變量是多少,這個函數就可以給你延遲這個量*100us的時間






歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1