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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于單片機延時程序的延時時間是怎么計算的?

[復制鏈接]
跳轉到指定樓層
樓主
………………………………
sbit key1=P3^2;           //布防
sbit key2=P3^3;           //撤防
sbit key3=P3^4;           //緊急報警
sbit BUZZ=P0^4;           //蜂鳴器
sbit rsd=P2^4;           //熱釋電輸入
sbit yanwu=P2^5;
sbit LED_B=P2^3;   //布防指示燈
sbit LED_S=P2^0;   //發送消息指示燈

uint TIME_50ms=0;           //計時的最小分辨率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)//延時函數
{
        uint x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}

………………………………………………………………以上省略了一些無關定義初始化。以下程序的如何計時,延時多少是我不明白的。
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, 下載次數: 38)

原理圖

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

使用道具 舉報

沙發
ID:439075 發表于 2018-12-28 20:57 | 只看該作者
就是根據時鐘和單片機每條指令消耗的機器周期來計算,軟件延時只能是個大概的值,不會很精準。想要精準的延時值,必須用硬件定時器。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表