新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)之延時(shí)的哪點(diǎn)事兒

        51單片機(jī)之延時(shí)的哪點(diǎn)事兒

        作者: 時(shí)間:2016-11-22 來(lái)源:網(wǎng)絡(luò) 收藏
        我說(shuō)的是單片機(jī)C,書上的延時(shí)是這樣的,如:


        本文引用地址:http://www.104case.com/article/201611/319871.htm

        void delay02()


        {


        unsigned char i,j,k;


        for(i=2;i>0;i--)


        for(j=200;j>0;j--)


        for(k=250;k>0;k--);


        }


        它的時(shí)間是:2usX250X200X2=200 000us=0.5s


        而這個(gè)時(shí)間是不精確的,我在家里總結(jié)出了一個(gè)對(duì)于這種時(shí)間計(jì)算法,它的結(jié)果和在KEILL中調(diào)試時(shí)的時(shí)間是一樣的并且也分開(kāi)始定義時(shí)的類型,char是以1us計(jì)算,int 是4us,如果上面的那里定義成int那結(jié)果就并不是0.5S啦!


        分析法為:


        以u(píng)nsigned char 來(lái)說(shuō)吧!


        for(i=2;i>0;i--)


        分析:i=2 --->我的分析為1us


        i>0 ---->我的分析為1us 有兩次共2us


        i-- ----->它也有1us 有兩次共2us


        因此,總的時(shí)間為 s=1+1X2+1X2=5us


        由此,書上的時(shí)間應(yīng)為


        1+1x2+1x2+2x(1+1x200+1x200+200x(1+1x250+1x250))


        這個(gè)時(shí)間顯然就是以上從 for 開(kāi)始到結(jié)束的 } 的精確時(shí)間了!


        又如:unsigned char i;


        i=20; //2us


        while(i--);


        這個(gè)時(shí)間精確計(jì)算應(yīng)為 s=2+6+20x6 us


        為什么是這樣呢?這是我通過(guò)keill的調(diào)試得出來(lái)的!


        while ---> 2us


        (i--) ----->2us


        ; --------->2us


        起步為6us共有20次,那么時(shí)間為6+20x6


        還有,如:


        unsigned int a;


        for(a=20;a>0;a--);


        這個(gè)時(shí)間精確為


        2+20x4+20x4


        好了不多說(shuō)了,己經(jīng)到了0:28啦,我要睡啦,不然明兒沒(méi)精神的。睡去啦!


        嘻嘻!這些就是我發(fā)現(xiàn)的單片機(jī)關(guān)于延時(shí)的那點(diǎn)事兒哦!


        如果你不想信,那么,請(qǐng)朋友你去用keil的調(diào)試吧!


        用起步的時(shí)間減去最后的時(shí)間看看是不是這樣啦!


        sec是時(shí)間 0.000 000 00


        還有這個(gè)說(shuō)法在keil4上不是怎樣成立?這個(gè)可能是編譯器的區(qū)別。不過(guò)這個(gè)可是理解成一種編程思想吧!不要讓編譯器所約束(因?yàn)榫幾g器也是用程序設(shè)計(jì)出來(lái)的,如果你會(huì)那個(gè)你也可以編出來(lái))



        關(guān)鍵詞: 51單片機(jī)延

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 洛浦县| 新疆| 阜新市| 汤原县| 漾濞| 和顺县| 衡阳市| 榆林市| 崇信县| 且末县| 韶关市| 平原县| 梁河县| 石棉县| 富民县| 什邡市| 上栗县| 东海县| 达拉特旗| 石河子市| 自治县| 冕宁县| 新田县| 牙克石市| 全州县| 新巴尔虎左旗| 阜新市| 德格县| 崇文区| 浦江县| 邯郸县| 龙岩市| 镇安县| 藁城市| 江源县| 漳州市| 大余县| 太和县| 新泰市| 金沙县| 潼南县|