[资料分享] 15F104E应用之五:频率检测控制,带延时输出

用心思考   2012-10-13 13:29 楼主
/***********************************************************
15F104E应用之五:频率检测控制,带延时输出
P3.2是输入端口,可以是光电,霍尔等等,,
***********************************************************/
#include
#include
#define Fosc (11059200)  //Board cyrstal
sbit     shuiwei = P3^4;//
sbit     baojin = P3^5;//
sbit     dcf = P3^0; //
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//主循环相关变量的定义
unsigned int TCNT0 = 0;
//基准定时器的初始化声明
void Timer0_Init(void);
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//元器件采样脉冲变量定义
unsigned int OneSecondCounter = 0;
unsigned int pulse_counter = 0;
volatile unsigned int  current_speed = 0;
//采用下降沿计脉冲,初始化函数声明
void INT0_Init(void);
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//引脚定义
sbit     Pump_Relay = P3^1;
   
//相关变量定义
unsigned int speed_lower_limit =0;
unsigned char speed_lower_time = 0;
unsigned char lower_limit_continue_second = 0;
//相关函数声明
void Pump_Handler(void);
//////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Main Function
////////////////////////////////////////////////////////////////////////////////////////////////////////////
void main(void){
    Timer0_Init();
    INT0_Init();
    speed_lower_limit = 3; //频率设定值,修改此处
speed_lower_time = 3;  //延时输出时间设定,修改此处
    while(1){  
        while(TCNT0<4608){  //5ms base time
            TCNT0 = TH0*256 + TL0;   
        };
        TCNT0 = 0;//clear
        TH0 = 0x00;
        TL0 = 0x00;
        Pump_Handler();
    }
}
void Timer0_Init(void){
    TMOD = (TMOD&0xf0)| 0x01; //Timer0, Time mode, 16-bit.
    TH0 = 0x00; //Load Initial value
    TL0 = 0x00;
    TR0 = 1; //Stratup Timer0
}
//中断服务子程序
void INT0_Handler(void) interrupt IE0_VECTOR using 0{
    ++pulse_counter;   
}
void INT0_Init(void){
    EX0 = 1; //Enable External Interrupt 0
    IT0 = 1; //下降沿有效
EA  = 1; //Enable
}
void Pump_Handler(void){
        if(++OneSecondCounter==200){
            OneSecondCounter = 0;
            current_speed = pulse_counter;
            pulse_counter = 0;  
            //下限的工作条件处理
            if( (current_speed>speed_lower_limit) ||(current_speed==speed_lower_limit) ){
                ++lower_limit_continue_second;
                if(lower_limit_continue_second                     Pump_Relay = 1;
                }
                else if(lower_limit_continue_second==speed_lower_time){
                    Pump_Relay = 0;
                }
                else{
                    if(lower_limit_continue_second>200){ //就是保证继电器正常工作.
                       lower_limit_continue_second = speed_lower_time;
                    }
                    Pump_Relay = 0;
                }   
            }
            else{//if(current_speed                 Pump_Relay = 1;
                lower_limit_continue_second = 1;  //下限的工作.
            }
  }
          if (shuiwei==1&&baojin==1)
    {
             dcf=0;
     }
   else
    {
             dcf=1;
}
}
shop33392572.taobao.com

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复