⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cal_h_m.c

📁 msp430F435做的医疗器械,包括语音模块,知识源于网络
💻 C
字号:
/****************************************************************
            discrible:1个脉冲热量的计算主程序(数据/10000(1000)等,为了使数据小于65535)

            author   :Ye Yun Kai

            date     :05.04.15(yy.mm.dd)
****************************************************************/
#include "msp430x42x.h"
#include "Sys_data.h"
#include "Sys_fun.h"


void Cal_H_M(void)
{
    unsigned char H_T,L_T;          //入口,出口温度整位数,十进制数
    unsigned int  in_temp,out_temp; //入口,出口温度,十进制数
    unsigned int  in_sum,out_sum;   //入口,出口焓值,十进制数
    unsigned int  sub_h;            //入口,出口焓值差
    unsigned int  m_pluse;          //一个脉冲的质量,十进制数
    unsigned long int heat_pluse;   //1个脉冲的热量,十进制数(单位KJ)

    H_T = (In_Temp[1]/0x10)*10+(In_Temp[1]%0x10);  //入口温度整位数
    L_T = (Out_Temp[1]/0x10)*10+(Out_Temp[1]%0x10);//出口温度整位数

    if(In_Temp[1]>0x15)             //温度大于15度,用直接计算法求焓值
    {
        in_temp =(In_Temp[2]%0x10)*10000+(In_Temp[1]/0x10)*1000+(In_Temp[1]%0x10)*100+
                    (In_Temp[0]/0x10)*10+(In_Temp[0]%0x10);   //入口温度十进制
        MPY = Heat_H[H_T];                                    //入口焓值基数
        OP2 = in_temp;                                        //入口温度
        in_sum = (RESHI*65536 + RESLO)/10000;                 //入口焓值(焓值/10000后,还是比实际值大100倍)
    }
    else                            //温度小于等于15度,用插值法求焓值
    {
        if(In_Temp[1] == 0x15)      //入口温度为15度时,焓值求法: 15度焓值+(16度焓值-15度焓值)*温度小数位
          in_sum = ( 63554 + ((67740-63554)/10)*((In_Temp[0]&0xF0)>>4) +
          ((67740-63554)/100)*(In_Temp[0]&0x0F) )/10;
                                                //入口焓值(焓值/10后,还是比实际值大100)
        else
          in_sum = ( Heat_H[H_T]+((Heat_H[H_T+1]-Heat_H[H_T])/10)*((In_Temp[0]&0xF0)>>4)+
          ((Heat_H[H_T+1]-Heat_H[H_T])/100)*(In_Temp[0]&0x0F) )/10;
                                                //入口焓值(焓值/10后,还是比实际值大100倍)
    }

    if(Out_Temp[1]>0x15)            //温度大于15度,用直接计算法求焓值
    {
        out_temp =(Out_Temp[2]%0x10)*10000+(Out_Temp[1]/0x10)*1000+(Out_Temp[1]%0x10)*100+
                  (Out_Temp[0]/0x10)*10+(Out_Temp[0]%0x10);   //出口温度十进制
        MPY = Heat_H[L_T];                                    //出口焓值基数
        OP2 = out_temp;                                       //出口温度
        out_sum = (RESHI*65536 + RESLO)/10000;                //出口焓值(焓值/10000后,还是比实际值大100倍)
    }
    else                            //温度小于15度,用插值法求焓值
    {
        if(Out_Temp[1] == 0x15)     //出口温度为15度时,焓值求法: 15度焓值+(16度焓值-15度焓值)*温度小数位
          out_sum =( 63554 + ((67740-63554)/10)*((Out_Temp[0]&0xF0)>>4) +
          ((67740-63554)/100)*(Out_Temp[0]&0x0F) )/10;
                                                 //出口焓值(焓值/10后,还是比实际值大100倍)
        else
          out_sum =( Heat_H[L_T]+((Heat_H[L_T+1]-Heat_H[L_T])/10)*((Out_Temp[0]&0xF0)>>4)+
          ((Heat_H[L_T+1]-Heat_H[L_T])/100)*(Out_Temp[0]&0x0F) )/10;
                                                  //出口焓值(焓值/10后,还是比实际值大100倍)
    }

    if(in_sum>out_sum)//制热
    {
        Disp_symbol &= ~fcool_symbol;//清制冷标志
        sub_h = in_sum-out_sum;                   //入口出口焓值差(比实际大100倍) (sub_h数据小于65535)
    }
    else//--------------制冷
    {
        Disp_symbol |=fcool_symbol;//置制冷标志
        sub_h = out_sum-in_sum;    //焓值差=出口-入口
    }

    if(Constant > 65535)//系数大于2个字节,先除10
    {
        MPY = (Constant/10);                         //1个脉冲的体积:0.033L/p
        OP2 = Density[H_T];
    }
    else
    {
        MPY = Constant;                              //1个脉冲的体积:0.033L/p
        OP2 = Density[H_T];
    }
    m_pluse = (RESHI*65536 + RESLO)/10000;      //1个脉冲的质量(比实际大10的6次方倍) (/10000为了使m_pluse
                                                                                     //数据小于65535)
    MPY = m_pluse;                                   //比实际大10的6次方倍
    OP2 = sub_h;                                     //比实际大10的2次方倍
    if(Constant > 65535)
        heat_pluse = (RESHI*65536 + RESLO)/100;      //因6711系数上面除10000,所以这时除100,保证数据统一
    else
        heat_pluse = (RESHI*65536 + RESLO)/1000;     //1个脉冲的热量,除1000后还比实际值大10的5次方倍(单位为KJ)
                                                     //(10.37784KJ---->1037784KJ)
    Heat_GJpluse =heat_pluse;                        //1个脉冲含热量(GJ)已算好(精度0.01%)比实际大10的5次方倍

    MPY = (heat_pluse/100);                          //因数据超出16位
    OP2 = 27778;                                     //1KJ==0.277778WH
    Heat_WHpluse =(RESHI*65536 + RESLO)/1000;        //1个脉冲含热量(WH)已算好(精度0.2%)比实际大10的5次方倍
                                                     //10377*27778==288252306/1000==288252(2.88252)

//    Power_test_WHpulse =(Heat_WHpluse/1000);         //计算实时功率的每个脉冲热量,288(2.88)比实际大100的1次方倍
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -