📄 main_zkf.c
字号:
if(Att_value[4]>0)
Att_value[4]--; //第4时隙
// Att_total_dn = Att_value[4]+ Att_manual_dn;
// if(Att_total_dn > 31)
// Att_total_dn = 31;
// Att(4,Att_total_dn); //衰减TS4
// Att(4,0); //衰减TS0
}
else if(Ts4_out_latch > Ts4_threhold+ over_threhold)
{
if(Att_value[4]<31)
Att_value[4]++; //第4时隙
// Att_total_dn = Att_value[4]+ Att_manual_dn;
// if(Att_total_dn > 31)
// Att_total_dn = 31;
// Att(4,Att_total_dn); //衰减TS4
//Att(4,31); //衰减TS0
}
//TXREG1=Att_value[4]; //Only for test for 下行输chu
//Att(4,Att_value[4]);
// Att(5,Att_value[5] );
}
if (Channel_Choice==5) //下行,Ts5时隙
{
if(Ts5_threhold- below_threhold > 0)
Ts5_low_threhold = Ts5_threhold- below_threhold;
else
Ts5_low_threhold = 0;
//Ts5_latch = ADResult12[7]; //记住下行,Ts5时隙的输入数据
Ts5_out_latch = ADResult12[8]; //记住下行,Ts5时隙的输出数据
Ts5_out_latch1 = Ts5_out_latch0;
Ts5_out_latch2 = Ts5_out_latch1;
Ts5_out_latch3 = Ts5_out_latch2;
//Ts5_out_latch = (Ts5_out_latch0+Ts5_out_latch1+Ts5_out_latch2+Ts5_out_latch3)>>2;
// Gain_dn = Ts5_out_latch /Ts5_latch; //更新下行增益
// SW_latch = Ts5_out_latch / ADResult12[5]; //更新驻波比,注意这里应该使用ADResult12[5]来表示上行输入
if(Ts5_out_latch < Ts5_threhold- below_threhold)
{
if(Att_value[5]>0)
Att_value[5]--; //第5时隙
// Att_total_dn = Att_value[5]+ Att_manual_dn;
// if(Att_total_dn > 31)
// Att_total_dn = 31;
// Att(5,Att_total_dn); //衰减TS5
// Att(5,0); //衰减TS0
}
else if(Ts5_out_latch > Ts5_threhold+ over_threhold)
{
if(Att_value[5]<31)
Att_value[5]++; //第5时隙
//Att_total_dn = Att_value[5]+ Att_manual_dn;
//if(Att_total_dn > 31)
// Att_total_dn = 31;
//Att(5,Att_total_dn); //衰减TS5
//Att(5,31); //衰减TS0
}
//TXREG1=Att_value[5];
//Att(5,Att_value[5] );
//Att(6,Att_value[6] );
}
if (Channel_Choice==6) //下行,Ts6时隙
{
// Ts6_latch = ADResult12[7]; //记住下行,Ts6时隙的输入数据
Ts6_out_latch = ADResult12[8]; //记住下行,Ts6时隙的输出数据
Ts6_out_latch1 = Ts6_out_latch0;
Ts6_out_latch2 = Ts6_out_latch1;
Ts6_out_latch3 = Ts6_out_latch2;
//Ts6_out_latch = (Ts6_out_latch0+Ts6_out_latch1+Ts6_out_latch2+Ts6_out_latch3)>>2;
// Gain_dn = Ts6_out_latch /Ts6_latch; //更新下行增益
// SW_latch = Ts6_out_latch / ADResult12[5]; //更新驻波比,注意这里应该使用ADResult12[5]来表示上行输入
if(Ts6_out_latch < Ts6_threhold- below_threhold)
{
if(Att_value[6]>0)
Att_value[6]--; //第6时隙
// Att_total_dn = Att_value[6]+ Att_manual_dn;
// if(Att_total_dn > 31)
// Att_total_dn = 31;
// Att(6,Att_total_dn); //衰减TS6
// Att(6,0); //衰减TS0
}
else if(Ts6_out_latch > Ts6_threhold + over_threhold)
{
if(Att_value[6]<31)
Att_value[6]++; //第6时隙
// Att_total_dn = Att_value[6]+ Att_manual_dn;
// if(Att_total_dn > 31)
// Att_total_dn = 31;
// Att(6,Att_total_dn); //衰减TS6
// Att(6,31); //衰减TS0
}
//TXREG1=Att_value[6];
//Att(6,Att_value[6] );
// Att(0,Att_value[0] );
}
if (Channel_Choice==0) //下行,Ts0时隙
{
//TXREG1=Att_value[0];
//dacdelay(delay_value);
//Ts0_latch = ADResult12[7]; //记住下行,Ts0时隙的输入数据
Ts0_out_latch = ADResult12[8]; //记住下行,Ts0时隙的输出数据
Ts0_out_latch1 = Ts0_out_latch0;
Ts0_out_latch2 = Ts0_out_latch1;
Ts0_out_latch3 = Ts0_out_latch2;
//Ts0_out_latch = (Ts0_out_latch0+Ts0_out_latch1+Ts0_out_latch2+Ts0_out_latch3)>>2;
// Gain_dn = Ts0_out_latch /Ts0_latch; //更新下行增益
//Gain_dn = Ts0_out_latch - Ts0_latch; //更新下行增益
// SW_latch = Ts0_out_latch - ADResult12[5]; //更新驻波比,注意这里应该使用ADResult12[5]来表示上行输入
if(Ts0_out_latch < Ts0_threhold- below_threhold)
{
if(Att_value[0]>0)
Att_value[0]--; //第0时隙
//Att_total_dn = Att_value[0]+ Att_manual_dn;
//if(Att_total_dn > 31)
// Att_total_dn = 31;
//Att(0,Att_total_dn); //衰减TS0
// Att(0,0); //衰减TS0
}
else if(Ts0_out_latch > Ts0_threhold + over_threhold)
{
if(Att_value[0]<31)
Att_value[0]++; //第0时隙
//Att_total_dn = Att_value[0]+ Att_manual_dn;
//if(Att_total_dn > 31)
// Att_total_dn = 31;
//Att(0,Att_total_dn); //衰减TS0
// Att(0,31); //衰减TS0
}
//while (TX1IF== 0); //Only for test
// TXREG1=Att_value[0]; //Only for test for 下行输chu
//TXREG1=Ts0_out_latch;
// while (TX1IF== 0); //Only for test
// while (TX1IF== 0); //Only for test
//Att(0,Att_value[0] );
}
//INT0_Flag = 0;
ADCON0=ADCON0|0x02;//启动AD转换
ADIE=1;//A/D转换中断允许
} //if(INT0_Flag==1)
// if (ADResult12[5]>)//反射功率,上行输入功率
//if (ADResult12[6]>)//上行输出功率
// if ((ADResult12[7]> Open_threhold_dn))//下行输入超过门限
// if (ADResult12[8]>)//下行输出功率应该超过一定值,否则减小衰减
////待写////if (ADResult12[9]>)//末级温度
////待写////if (ADResult12[10]>)//环境温度
////待写////if (ADResult12[11]>)//电源电压
}
/******************************************************************
** 函 数 名: uart_initial(void)
** 功能描述: 232串行通讯初始化子程序,设置低优先级中断接收,使能232收和发
******************************************************************/
void uart_initial(void)
{
TXSTA1=0x04; //选择异步高速方式传输8位数据 BRGH=1
RCSTA1=0x80; //允许串行口工作使能SOEN=1,CREN=1
TRISC=TRISC|0X80; //PIC18F6722:将RC7(RX)设置为输入方式
TRISC=TRISC&0Xbf; //RC6(TX)设置为输出
SPBRG1=0x47; //11.0592M晶振时波特率为9600,Baundrate=11059200/[16(X+1)]
RC1IE=1; //使能接收中断
IPEN=1; //使能中断优先级
INTCON=INTCON|0xc0; //GIE|PEIE;//开全局中断,开外围模块中断
PIR1=0x00; //清中断标志
PIE1=PIE1|0x20; //允许串行通讯接口接收中断使能
// RC1IP=0; //设置SCI接收中断为低优先级中断
RC1IP=1; //设置SCI接收中断为高优先级中断
CREN1=1; //允许串口接收数据
TXEN1=1; //允许串口发送数据
}
/******************************************************************
** 函 数 名: uart_send(void)** 功能描述: RS232中断发送子程序
******************************************************************/
/*void uart_send(void)
{
while (TXIF==0); //TXIF=0表示发送缓冲区不为空
TXREG=
}*/
/******************************************************************
** 函 数 名: dacdelay(unsigned char x)
** 功能描述: 延时函数
******************************************************************/
void dacdelay(unsigned int x)
{
unsigned int i;
for(i=0;i<x;i++)
i=i;
}
/******************************************************************
** 函 数 名: dacck(void)
** 功能描述: 时钟产生函数
******************************************************************/
void dacck(void)
{
dacclk=1;
dacdelay(2);
dacclk=0;
dacdelay(2);
}
/******************************************************************
** 函 数 名: writedac(unsigned char dat,unsigned char channel,unsigned char rng)
** 功能描述: 写DA配置参数
** 参数描述: dat DAC数据
channel 通道选择0~3(A~D)
rng rng取值范围0~1,Vout=REF*dat*(1+rng)/256
******************************************************************/
void writedac(unsigned char dat,unsigned char channel,unsigned char rng)
{
unsigned char i,ch;
ch=dat;
dacldac=0;
dacload=1;
/*if (channel==2||channel==3)
{
dacdata=1;
}
else
{
dacdata=0;
}*/
dacdata=(channel&0x02)>>1;//发送通道地址的高位
dacck();
/*if (channel==1||channel==3)
{
dacdata=1;
}
else
{
dacdata=0;
}*/
dacdata=channel&0x01;//发送通道地址的低位
dacck();
dacdata=rng;
dacck();
for (i=0; i<8; i++)
{
if (ch&0x80)
dacdata=1;
else
dacdata=0;
ch=ch<<1;
dacck();
}
dacload=0;
dacdelay(2);
dacload=1;
dacdelay(2);
}
/******************************************************************
** 函 数 名: INT0_initial(void)
** 功能描述: 外部中断0初始化函数
******************************************************************/
void INT0_initial(void)
{ //外部中断0总是处于高优先级
INT0IE=1; //使能外部INT0中断
INT0IF=0; //清中断标志
INTEDG0=1;//外部中断设为上升沿中断
}
//**********************************************************************************
void data_converter(unsigned char *p,unsigned int value) //数据变换
{
unsigned int m,n,j=0;
p[0]=number_table[value/1000];
m=value%1000;
p[1]=number_table[m/100];
n=m%100;
p[2]=number_table[n/10];
j=n%10;
p[3]=number_table[j/1];
}
//**********************************************************************************
//串行口发送数组
void send_data(unsigned char *p)
{unsigned int n;
for(n=0;n<4;n++)//p[n]!=0xff;n++)
{
while (TX1IF== 0); // TXIF=0表示发送缓冲区不为空
TXREG1 = p[n];
}
while (TX1IF== 0); // TXIF=0表示发送缓冲区不为空
TXREG1=' ';
}
void send_adc12_data(void)
{
data_converter(display_buffer,ADResult); //数据变换
send_data(display_buffer); //发送数据
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -