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

共1条 1/1 1 跳转至

使用430制作的水表---脉冲采集累计

助工
2014-11-04 19:19:04     打赏
#include <GLOBAL.h>
#include <stdlib.h>
#include <stdbool.h>
#include <msp430x41x.h>

//*========================================================

  #define    PulseOne      BIT0          
  #define    PulseTwo      BIT1
  
  #define    PulseOneSt      P2IN   & BIT0          
  #define    PulseTwoSt      P2IN   & BIT1

  #define    PulsePowerOut      P6DIR |=  BIT3;        
  #define    PulsePowerHig      P6OUT |=  BIT3;

  #define    PulseOneDirIn      P2DIR  &= ~BIT0          
  #define    PulseTwoDinIn      P2DIR  &= ~BIT1
//*参数定义:
//*========================================================

     
void PulseInit(void)
{
    PulseOneDirIn;
    PulseTwoDinIn;
    PulsePowerOut;
    PulsePowerHig;
    
    P2IE  = 0;
    P2IES = 0;
    P2IE  |= PulseOne;
    P2IES |= PulseOne;
    P2IE  |= PulseTwo;
    P2IES |= PulseTwo;
}
void DataComper(void)
{ 
    DptrDecData(AddsBuy,Overal,Residual);//---累计购买量-累计使用量=剩余量 
    if(DataThr>0)
    {
        //---检查是否到了关阀报警量
        DptrDecData(Residual,BaoJing,GloBuf);//---剩余量-报警量
        if(DataThr==0)
        {
            ShowBuy=1;
            if(!ClosValveJgEn)
            {
                MotoStr(0);//-----------------------------------------------关阀
                ClosValveJgEn=1; 
            }
            else
            {
                MotoStr(1);//--------------------------------------------------开阀 
            }
        }
        else
        {
            if(!DisturbFg)
            {
                MotoStr(1);//--------------------------------------------------开阀
            } 
            ShowBuy=0;
            ClosValveJgEn=0;
        }
        OverdraftSt=0;
        MeterSt[0]&=0xfe;
    }
    else
    {
       //---过零关阀
       DptrDecData(Overal,AddsBuy,OverData); //---累计使用量-累计购买量=透支量 
       MotoStr(0);//--------------------------------------------------关阀 
       OverdraftSt=1;
       ShowBuy=1;
       MeterSt[0]|=0x01;
    } 
}

void PulseAdd(void)
{
    if(SecondsConn&0x01)
    {
        if(!(PulseOneSt&BIT0))
        {
            if(PulseOneTimes<5)
            {
                PulseOneTimes++; 
                if(PulseOneTimes>2)
                {
                    PulseOneEn=1; 
                }
            }
        }
        else
        {
            PulseOneTimes=0; 
        }
        if(!(PulseTwoSt&BIT1))
        {
            if(PulseTwoTimes<5)
            {
                PulseTwoTimes++; 
                if(PulseTwoTimes>2)
                {
                    PulseTwoEn=1; 
                }
            }
        } 
        else
        {
            PulseTwoTimes=0; 
        }
        if((PulseOneEn==1)&(PulseTwoEn==1))
        {
            if(!DisturbFg)
            {
                Overal[0]=Overal[0]>>4;
                Overal[0]++;
                if(Overal[0]>=10)
                {
                    Overal[0]=0; 
                    DataAddup(&Overal[1],3); 
                    ComperEn=1;
                    DataComper();
                    DataSave();
                }
                Overal[0]=Overal[0]<<4;
                PulseOneEn=0;
                PulseTwoEn=0;
                PulseAddEn=0;
            } 
        } 
        SecondsConn&=0xfe;
    }
}
#pragma vector=PORT2_VECTOR                  
__interrupt void P2ISR(void)
{   
    if(P2IFG&BIT0)
    {
        LPM4_EXIT; 
        BasicTimer=75; 
    }
    if(P2IFG&BIT1)
    {
        LPM4_EXIT; 
        BasicTimer=75; 
    }
    P2IFG = 0;
}

 


共1条 1/1 1 跳转至

回复

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