標(biāo)題: 關(guān)于單片機(jī)延時(shí)程序的延時(shí)時(shí)間是怎么計(jì)算的? [打印本頁(yè)]

作者: 子u    時(shí)間: 2018-12-28 16:35
標(biāo)題: 關(guān)于單片機(jī)延時(shí)程序的延時(shí)時(shí)間是怎么計(jì)算的?
………………………………
sbit key1=P3^2;           //布防
sbit key2=P3^3;           //撤防
sbit key3=P3^4;           //緊急報(bào)警
sbit BUZZ=P0^4;           //蜂鳴器
sbit rsd=P2^4;           //熱釋電輸入
sbit yanwu=P2^5;
sbit LED_B=P2^3;   //布防指示燈
sbit LED_S=P2^0;   //發(fā)送消息指示燈

uint TIME_50ms=0;           //計(jì)時(shí)的最小分辨率50ms
uint time_continue;
uchar TIME_ALAM=0;
bit flag=0,flag_BF=0;
bit flag_time_start=0;
bit again=0;
bit flag_alam;
bit SOS;
bit flag_continue;
bit into_BF=0;

void delay(uint z)//延時(shí)函數(shù)
{
        uint x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}

………………………………………………………………以上省略了一些無(wú)關(guān)定義初始化。以下程序的如何計(jì)時(shí),延時(shí)多少是我不明白的。
void TIME()
{
        if(flag==0)
        {
                delay(50);
                TIME_50ms++;
                if(TIME_50ms%10==0)
                LED_B=!LED_B;
                if(TIME_50ms>=400)
                {
                        TIME_50ms=0;
                        flag_BF=1;
                        LED_B=0;
                        flag_time_start=0;
                        again=1;
                }        
        }
        else
        {
                delay(50);
                TIME_50ms++;
                if(TIME_50ms%10==0)
                {
                        LED_B=!LED_B;
                        if(flag_alam==1)
                        {
                                if(flag_continue==0)
                                {
                                        flag_continue=1;
                                        time_continue=TIME_50ms;
                                }
                                BUZZ=!BUZZ;
                                if(TIME_50ms>=time_continue+100)
                                {
                                        BUZZ=1;
                                        flag_continue=0;
                                        flag_alam=0;
                                        time_continue=0;
                                }        
                        }
                }
                if(TIME_50ms>=1200)
                {
                        LED_B=0;
                        TIME_50ms=0;
                        flag_time_start=0;
                        again=1;
                }
        }
}

33333.png (41.52 KB, 下載次數(shù): 38)

原理圖

原理圖

作者: bucker    時(shí)間: 2018-12-28 20:57
就是根據(jù)時(shí)鐘和單片機(jī)每條指令消耗的機(jī)器周期來(lái)計(jì)算,軟件延時(shí)只能是個(gè)大概的值,不會(huì)很精準(zhǔn)。想要精準(zhǔn)的延時(shí)值,必須用硬件定時(shí)器。




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