|
/********************************************************************/
#include<reg52.h> //庫文件
#define uchar unsigned char//宏定義無符號字符型
#define uint unsigned int //宏定義無符號整型
sfr P3M0 = 0xb2;
sfr P3M1 = 0Xb1;
/********************************************************************
初始定義
*********************************************************************/
uint sec = 0; //定義計(jì)數(shù)值,每過1/10 秒,sec 加一
uint tcnt = 0; //鍵值判斷
uchar Start_Flag = 1;//定義一個(gè)全局變量,值初始化為1,用來判斷首次上電的
/********************************************************************
I/O定義
*********************************************************************/
sbit OUT1=P3^3;//定義輸出口為P3.3口 用以控制繼電器
sbit IN1=P3^5; //定義輸入口為P3.5口 用以輸入信號
/********************************************************************
定時(shí)中斷服務(wù)函數(shù)
*********************************************************************/
void t0(void) interrupt 1 using 0 //定時(shí)中斷服務(wù)函數(shù)
{
tcnt++; //每過250ust tcnt 加一
if(tcnt==4000) //計(jì)滿4000 次(1 秒)時(shí)
{
tcnt=0; //重新再計(jì)
sec++;
if(Start_Flag == 1)//判斷為首次上電,進(jìn)行11個(gè)小時(shí)的計(jì)數(shù)
{
if(sec==39596)
{
OUT1=1;
}
if(sec==39600) //單位為(1秒)
{
OUT1=0;
sec=0;
Start_Flag = 0;//11小時(shí)的時(shí)間到了,清0首次上電標(biāo)志,進(jìn)入24小時(shí)計(jì)數(shù)
}
}
else//進(jìn)入24小時(shí)計(jì)數(shù)
{
if(sec==86396) //單位為(1 秒)?
{
OUT1=1;
}
if(sec==86400) //單位為(1秒)
{
OUT1=0;
sec=0;
}
}
}
}
/********************************************************************
主函數(shù)
*********************************************************************/
void main()
{
TMOD=0x02; //定時(shí)器工作在方式2
TH0=0x06; //對TH0 TL0 賦值
TL0=0x06;
TR0=1; //開始定時(shí)
ET0=1;
EA=1;
sec=0;
P3M0 = 0x08;
P3M1 = 0X00;
OUT1=0;//模塊通電繼電器吸合
while(1)
{
if(IN1==0){OUT1=1;while(!IN1);OUT1=0;}
}
}
/********************************************************************
結(jié)束
*********************************************************************/
說明下:
1.你的源程序的sec和tcnt并沒有給出初始化值,會(huì)導(dǎo)致計(jì)數(shù)不準(zhǔn)的
2.我不知道你的系統(tǒng)時(shí)鐘是多少,沒有辦法幫你配置定時(shí)器的值,所以我就假設(shè)你的定時(shí)器溢出時(shí)間是250us
3.定時(shí)器時(shí)間是250us,但你源程序判斷tcnt == 8000,也就是2秒,這個(gè)并不能夠準(zhǔn)確的計(jì)算5秒的接通時(shí)間,所以改成tcnt == 4000,就是1秒
4.下面判斷sec的值也隨之修改
試試吧
|
評分
-
查看全部評分
|