📄 cdma800.h
字号:
/*****************************************************************************************
宏定义
******************************************************************************************/
#include "pic.h"
#define _nop() { asm("NOP");}
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define PWRAV_CNT 20
#define TEMP_CNT 50
#define ALC_CNT 20
#define IIC_DELAY 15
#define BUF_LENGTH 80
#define PROTL 0x02
#define ID_CNT 200
//#define MOD_ID_L 1
//#define MOD_ID_H 0
//#define MOD_ADDR 6
#define Para_Num 152 //28*4+10*4=152
//#define Basic_Para_Num 5
//#define MOD_Num 28
//温补参数有7个:输出功率电压控制、ATT1、ATT2
#define tn 7//此模块中温补参数个数(包括控制项与检测项 增益1、栅压1、栅压2、栅压3、输出功率电压1控制、前向功率检测,反向功率检测)
//#define tnzj 3//此模块中某温度下温补参数占多少字节(与tn不同,因为栅压控制补偿实际值参数占两个字节)
#define pn 0//此模块中频响补偿实际值参数个数
#define zyn 1//此模块中增益补偿实际值参数个数
#define tpnumb 30//温度划分段数30段
#define fnumb 30//频率划分段数30段
#define bcnumb 64//标称值划分段数64段
#define tempd 0x0100//温度值在EEPROM中首地址(即温度值1的EEPROM地址,共30个温度值,占30个字节)
#define freqd 0x0120//频率值在EEPROM中首地址(即频率值1的EEPROM地址,共30个频率值,占60个字节)
#define bczd 0x0140//标称值在EEPROM中首地址(即标称值1的EEPROM地址,共32个标称值,占30个字节)
#define tempcsd 0x0190//温补参数编码在EEPROM中首地址(即温补参数1编码的EEPROM地址)编码为补偿参数在标准化协议中的地址
#define freqcsd 0x0200//频补参数编码在EEPROM中首地址(即频补参数1编码的EEPROM地址)编码为补偿参数在标准化协议中的地址
#define bczcsd 0x0230//标称值补偿参数编码在EEPROM中首地址(即标称值补偿参数1编码的EEPROM地址)编码为补偿参数在标准化协议中的地址
#define tempcszd 0x0260//温补参数值在EEPROM中首地址(即温补参数值1的EEPROM地址)
#define freqcszd 0x0500//频补参数值在EEPROM中首地址(即频补参数值1的EEPROM地址)
#define bczcszd 0x0600//标称值补偿参数值在EEPROM中首地址(即标称值补偿参数值1的EEPROM地址)
/**************************************************************************************
数据类型定义
****************************************************************************************/
union buf_union
{
uint buf1;
uchar buf2[2];
};
union reg_n_buf
{
ulong buf1;
uchar buf2[4];
uint buf3[2];
};
struct data_struct
{
// uchar ID_L;
// uchar ID_H;
uchar ADDR;//模块地址
uchar BUTTON1;//功放开关1
char POF;//输出功率检测
uchar POFU_L;
uchar POFU_H;
char POR;//反向输出功率检测
uchar PORU_L;
uchar PORU_H;
uchar V28_L;//28v电压检测
uchar V28_H;//28v电压检测
uchar V28U_L;
uchar V28U_H;
uchar ID1;//电流检测
uchar ID1U_L;
uchar ID1U_H;
uchar ID1ST;
uchar ID2;//电流检测
uchar ID2U_L;
uchar ID2U_H;
// uchar ID2ST;
uchar ID3;//电流检测
uchar ID3U_L;
uchar ID3U_H;
// uchar ID3ST;
uchar CTRU;//控制深度电压值检测
uchar CTR;//控制深度检测
char TEMP;//温度检测参数
uchar TEMPU_L;
uchar TEMPU_H;
uchar ATT;//衰减参数
uchar ACTATT;//衰减1的实际值
uchar PC;//最大输出功率
uchar PCU_L;
uchar PCU_H;
uchar POFFSET1;
uchar POFFSET2;
uchar POFFSET3;
uchar VGS1_L;//推动极第二个管子第二级栅压
uchar VGS2_L;//末极第一个管子栅压
uchar VGS3_L;//末极第二个管子栅压
uchar VGS1_H;//推动极第二个管子第二级栅压
uchar VGS2_H;//末极第一个管子栅压
uchar VGS3_H;//末极第二个管子栅压
uchar ACTVPL[4];//数组[0]为栅压1的实际值低字节.....数组[3]为PCU的实际值低字节;
uchar ACTVPH[4];//数组[0]为栅压1的实际值高字节.....数组[3]为PCU的实际值高字节;
uchar F_PWR;//过功率检测
char GCUTPBC;//增益1的温度补偿参数
uchar VTPBC;//栅压1的温度补偿参数
uchar PCUTPBC;//最大输出功率电压温度补偿参数
char POFBC;//前向功率检测补偿(dB)
char PORBC;//反向功率检测补偿(dB)
char GCUBC;//增益1的标称值补偿
// uchar PROTL_ETN; //协议版本
uchar PA_STATE;
};
/*********************************************************************************
内部变量
***********************************************************************************/
static struct data_struct bank2 Prmter1;
//union buf_union pcubuf;
union buf_union vbuf;
char tempinit;//温度初始值
uchar tempcheck;//=0,为刚上电初始化,=1,为已进行过一次温度检测
uchar B[3];//B[0],B[1]为EEPROM中补偿值,B[2]为实际的补偿值
uint chushi;
uchar tempinit;//温度初始值
uint idbuf1,idbuf2,idbuf3,tempbuf;
uchar id1_cnt,id2_cnt,id3_cnt,temp_cnt;
uchar erro;
/********************************
bit 0 查询出错
bit 1 设置出错
********************************/
uchar porta_wbuf,portb_wbuf,portc_wbuf,portd_wbuf,porte_wbuf;
uchar alarm_time_cnt;
uchar dog_soft;
static uchar bank1 receive_buf[BUF_LENGTH];
uchar receive_over; //接收是否完成标志:1 接收完成 0 接收未完成
uchar receive_time_on; //接收超时定时器开关 1 打开 0关闭
uchar receive_time_count; //接口超时定时计数器
uchar receive_cnt; //发送或者接收的字节数
uchar receive_cnt1; //发送或者接收的字节数
uchar pChecksum[2];
uchar err_eeprom;
uchar headend_flag;//接收到包头标志1:接收到包头,2:接收到包尾,0:没收到包头.
uchar tran_flag;//转义处理标志位,1:进行了0X4E的转义处理(将0X4E转义为0X5E,0X4D);0:未进行转义处理
/********************************************************************************
内部固定函数
**********************************************************************************/
void init();
void dog();
void init_mcu();
void init_menu();
void delay_unit(uint buf);
void sign_collect();
void init_sign_ctl();
void delay_Tad(uchar j);
uchar adc_read(uchar buf);
void init_serial();
void serial_data();
void CheckCRC(uchar *pData, uchar nDataLength,uchar start, uchar *pChecksum);
void interrupt int_process(void);
void byte_combine(uchar *pdata,uchar length,uchar start);
void byte_divide(uchar *pdata,uchar length,uchar start);
void receive_free();
void send_reply_flag(uchar reply_flag,uchar length);
void init_eeprom(void);
uchar Query_Address();
uchar Set_Basic_Parameter();
uchar Set_Parameter();
uchar Query_Parameter();
/***************************************************************************
表格通信函数
***************************************************************************/
uchar Set_tp(uint fstadr);//设置温度值或频率信道号
uchar Query_tp(uint fstadr,uchar bytenumb);//设置温度值或频率信道号
uchar Query_csd(uchar adsnumb,uchar bubuf );//查询所有温补、标称值补偿、频响补偿参数编码,编码占2个字节
uchar Set_cszd(uint firstadr,uchar bubuf);//设置所有温补、标称值补偿、频响补偿参数表内容,所有补偿参数占1个字节
uchar Query_cszd(uint firstadr,uchar bubuf);//查询所有温补、标称值补偿、频响补偿参数表内容,所有补偿参数占1个字节
/********************************************************************************
内部配置函数
**********************************************************************************/
uchar TEMP(uchar tempnb);//温补函数
//uchar FREQBU(uchar freqin,uchar freqnb);//频响补偿
char ATTBU(uchar attin,uchar attnb);//增益标称值补偿函数
//uchar FREQBU(uchar freqin,uchar freqnb);//频响补偿
//void init_freq(uchar tempnumb,uchar portnumb,uchar portcheck,uint fr);//
void init_vgsandpcu(uchar channel ,uchar tempnumb,uchar buf_H,uchar buf_L);
void init_att(uchar tempnumb ,uchar attnumb,uchar attbuf);//
void CHECK_TEMP();//温度检测
void CHECK_POF();//输出功率检测
void CHECK_POR();//反向输出功率检测
void CHECK_v28v();//28V检测
void CHECK_ID1();//推动级II第二级电流检测id4
void CHECK_ID2();//末级I电流检测id5
void CHECK_ID3();//末级II电流检测id6
void CHECK_CTR();//过功率检测函数
//void DAC(uchar addr,uchar buf8);
void DAC(uchar addr,uchar dac_H,uchar dac_L);
uchar wrom(uint addr,uchar buf);
uchar rrom(uint addr);
void ATT(uchar buf);
void iic_delay();
void iic_star();
void iic_stop();
void iic_send(uchar buf);
uchar iic_get();
uchar iic_ack();
void ack_iic(uchar buf);
/****************************************************************************************
通信协议内参数地址
*****************************************************************************************/
//控制参数
#define button1 0x0008 //器件功放开关1
#define pc 0x0018 //最大输出功率
#define pcu 0x0080 //最大输出功率电压值
#define att 0x0024 //衰减
#define vgs1 0x0060 //推动极第二个管子第二级栅压
#define vgs2 0x0062 //末极第一个管子栅压
#define vgs3 0x0064 //末极第二个管子栅压
#define poffset1 0x00e8 //上行前向功率检测偏置控制值(1个字节)
#define poffset2 0x00e9 //上行反向功率检测偏置控制值(1个字节)
#define poffset3 0x00d8 //最大输出功率偏置控制值(1个字节)
//检测参数
#define pof 0x8004 //前向功率检测值
#define pofu 0x808e //前向功率检测电压值 (2BYTE)
#define por 0x800c//反向功率检测值
#define poru 0x809e //反向功率检测电压值 (2BYTE)
#define pa_flw 0x801c //过功率检测
#define V_28 0x8042 //28v检测值(2BYTE)
#define V_28V 0x80b8 //28v检测电压值(2BYTE)
#define temp 0x8045 //功放温度
#define tempu 0x80bc //功放温度电压值(2BYTE)
#define id1 0x8056 //功放电流检测
#define id1u 0x8076 //功放电流检测
#define id1st 0x8028
#define id2 0x8058 //功放电流检测
#define id2u 0x8078 //功放电流检测
//#define id2st 0x8029
#define id3 0x805a //功放电流检测
#define id3u 0x807a //功放电流检测
//#define id3st 0x802a
#define ctr 0x8014 //控制深度检测
#define ctru 0x80ae //控制深度电压值检测
/****************************************************************************************
Eeprom内参数地址
*****************************************************************************************/
#define pcadd 0x0000 //最大输出功率地址
#define pcuadd 0x0002 //最大输出功率电压地址
#define attadd 0x0004 //数控衰减地址
#define vgs1add 0x0006 //推动极第二个管子第二级栅压地址
#define vgs2add 0x0008 //末极第一个管子栅压地址
#define vgs3add 0x000a //末极第一个管子栅压地址
#define but1add 0x000c
#define poff1add 0x000d
#define poff2add 0x000e
#define poff3add 0x000f
#define mod_idadd 0x0700 //模块识别id地址
#define mod_typeadd 0x070a //模块类型地址
#define mod_add_add 0x0712 //模块地址地址
#define product_add 0x0713 //生产序列号参数地址
/************************************************************************************
基本信息只读项表(地址+信息内容)
*************************************************************************************/
const PRO_ID[10] =
{
'0','5','1','2','3','1','1'};//程序ID号为0512311,表示05年12月31日,模块版本为1.
/*****************************************************************************************
CRC 变换参数表
******************************************************************************************/
const uint CRCTable[256]={
0, 4129, 8258,12387,16516,20645,24774,28903,
33032,37161,41290,45419,49548,53677,57806,61935,
4657, 528,12915, 8786,21173,17044,29431,25302,
37689,33560,45947,41818,54205,50076,62463,58334,
9314,13379, 1056, 5121,25830,29895,17572,21637,
42346,46411,34088,38153,58862,62927,50604,54669,
13907, 9842, 5649, 1584,30423,26358,22165,18100,
46939,42874,38681,34616,63455,59390,55197,51132,
18628,22757,26758,30887, 2112, 6241,10242,14371,
51660,55789,59790,63919,35144,39273,43274,47403,
23285,19156,31415,27286, 6769, 2640,14899,10770,
56317,52188,64447,60318,39801,35672,47931,43802,
27814,31879,19684,23749,11298,15363, 3168, 7233,
60846,64911,52716,56781,44330,48395,36200,40265,
32407,28342,24277,20212,15891,11826, 7761, 3696,
65439,61374,57309,53244,48923,44858,40793,36728,
37256,33193,45514,41451,53516,49453,61774,57711,
4224, 161,12482, 8419,20484,16421,28742,24679,
33721,37784,41979,46042,49981,54044,58239,62302,
689, 4752, 8947,13010,16949,21012,25207,29270,
46570,42443,38312,34185,62830,58703,54572,50445,
13538, 9411, 5280, 1153,29798,25671,21540,17413,
42971,47098,34713,38840,59231,63358,50973,55100,
9939,14066, 1681, 5808,26199,30326,17941,22068,
55628,51565,63758,59695,39368,35305,47498,43435,
22596,18533,30726,26663, 6336, 2273,14466,10403,
52093,56156,60223,64286,35833,39896,43963,48026,
19061,23124,27191,31254, 2801, 6864,10931,14994,
64814,60687,56684,52557,48554,44427,40424,36297,
31782,27655,23652,19525,15522,11395, 7392, 3265,
61215,65342,53085,57212,44955,49082,36825,40952,
28183,32310,20053,24180,11923,16050, 3793, 7920
};
/************************************************************************************
参数地址配置表格
*************************************************************************************/
const Para_Num_Conf[Para_Num] =
{
0x00,0xf0,0x0a,0xff,0x01,0xf0,0x08,0xff,0x02,0xf0,0x01,0xff,0x03,0xf0,0x01,0xff,//0x04,0xf0,0xff,
0x05,0xf0,0x01,0xff,0x07,0xf0,0x01,0xff,0x08,0xf0,0x01,0xff,0x17,0xf0,0x0a,0xff,
0x18,0xf0,0x02,0xff,0x19,0xf0,0x14,0xff,
0x08,0x00,0x01,0x00,0x18,0x00,0x01,0x00,0x80,0x00,0x02,0x06,0x24,0x00,0x01,0x02,0x60,0x00,0x02,0x06,
0x62,0x00,0x02,0x06,0x64,0x00,0x02,0x06,0xe8,0x00,0x01,0x00,0xe9,0x00,0x01,0x00,0xd8,0x00,0x01,0x00,0x04,0x80,0x01,0x00,
0x8e,0x80,0x01,0x01,0x0c,0x80,0x01,0x00,0x9e,0x80,0x02,0x01,0x1c,0x80,0x01,0x00,0x42,0x80,0x02,0x01,
0xb8,0x80,0x02,0x01,0x45,0x80,0x01,0x00,0xbc,0x80,0x02,0x01,0x56,0x80,0x02,0x01,0x76,0x80,0x02,0x01,
0x58,0x80,0x02,0x01,0x78,0x80,0x02,0x01,0x5a,0x80,0x02,0x01,0x7a,0x80,0x02,0x01,0x28,0x80,0x01,0x00,
0x14,0x80,0x01,0x01,0xae,0x80,0x02,0x01
};
//const data[13] =
//{
// 0x00,0xf0,0x01,0x00,0x02,0xf0,0x00,0x03,0xf0,0x08,0x04,0xf0,0x11
//};
//温度补偿参数编码表
const prtemp[14] =
{
0x2c,0x00,0xc0,0x00,0xc2,0x00,0xc4,0x00,0xf8,0x00,0x04,0x80,0x0c,0x80
};
//标称值补偿参数编码表
const attact[2] =
{
0x2c,0x00
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -