找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5281|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

關(guān)于單片機(jī)延時(shí)程序的延時(shí)時(shí)間是怎么計(jì)算的?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:457429 發(fā)表于 2018-12-28 16:35 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
………………………………
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)

原理圖

原理圖
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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