標(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)
下載附件
2018-12-28 16:34 上傳
原理圖
作者:
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