📄 main_zkf.c
字号:
#include "pic18.h"
#include "math.h"
/******************************************************************
端口定义
******************************************************************/
/*control<2>=p3=A2_5=RD0
control<1>=p4=A1_5=RD1
control<0>=p7=A0_5=RD2
control="000"时,控制上行衰减
control="001"时,控制下行衰减
control="010"时,控制BIAS,BIAS={data_in,2'b00}
control="011"时,不检测
data_in输入范围为0~31
data_in<4>=p20=D4_5=RD7
data_in<3>=p19=D3_5=RD6
data_in<2>=p13=D2_5=RD5
data_in<1>=p11=D1_5=RD4
data_in<0>=p10=D0_5=RD3*/
//DA端口定义
//A:末级功放偏压A2
//B:末级功放偏压A1
//C:末级功放偏压B2
//D:末级功放偏压B1
unsigned char display_buffer[]={0x00,0x00,0x00,0x00,0xff};
unsigned char number_table[]={'0','1','2','3','4','5','6','7','8','9'};
#define dacdata RE2
#define dacclk RE3
#define dacload RE4
#define dacldac RE5
#define control_att_up 0x00
#define control_att_dn 0x01
#define control_bias 0x02 //010
#define control_backward_bias 0x03 //011
#define slot_number_inform 0x06 //110
#define control_no_detect 0x04 //100
#define control_only_up 0x05 //101
#define delay_value 5000
unsigned char B2=0;//末级功放偏压B2阈值
unsigned char B1=0;//末级功放偏压B1阈值
unsigned char A2=0;//末级功放偏压A2阈值
unsigned char A1=0;//末级功放偏压A1阈值
/******************************************************************
AD模块相关变量定义
******************************************************************/
unsigned char AD_Flag=0; //AD转换完成标志,AD_Flag=1表示有新的AD数据转换完成
volatile unsigned int ADResult;
volatile unsigned int ADResult12[12];//AD转换结果数组
int ADResult0[3];//末级功放偏压B2
int ADResult1[3];//末级功放偏压B1
int ADResult2[3];//末级功放偏压A2
int ADResult3[3];//末级功放偏压A1
int ADResult4[3];//下行启动门限
int ADResult5[3];//反射功率检测
int ADResult6[3];//上行输出功率检测
int ADResult7[3];//下行输入功率检测
int ADResult8[3];//下行输出功率检测
int ADResult9[3];//末级温度检测
int ADResult10[3];//环境温度检测
int ADResult11[3];//电源电压检测
unsigned char ADCounter;//AD计数器
/******************************************************************
串口通信模块相关变量定义
******************************************************************/
unsigned char recdata; //接收数据寄存器
unsigned char SciReceiveFlag=0; //=1表示接收到新数据,=0表示未接收到新数据
unsigned char DownStartLevel;//下行启动电平
unsigned char Ts0;//下行输入功率
unsigned char Ts1;//下行输入功率
unsigned char Ts2;//下行输入功率
unsigned char Ts3;//下行输入功率
unsigned char Ts4;//上行输入功率
unsigned char Ts5;//上行输入功率
unsigned char Ts6;//上行输入功率
unsigned int Ts0_latch,Ts0_out_latch; //下行输入功率和输出功率锁存
unsigned int Ts1_latch,Ts1_out_latch; //上行输入功率和输出功率锁存
unsigned int Ts2_latch,Ts2_out_latch; //上行输入功率和输出功率锁存
unsigned int Ts3_latch,Ts3_out_latch; //上行输入功率和输出功率锁存
unsigned int Ts4_latch,Ts4_out_latch; //下行输入功率和输出功率锁存
unsigned int Ts5_latch,Ts5_out_latch; //下行输入功率和输出功率锁存
unsigned int Ts6_latch,Ts6_out_latch; //下行输入功率和输出功率锁存
unsigned int Ts0_out_latch0; //下行输入功率和输出功率锁存
unsigned int Ts1_out_latch0; //上行输入功率和输出功率锁存
unsigned int Ts2_out_latch0; //上行输入功率和输出功率锁存
unsigned int Ts3_out_latch0; //上行输入功率和输出功率锁存
unsigned int Ts4_out_latch0; //下行输入功率和输出功率锁存
unsigned int Ts5_out_latch0; //下行输入功率和输出功率锁存
unsigned int Ts6_out_latch0; //下行输入功率和输出功率锁存
unsigned int Ts0_out_latch1; //下行输入功率和输出功率锁存
unsigned int Ts1_out_latch1; //上行输入功率和输出功率锁存
unsigned int Ts2_out_latch1; //上行输入功率和输出功率锁存
unsigned int Ts3_out_latch1; //上行输入功率和输出功率锁存
unsigned int Ts4_out_latch1; //下行输入功率和输出功率锁存
unsigned int Ts5_out_latch1; //下行输入功率和输出功率锁存
unsigned int Ts6_out_latch1; //下行输入功率和输出功率锁存
unsigned int Ts0_out_latch2; //下行输入功率和输出功率锁存
unsigned int Ts1_out_latch2; //上行输入功率和输出功率锁存
unsigned int Ts2_out_latch2; //上行输入功率和输出功率锁存
unsigned int Ts3_out_latch2; //上行输入功率和输出功率锁存
unsigned int Ts4_out_latch2; //下行输入功率和输出功率锁存
unsigned int Ts5_out_latch2; //下行输入功率和输出功率锁存
unsigned int Ts6_out_latch2; //下行输入功率和输出功率锁存
unsigned int Ts0_out_latch3; //下行输入功率和输出功率锁存
unsigned int Ts1_out_latch3; //上行输入功率和输出功率锁存
unsigned int Ts2_out_latch3; //上行输入功率和输出功率锁存
unsigned int Ts3_out_latch3; //上行输入功率和输出功率锁存
unsigned int Ts4_out_latch3; //下行输入功率和输出功率锁存
unsigned int Ts5_out_latch3; //下行输入功率和输出功率锁存
unsigned int Ts6_out_latch3; //下行输入功率和输出功率锁存
unsigned char Att_total_up; //上行缩减总量=人为衰减+自动衰减
unsigned char Att_total_dn; //下行缩减总量=人为衰减+自动衰减
unsigned char Gain_dn; //下行增益,按照每次的时隙更新
unsigned char Gain_up; //上行增益,按照每次的时隙更新
volatile unsigned char SW_latch;//Standing Wave
volatile unsigned char address_right;
//设置值按照8bit整形存储,在串口通信时外送标准格式
unsigned int Ts1_threhold = 0x004D; //上行功率门限1 --E2PROM位置0x11,大概0.7v
unsigned int Ts2_threhold = 0x004D; //上行功率门限2 --E2PROM位置0x12
unsigned int Ts3_threhold = 0x004D; //上行功率门限3 --E2PROM位置0x13
unsigned int Ts4_threhold = 0x0311; //下行功率门限5 --E2PROM位置0x15
unsigned int Ts5_threhold = 0x0311; //下行功率门限4 --E2PROM位置0x14
unsigned int Ts6_threhold = 0x0311; //下行功率门限0 --E2PROM位置0x10
unsigned int Ts0_threhold = 0x0011; //下行功率门限6 --E2PROM位置0x16
#define below_threhold 0x0010 //实际应该是1dB
#define over_threhold 0x0010 //实际应该是1dB
unsigned int Ts4_low_threhold; //下行功率门限4 --E2PROM位置0x14
unsigned int Ts5_low_threhold; //下行功率门限5 --E2PROM位置0x15
unsigned int Ts6_low_threhold; //下行功率门限6 --E2PROM位置0x16
unsigned int Ts0_low_threhold; //下行功率门限0 --E2PROM位置0x10
unsigned char Att_manual_up = 0; //上行手动缩减量--E2PROM位置0x17
unsigned char Att_manual_dn = 0; //下行手动缩减量 --E2PROM位置0x18
unsigned char Forward_dn = 0; //us,下行同步开关前沿量--E2PROM位置0x19
unsigned char Backward_dn = 0; //us,下行同步开关前沿量--E2PROM位置0x19
unsigned char switch_in_shut = 0;
unsigned char Open_threhold_dn = 0x2D; //下行同步启动门限量 --E2PROM位置0x20, 大概0.2v
//unsigned char B2= 0x03;//末级功放偏压B2阈值 --E2PROM位置0x21
//unsigned char B1= 0x03;//末级功放偏压B1阈值 --E2PROM位置0x22
//unsigned char A2= 0x03;//末级功放偏压A2阈值 --E2PROM位置0x23
//unsigned char A1= 0x03;//末级功放偏压A1阈值 --E2PROM位置0x24
unsigned char Channel_Choice; //这个是指示当前的时隙位置
unsigned char Channel_Choice_next; //这个是指示next时隙位置
unsigned char uart_rec_data[2]={0,0};//,0,0,0,0,0,0};
unsigned char setup_data[2]; //这个是打算设置的数据
unsigned char uart_send_data[9]; //这个数据需要和uart_send_tag_data配合组成串口发送数据
//unsigned char uart_send_tag_data[2];
unsigned char recdata;
unsigned char package_data_count =0;
unsigned char data_width,end_data_width;
unsigned char data_addr; //地址信息
unsigned char r_w =0xff; ////对本系统读标志
unsigned char INT0_Flag=0; //IO中断标志
unsigned char INT0_att=0;
unsigned char RC_flag=0; //UART中断标志
unsigned char Att_value[7]={31,31,31,31,31,31,31};//时隙0至7的衰减量数组,这个为自动衰减量
//unsigned char Att_signal[31]={0x00,0x01,0x02,0x03,31,31,31};//时隙0至7的衰减量数组,这个为自动衰减量
unsigned char LastChannel=0;//上一次衰减的时隙
unsigned char int_cnt=0;
unsigned char state=0;
/******************************************************************
IO中断相关变量定义
******************************************************************/
//volatile unsigned char UpDownFlag;//上下行标志
unsigned char UpDownFlag;//上下行标志
/******************************************************************
函数声明
******************************************************************/
void adc_initial(void);
void Deal_AD(void);
void uart_initial(void);
//void uart_send(void);
void dacdelay(unsigned int x);
void dacck(void);
void writedac(unsigned char dat,unsigned char channel,unsigned char rng);
void INT0_initial(void);
void data_converter(unsigned char *p,unsigned int value);
void send_data(unsigned char *p);
void send_adc12_data(void);
void Compare(void);
void Calculate(void);
void SendPortD(unsigned char channel,unsigned char data);
void Att(unsigned char channel, unsigned char data);
void uart_rec_process (void);
//eeprom_write(addr,data);第一个参数为地址,第二个参数为数据
//eeprom_read(addr);参数为地址,返回值为数据
main()
{
uart_initial();//串口初始化
adc_initial();//AD转换初始化
INT0_initial();
TRISD=0X00;//设置D口为输出方式
TRISB=0XFF;//设置B口为输入方式,中断输入
PORTD=0;
TRISE=0x00;//设置E口为输出方式
//eeprom_write(0x10,100);//往地址0x10写数据
//eeprom_read(0);
//Ts0_threhold = eeprom_read(0x10);
//Ts1_threhold = eeprom_read(0x11);
//Ts2_threhold = eeprom_read(0x12);
//Ts3_threhold = eeprom_read(0x13);
//Ts4_threhold = eeprom_read(0x14);
//Ts5_threhold = eeprom_read(0x15);
//Ts6_threhold = eeprom_read(0x16);
//Att_manual_up = eeprom_read(0x17);
//Att_manual_dn = eeprom_read(0x18);
//Forward_dn = eeprom_read(0x19);
//Backward_dn
//Open_threhold_dn = eeprom_read(0x??);
//B2 = eeprom_read(0x??);
//B1 = eeprom_read(0x??);
//A2 = eeprom_read(0x??);
//A1 = eeprom_read(0x??);
Att_value[1] = Att_manual_up; //这个应该在串口接到手动修改时再进行一次
Att_value[2] = Att_manual_up; //这个应该在串口接到手动修改时再进行一次
Att_value[3] = Att_manual_up; //这个应该在串口接到手动修改时再进行一次
Att_value[4] = Att_manual_dn; //这个应该在串口接到手动修改时再进行一次
Att_value[5] = Att_manual_dn; //这个应该在串口接到手动修改时再进行一次
Att_value[6] = Att_manual_dn; //这个应该在串口接到手动修改时再进行一次
Att_value[0] = Att_manual_dn; //这个应该在串口接到手动修改时再进行一次
SendPortD (control_att_up,0x1f); //开机衰减成最大
SendPortD (control_att_dn,0x1f);
SendPortD (control_bias,Forward_dn);
SendPortD (control_backward_bias,Backward_dn);
while(1)
{
//TXREG1='2';
//TXREG1=eeprom_read(0x10);
// if (AD_Flag==1) //表示AD转换完成
// {
//
// Deal_AD();
// AD_Flag=0; //消除AD转换完成标志
// }
//TXREG1=Att_value[6]; //Only for test for 下行输chu
//SendPortD (control_att_up,Att_manual_up); //正常工作时初始衰减手动植
//SendPortD (control_att_dn,Att_manual_dn);
//if (ADResult12[4]> Open_threhold_dn)//下行启动门限
// {
SendPortD (control_only_up,0x00); //表示打开下行同步功能,因为下行输入信号
// if(INT0_att == 1)
// {
// //INT0IE = 0;
// Att(Channel_Choice ,Att_value[Channel_Choice] );
// //SendPortD (control_att_dn,Att_value[Channel_Choice]);
// //TXREG1=Channel_Choice;
//
// //INT0IE = 1;
//
// INT0_att = 0;
// }
Compare(); //DA结果处理主要部分
//writedac(B2,2,1); //将功放偏流写入
//writedac(B1,3,1);
//writedac(A2,0,1);
//writedac(A1,1,1);
// }
// else //下行启动门限没有达到
// {
// SendPortD (control_only_up,0xff); //表示关闭下行同步功能,因为下行输入信号太弱
// }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -