標(biāo)題:
51單片機定時器中斷 定時問題求解
[打印本頁]
作者:
喵咪zzz
時間:
2022-5-4 00:01
標(biāo)題:
51單片機定時器中斷 定時問題求解
現(xiàn)在正在做一個超聲波距離報警,假設(shè)距離30cm范圍內(nèi),每20min重新檢測一次,大于30cm2min重新檢測一次。還有一個其他的滿足條件10min重新檢測一次
但是。。∫恢闭{(diào)不好時間。。。。請幫我看看這么寫對嗎?
單片機源程序如下:
void tmer1(void) interrupt 3
{
uchar num,num1,num2;
TH1 =0x3c;
TL1 =0xb0;
switch(flag_time)
{
case 1:
num++;
if(num == 20)// 20*50=1s
{
num =0;
num1++;
if(num1 == 60)//1min
{
num1 =0;
num2++;
if(num2 == 2)
{
num2 = 0;
LED6 =0;
}
}
}
break;
case 2:
num++;
if(num == 20)// 20*50=1s
{
num =0;
num1++;
if(num1 == 60)//1min
{
num1 =0;
num2++;
if(num2== 10)
{
num2 = 0;
LED7 = 0;
}
}
}
break;
case 3:
num++;
if(num == 20)// 20*50=1s
{
num =0;
num1++;
if(num1 == 60)//1min
{
num1 =0;
num2++;
if(num2 == 30)
{
num2 = 0;
LED8 =0;
}
}
}
break;
}
}
復(fù)制代碼
作者:
188610329
時間:
2022-5-4 03:00
供參考
void tmer1(void) interrupt 3
{
static uchar num,num1,num2;
TH1 =0x3c;
TL1 =0xb0;
if(++num == 20)// 20*50=1s
{
num =0;
if(++num1 == 60)//1min
{
num1 =0;
num2++;
switch(flag_time)
{
case 1:
if(num2 == 2)
{
num2 = 0;
LED6 = 0;
}
break;
case 2:
if(num2== 10)
{
num2 = 0;
LED7 = 0;
}
break;
case 3:
if(num2 == 30)
{
num2 = 0;
LED7 = 1;
}
break;
default:
break;
}
}
}
}
復(fù)制代碼
作者:
wulin
時間:
2022-5-4 06:46
局部變量num,num1,num2;要聲明為靜態(tài)static或改為全局變量。
void tmer1(void) interrupt 3
{
static uint num;
static uchar min;
TH1 =0x3c;
TL1 =0xb0;
if(++num >= 1200)// 60*0.05=1s
{
num=0;
min++;
}
switch(flag_time)
{
case 1: if(min== 2){LED6=0;LED7=1;LED8=1;min=0;}break;
case 2: if(min==10){LED6=1;LED7=0;LED8=1;min=0;}break;
case 3: if(min==20){LED6=1;LED7=1;LED8=0;min=0;}break;
}
}
復(fù)制代碼
作者:
喵咪zzz
時間:
2022-5-4 11:11
wulin 發(fā)表于 2022-5-4 06:46
局部變量num,num1,num2;要聲明為靜態(tài)static或改為全局變量。
還是不行
,我想我的中斷就沒有執(zhí)行?梢詭涂匆幌鲁绦騿
作者:
zhxiufan
時間:
2022-5-4 14:41
代碼不全呀,是不是沒有初始化定時器,中斷打開了嗎?定時器啟動了嗎?
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1