|
|
/*廢氣塔自動控水*/
#include "stc8g.h"
sbit TA1=P3^2; //廢氣塔1水位檢測
sbit TA2=P3^3; //廢氣塔2水位檢測
sbit KA=P5^5; //繼電器輸出
sbit LED=P5^4; //工作指示燈
void Delay(unsigned int t); //函數聲明
unsigned int c=0;
void Timer0_Init(void) //5毫秒@12.000MHz
{
AUXR |= 0x80; //定時器時鐘1T模式
TMOD &= 0xF0; //設置定時器模式
TL0 = 0xA0; //設置定時初始值
TH0 = 0x15; //設置定時初始值
TF0 = 0; //清除TF0標志
ET0=1; //使能定時器0中斷
EA=1; //使能總中斷
TR0 = 1; //定時器0開始計時
}
void main() //主函數
{
P5M0 |= 0x30; P5M1 &= ~0x30; //P5^5,P5^4推挽輸出
P3M0 &= ~0x0c; P3M1 |= 0x0c; //P3^2,P3^3高阻輸入
KA=1; //繼電器斷開
LED=1; //工作指示燈滅
Delay(10000); //延時
LED=0; //工作指示燈亮
while(1)
{
if(TA1==0|TA2==0) //判斷水池水位是否超
{
Delay(20000); //延時
if(TA1==0|TA2==0) //再次確認水位是否超
{
KA=0; //繼電器輸出
}
}
else if(TA1==1&TA2==1) //判斷水池水位是否未超
{
Delay(20000); //延時
if(TA1==1&TA2==1) //再次確認水位是否未超
{
Timer0_Init(); //定時器0初始化
}
}
}
}
void Delay(unsigned int t) //延時函數
{
while(--t);
}
void Timer0_ISR() interrupt 1 //定時器0中斷函數
{
TL0 = 0xA0; //重裝定時初始值
TH0 = 0x15; //重裝定時初始值
c++;
if(c>=60000) //5分鐘延時
{
c=0;
KA=1;
}
}
|
評分
-
查看全部評分
|