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

📄 hart1151.c

📁 Hart源代码.HART协议简介下载30次,HART协议由Rosemount公司开发且已向每个使用者开放HART协议采用标准的频移键控.
💻 C
📖 第 1 页 / 共 3 页
字号:
#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 + -