这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 使用430制作的水表---阀门处理

共1条 1/1 1 跳转至

使用430制作的水表---阀门处理

助工
2014-11-04 19:18:05     打赏

#include <GLOBAL.h>
#include <stdlib.h>
#include <stdbool.h>
#include <msp430x41x.h>

//------------------------------------------------------------------------ValveConTime=0x0f 电机开失控时间
#define MotoConOneOut             P6DIR |=  BIT1
#define MotoConOneHig             P6OUT |=  BIT1 
#define MotoConOneLow             P6OUT &=~ BIT1

#define MotoConTwoOut             P6DIR |=  BIT2
#define MotoConTwoHig             P6OUT |=  BIT2  
#define MotoConTwoLow             P6OUT &=~ BIT2
//------阀门状态检测电源供给
#define ValveStChkPowerDirOut     P6DIR |=  BIT0
#define ValveStChkPowerHig        P6OUT |=  BIT0
#define ValveStChkPowerLow        P6OUT &=~ BIT0
//------阀门状态
#define ValveStOneIn              P1DIR &=~ BIT6             
#define ValveStTwoIn              P1DIR &=~ BIT7

#define ValveStOne                P1IN  &   BIT6             
#define ValveStTwo                P1IN  &   BIT7


void MotoOpen(void)
{
    WDT();
    MotoConOneHig;
    MotoConTwoLow; 
}

void MotoClos(void)
{  
    WDT();
    MotoConOneLow;
    MotoConTwoHig;  
}
void ValveInit(void)
{
    MotoConEn=0; 
    MotoClosEn=0;
    MotoOpenEn=0;
    MotoConOneLow;
    MotoConTwoLow;
    ValveStChkPowerDirOut;
    ValveStChkPowerLow; 
}
void MotoInit(void)
{
    ValveInit();
    MotoConOneOut;
    MotoConOneLow;
    MotoConTwoOut;
    MotoConTwoLow;
}
void ValveStChk(void)
{
    ValveStChkPowerHig;
    ValveStOneIn;
    ValveStTwoIn;
    ValveOpenSt=0;
    ValveClosSt=0;    
    WDT();
    Delay(3000);
    ValveErrSt=0;//
    if(ValveStOne&BIT6)
    {
        if(ValveStTwo&BIT7)//两者都是高---错误
        {            
            ValveErrSt=1;//------------错误状态
        }
        else
        {
            ValveClosSt=1;
        }
    }
    else
    {
        if(ValveStTwo&BIT7)
        {
            ValveOpenSt=1;//-------------阀门开
        }
        else//两者都是低---错误
        {
            ValveErrSt=1;//------------阀门错误
        }
    } 
    ValveStChkPowerLow;
}
void MotoStop(void)
{
    WDT();
    SleepEn=1;
    MotoConEn=0; 
    MotoClosEn=0;
    MotoOpenEn=0;
    MotoConOneLow;
    MotoConTwoLow;
    MeterSt[0]&=0xfc;//--------错误状态
    if(ValveConTimes!=0)
    {
        MeterSt[0]&=0xfd; 
        if(ValveOpenSt)
        {
            MeterSt[0]|=0x01;//---阀门开 
        }
    }
    else
    {
        MeterSt[0]|=0x02;//--------错误状态
    }
    ValveConTimes=0;
    PowerLowTimer=60;
}

//---void MotoStr(bool MotoSt)--------------------------------------------------
//---功能描述:-
//---输入条件:-MotoSt=1,执行开阀动作否则执行关阀动作。 
//---输出项目:-无。
void MotoStr(bool MotoSt)
{
    if(MotoSt)
    {
        MotoOpenEn=1;
        MotoClosEn=0;
    }
    else
    {
        MotoOpenEn=0;
        MotoClosEn=1; 
    }
    SleepEn=0;
    MotoConEn=1;
    ValveConTimes=15;
}
void ValveCon(void)
{
    if(MotoConEn)
    {
        if(ValveConTimes!=0)
        {   
            ValveStChk();
            if(MotoOpenEn)//------------------------------------------开阀动作
            {
                if(PowerLowFg|OverdraftSt|DisturbFg)//---如果低压,透支,干扰,禁止开阀
                { 
                    if(ValveClosSt)
                    {
                        MotoStop(); 
                    }
                    else
                    {
                        MotoClos();//-------------------------------------------关阀  
                    }
                }
                else
                {
                    if(ValveOpenSt)
                    {
                        MotoStop(); 
                    }
                    else
                    {
                        MotoOpen();   
                    }
                }
            }
            else
            {
                if(MotoClosEn)//--------------------------------------关阀动作
                {
                    if(ValveClosSt)
                    {
                        MotoStop();
                    }
                    else
                    {
                        MotoClos(); 
                    }
                }
            }
        }
        else
        {
            MotoStop();
        }
    }    
    if(SecondsConn&0x08)
    {
        if(ValveConTimes!=0)
        {
              ValveConTimes--; 
        } 
        SecondsConn&=0xf7;
    }
}

 

















































































共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]