在一段中斷計數(shù)延時的單片機程序設(shè)計中,被二個很菜的問題困擾著,請高手師傅指教改正。
1、 利用中斷計數(shù)設(shè)計一段8小時的長時間延時程序,計數(shù)滿8小時后繼電器自動接通工作5分鐘,然后重新進入8小時延時程序,如此循環(huán),直至外部打斷使flag_5計時標志為0止。測試時,每個計數(shù)節(jié)用(20*60)*2時(即2分鐘),9節(jié)共18分鐘,可以正常接通繼電器,然后5分鐘后斷開,程序正常執(zhí)行。但當每個計數(shù)節(jié)用(20*60)*54時(即54分鐘,最大也只能設(shè)定為54分鐘,因為最大計數(shù)為65536),按理應(yīng)該在8.1小時后繼電器接通,但實際卻執(zhí)行不了,繼電器始終不接通,不知問題出在哪?請高手指教改正。
if( flag_5==1 ) //如果計時標志5為1,進入下面8小時延時
{
temp_5++; //中斷計數(shù)變時5自+1
if(temp_5>=(20*60)*54) //(20*60)為延時1分鐘基數(shù),*54可延時54分鐘
{
temp_6++;
if(temp_6>=(20*60)*54)
{
temp_7++;
if(temp_7>=(20*60)*54)
{
temp_8++;
if(temp_8>=(20*60)*54)
{
temp_9++;
if(temp_9>=(20*60)*54)
{
temp_10++;
if(temp_10>=(20*60)*54)
{
temp_11++;
if(temp_11>=(20*60)*54)
{
temp_12++;
if(temp_12>=(20*60)*54)
{
temp_13++;
if(temp_13>=(20*60)*54)
{
Relay=1; //上面計數(shù)延時滿山8小時,繼電器接通
temp_4=0;
temp_5=0;
temp_6=0;
temp_7=0;
temp_8=0;
temp_9=0;
temp_10=0;
temp_11=0;
temp_12=0;
temp_13=0;
flag_5=0;
flag_6=1;
}
}
}
}
}
}
}
}
}
}
if(flag_6==1) //如果計時標位flag_6=1
{
temp_6++; //中斷變量temp_6+1
if(temp_6>=(20*60)*54) //(20*60)為延時1分鐘,*5可延時5分鐘
{
Relay=0; //繼電器斷開
temp_6=0;
flag_6=0; //計時標志6清零
flag_5=1; //計時標志5為1,重新進入上面的循環(huán)
}
}
2、用一段do-while的循環(huán)程序替代上面的九節(jié)計數(shù)環(huán)節(jié),卻延時不了,錯在何處,也請高手師傅指教一下。
if( flag_5==1) //如果計數(shù)標志為1,進入下面的循環(huán)環(huán)節(jié)
{
temp_5=0;
temp_6=0;
do
{
temp_5++;
if(temp_5>=(20*60)*54)
{
temp_5=0;
temp_6=temp_6+1;
}
}
while(temp_6<=9); }
if(temp_6>=9)
{
Relay0=1; //繼電器接通
flag_5=0;
flag_6=1;
}
|