📄 hart1151.c
字号:
#include "msp430x14x.h"
#include "hart1151.h"
#include "link.h"
#include "hartcmd.h"
#include "periphery.h"
#include "writeflash.h"
/*------------------------------------------------------------------
-------------------------------------------------------------------*/
extern void link_init(void);
extern void dsp_init(void);
extern void mscom_init(void);
extern void test(void);
extern void Cal_para(void);
//
extern void periphery_init(void);
extern void ADS_com_ini(void);
extern void ADS_Calibration(void);
unsigned int IsADSOk(void);
extern int ADS_DataIn(int din);
extern void DA_DataOut(unsigned int dout);
float adtof(int adata);
//
extern void Serial1Receive(void);
extern void Serial1Send(void);
extern void SendReady(void);
extern void Serial0Receive(void);
extern void TimeOut(void);
extern void EnableIndicate(void);
extern void xmtRequest(void);
extern void xmtConfirm(void);
extern void CarrierArrive(void);
extern void xmtEnable(void);
extern void xmtUsing(void);
extern void AD_DA(void);
extern void DAV_KB(unsigned int y2,unsigned int y1,float x2,float x1,unsigned char i);
//extern void R_EEPROM_P_T(unsigned char location,int *p_add);
//extern unsigned char W_EEPROM_P_T(unsigned char location,unsigned char *p_add);
//extern unsigned int E_Write_int(unsigned int Addr,unsigned int Data);
extern unsigned int E_Write_Block(unsigned long Len_Addr,char *pData);
extern unsigned int E_Read_Block(unsigned long Len_Addr,char *pData);
extern unsigned int E_Verify_Block(unsigned long Len_Addr,char *pData);
extern unsigned int E_Write_int(unsigned int Addr,unsigned int Data);
extern unsigned int E_Write_float(unsigned int Addr,float Data);
extern unsigned char ADS_RegRd_sigle(char Reg);
extern void ADS_RegWrt_sigle(char Reg,char Data);
extern void testFM(void);
extern int ADS_ReadData(void);
extern void SendStart(void);
extern void HartResetAD(void);
extern void TempLine(unsigned int y2,unsigned int y1,float x2,float x1);
extern void TempCompensate(void);
extern void ADGet_TEMP(void);
extern void ADchange_temp(void);
extern void ADchange_pv(void);
//extern void FRam_ini();
void JustWR(void);
void ReadFlash(void);
void Read_Modulus(volatile char *flashsegment,unsigned char *point,int Num,unsigned char *pointtag);//源地址、目的地址、写字节大小、头文件地址
void IniWrite_Modulus(volatile char *flashsegment,unsigned char *point,unsigned char *pointtag,int num);
void Write_Modulus(volatile char *flashsegment,unsigned char *point,unsigned char *pointtag,int num);
void Write_Parameter(volatile char *flashsegment,unsigned char *point,unsigned char *pointtag,int num);
void IniWrite_Parameter(volatile char *flashsegment,unsigned char *point,unsigned char *pointtag,int num);
void Flash_Clear(volatile char *WriteAddress);
//
extern unsigned char PreamNum;//定界符长度
extern unsigned char SAddr;//仪表短地址
extern unsigned char Addr[5];//仪表长地址
extern unsigned char ADComBuf[8];
extern unsigned char ADwdtCnt;
extern unsigned char ADRstCnt;
extern unsigned char StaticCurrent;
extern int Write_p;
extern unsigned char CharacterS;
extern unsigned char Character_OF;
extern unsigned char Character_PF;
extern float BaseDAk,BaseDAb;
extern unsigned int DAOutCode;
//
unsigned int mainiv;
unsigned int mainifg;
unsigned char XmtCount;//发送次数
unsigned char BurstCmd;
unsigned char RstOk;
int AData,AData2;
float ADataf,ADataf2;
struct EEP_DataT EEP_RamT;//,EEP_RamT_re;
struct EEP_Data EEP_Ram;//,EEP_Ram_re;
int Thesta;
int ADC_Num=0;
unsigned char Nowis_Temp=0;
unsigned int ADStatues=0;
extern float UnitRange_Arry[15];
extern unsigned char needwrite_modulus;
extern unsigned char needwrite_parameter;
unsigned char After133,needwrite=0;
extern float sqr_t(float a);
extern void IniTemp_Re(unsigned char i);
extern void IniTemp_ReDA(unsigned char i);
extern float ZXC;//通过线形校正后的数值
extern float PVatafold;
extern float PVataf;
extern unsigned char TimeLimit;
extern unsigned int DANum;
extern unsigned int DaD;
//--------------------------------
float SensorArry[6]=
{
1.49,
7.46,
37.296,
186.45,
689.50,
2068.00
};
//--------------------------------
unsigned int ADCresult;
unsigned long int DegC;
/********************************************************************
将密码写入
********************************************************************/
/*#define SEG1 0x1200 //输入部分量程结构存储地址
#define SEG1LEN 512
#pragma memory=constseg(RANGETABLE1) // range paramater saved from 0x1200--0x13ff (flash)
int EEP_Flag;
#pragma memory=default*/
/***************************************************
routine--writeflash
in---flash address point, data point, data length
out--none
Description--write appoint clear appoint segment
****************************************************/
/*void WriteFlash(char *segadd, int seglength, int offset, char *value, int len )
{
int i;
char buf[512];
for(i=0;i<seglength;i++)*(buf+i)=*(segadd+i); //read old data to buf
memcpy(buf+offset,value,len); // set new data to buf
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
_DINT(); //Disable interrupt
FCTL2=FWKEY+FSSEL0+FN0; // MCLK/2 for Flash Timing Generator
while( FCTL3 & BUSY ); // wait for current operation over
FCTL3 = FWKEY; // Clear Lock bit
FCTL1 = FWKEY + ERASE; // Set Erase bit
*segadd = 0; //Dummy write to erase Flash segment
while( FCTL3 & BUSY ); // wait for current operation over
FCTL3 = FWKEY; // Clear Lock bit
FCTL1=FWKEY+WRT; // Set WRT bit for write operation
for(i=0;i<seglength;i++)*(segadd+i)=*(buf+i); // Write buf value to flash
while( FCTL3 & BUSY ); // wait for current operation over
FCTL1=FWKEY; // Clear WRT bit
FCTL3=FWKEY+LOCK; // Reset LOCK bit
_EINT(); // Enable interrupts
}*/
/**********************************************************
Routine - MakeRange
Input --range para: rngptr,ch,PGA,v0,v1,d0,d1,
sw0,sw1,sw2,TF_maxrng,lowvalue
Output - none
Description - The routine used to make a range struct,
called by InitProgRange(), this routine
performed when factory program Or Factory
Calibration
***********************************************************/
/*void WriteRangeParaToFlash(RANGE_STRU *decptr,RANGE_STRU *srcptr)
{
char *segadd;
int offset,seglen;
_DINT();
segadd=(char*)SEG1;
seglen=SEG1LEN;
if((int)decptr>=SEG2){
segadd=(char*)SEG2;
seglen=SEG2LEN;
}
offset=(int)decptr-(int)segadd;
WriteFlash(segadd,seglen,offset,(char*)srcptr,sizeof(RANGE_STRU));
_EINT();
} */
//------------------------------------
struct EEP_DataT EEP_DataStatic=
{
0x5656,//int EEP_Flag;
0x26,3,9,1,0x08,//int Addr[5];MFR_Rosemount,Type_1151
0,//int SAddr; |c
0,//int Poll_Flag;//轮训地址标志位,为1表示轮训状态;
0x20,0x53,0x0c,0x3e,//||10
0x15,0xc5,0x30,0x33,
0xcd,0x16,0x05,0x0f,
0x81,0xa2,0x05,0x28,
0x90,0x4e,0x1e,0x05,
0x4e,0x25,0x6b,0xa1,//int Messenger[24];
0x42,0xd5,0x12,//P-TR
0xc3,0xc,0x30,//0000//TERT1151//int Tag[6]; //Tag,Packed-ASCΠ
0x50,0x54,0x94,//TERT
0xc7,0x1d,0x71,//1151
0x82,8,0x20,//NULL
0x82,8,0x20,//int Descr[12]; //Descriptor,Packed-ASCΠ
3,7,0x67,//int Date[3]; //Date,8-bit unsigned //integers,day,month,year
0,0,0,//int SerialNum[3]; //Primary Variable Sensor Serial Number
0x0b,//int SpanUnits; //Primary Variable Sensor Limits and Minimum Span Units Code
0,//int AlarmSel; //Primary Variable Alarm Selection Code
0,//int XferFunc; //Primary Variable Transfer Function Code
0x0b,//int RangeUnits; //Primary Variable Upper and Lower Range Values Units Code
0,//int WriteProt; //Write Protect Code
0x26,//int LabelDist; //Private Lable Distributor Code
0x00,0x00,0x01,//int FAN[3];
0,0,0,0,0,
0,0,0,0,0,
0,//int Stuff[11];
0,//int TestType;
4,//int DisplayPrecision;
301,//int X0;
5660,//int Xm;
25716,//int Xs;
290,//int X0o;
-5660,//int Xmo;
-25353,//int Xso;
0x0b,//int UnitRange;
10,//int WDELM_Num;
0,//int BurstModeCom;
0,//int BurstSwitch;
4,//int SensorRange;
//-----------------------------------------------
-29616,//int DACode20;
869,//int DACode04;
0x0b,//int PvUnits;
25717,//DAFullCode;
512,//DAZeroCode;
13082,//DAHalfCode
6,
1807,
1987,
0,//Swith
0,//SwithDA
5,//DADelay
15,//DADelay2
1000,
1,
8
};
//-------------------------------------------------------------------
struct EEP_Data EEP_DataStaticF=
{
6000,//float UpSensorLimit; //float;Primary Variable Upper Sensor Limit
-6000,//float LowSensorLimit; //float;Primary Variable Lower Sensor Limit
0.1,//float MinSpan; //float;Primary Variable Minimum Span
6000,//float PvUpRange; //float;Primary Variable Upper Range Value
0,//float PvLowRange; //float;Primary Variable Lower Range Value
2,//float PvDamp; //float;Primary Variable Damping Value
6000,//float SensorS;
6000,//float ZXC_FULLTRIM_HI;//float
0,//float ZXC_FULLTRIM_LO;//float
0,// ZXC_FULLTRIM_HIo
-6000,// ZXC_FULLTRIM_LOo
//----------------------------------------------
0.000000,//float A1;
1.026133,//float A2;
0.04918448,//float A3;
0.0,//float A1o;
0.988841,//float A2o;
0.01927885,//float A3o;
1,//float k;
0,//float b;
1,//float ko;
0,//float bo;
//-----------------------------------------------
1,//float UnitRangeS;
//-----------------------------------------------
//2189.000,//float DAk;
//-7860.000,//float DAb;
1,//float DAk;
0,//float DAb;
1,//float DAk1;
0,//float DAb1;
1,//YFull
1,//DacIn
1,//DANk
0,//DANb
0,//Xdcnum
0,//Tempk
0,//Tempb
25,//Tempc
0,//TempZeroA
0,//TempZeroB
0,//TempZeroC
0,//TempFullA
0,//TempFullB
0,//TempFullC
430,//TempZeroD
29797,//TempFullD
-0.01421515,//A4
-0.01224838,//A4o
0,//TempFullAo
0,//TempFullBo
0,//TempFullCo
-25353,//TempFullDo
0,//DAComk4
0,//DAComb4
0,//DAComk20
0,//DAComb20
25681,//DAComk40;
526,//DAComb40;
0,//DAComc4
0,//DAComc20
13058,//DAComc40
4,//A4LOW
20,//A20LOW
4,//A4MED
20,//A20MED
4,//A4HIGN
20,//A20HIGN
0,//DARCode
0,//TempDiff零点
0,//TempDiffo满正
0,//TempDiffp满负
0,//TempDiffDA4
0,//TempDiffDA12
0,//TempDiffDA20
6//Tag
};
//int DATempCode=0;
//
void main_init(void);
void osc_init(void);
void osc_test(void);
void Defualt_init(void);
//-------------------------------------------------------------------
int TempAD;
/*extern unsigned char Character_OF;
extern unsigned char Character_PF;
extern void Cal_para(void);
extern int ADS_ReadData(void);
void TempMatch(void)
{
unsigned char i;
float ADFLoat=0;
for(i=0;i<5;i++)
{
//TempAD+=ADS_ReadData();
ADFLoat+=(ADS_ReadData())/5;
}
TempAD=ADFLoat;
EEP_RamT.X0=TempAD;
ADFLoat=0;
for(i=0;i<5;i++)
{
//TempAD+=ADS_ReadData();
ADFLoat+=(ADS_ReadData())/5;
}
TempAD=ADFLoat;
EEP_RamT.Xm=TempAD;
ADFLoat=0;
for(i=0;i<5;i++)
{
//TempAD+=ADS_ReadData();
ADFLoat+=(ADS_ReadData())/5;
}
TempAD=ADFLoat;
ADFLoat=0;
EEP_RamT.Xs=TempAD;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -