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

📄 performance.c

📁 单片机程序代码,经过很详细的测试.呵呵,硬件相关.
💻 C
📖 第 1 页 / 共 5 页
字号:
#include <REG54.H>
#include "rc7860.h"
#include "f2rc7860.h"
#include "se0111.h"
#include "cmd_para_save.h"

//extern unsigned char xdata sec1_flg;									//每秒定时标志位
extern unsigned char xdata intflg_MCBA;									//MCB的A口中断标志位
extern unsigned char xdata intflg_MCBB;									//MCB的B口中断标志位
extern unsigned char xdata intflg_OTBA;									//OTB的A口中断标志位
extern unsigned char xdata intflg_OTBB;									//OTB的B口中断标志位
extern unsigned char xdata check_alarm_mcb[5];							//查询MCB盘的其他非中断告警
extern unsigned char xdata check_alarm_otb[3];							//查询OTB盘的其他非中断告警
extern unsigned char xdata check_alarm_2M[3][21][2];					//查询2M盘的告警
extern unsigned long int xdata commandid;                              	//表示命令代码的变量
extern unsigned char f2rc7860_rd(unsigned int f2addr) large reentrant;
extern void f2rc7860_wr(unsigned int f2addr,unsigned char value) large reentrant;
extern unsigned char se0111_reg_rd(unsigned char Haddr,unsigned char Laddr,unsigned char slot);
extern void SetResRdyTbl(unsigned char prio) large reentrant;
extern unsigned char GetResRdyTbl(unsigned char prio) large reentrant;
extern unsigned char xdata tx_buf[];
extern unsigned char xdata tx_buf_pointer;
extern bit tx_done;
extern unsigned char xdata start_flg[4];
extern unsigned char xdata board_type[4][2];	//定义插盘类型数组,第一位表示槽号,第二位表示盘号
extern unsigned char xdata timeslot_2M[3][21];				//2M时隙配置标志位,1表示配置时隙,0表示该时隙删除

unsigned int xdata B1[4] = {0,0,0,0};									//四个光口的B1误码计数值
unsigned int xdata B2[4] = {0,0,0,0};									//四个光口的B2误码计数值
unsigned long int xdata REI_MS[4] = {0,0,0,0};							//四个光口复用段REI即时性能计数值
unsigned long int xdata REI_MS_15min[4] = {0,0,0,0};					//四个光口复用段REI15分钟性能值
unsigned long int xdata REI_MS_MAX[4] = {0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF};	//四个光口复用段REI15分钟门限
unsigned int xdata B3[4] = {0,0,0,0};									//四个光口的B3误码性能值
unsigned long int xdata REI_HP[4] = {0,0,0,0};							//四个光口的高阶REI即时性能计数值
unsigned long int xdata REI_HP_15min[4] = {0,0,0,0};					//四个光口的高阶REI15分钟性能值
unsigned long int xdata REI_HP_MAX[4] = {0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF};	//四个光口的高阶REI15分钟性能门限
unsigned int xdata OFS[4] = {0,0,0,0};           						
unsigned int xdata OFS_15min[4] = {0,0,0,0};         
unsigned int xdata OFS_MAX[4] = {0xFFFF,0xFFFF,0xFFFF,0xFFFF};
unsigned int xdata PJC_HP[4] = {0,0,0,0};       						//高阶正指针调整事件    
unsigned int xdata PJC_HP_15min[4] = {0,0,0,0};         
unsigned int xdata PJC_HP_MAX[4] = {0xFFFF,0xFFFF,0xFFFF,0xFFFF};
unsigned int xdata NJC_HP[4] = {0,0,0,0};          						//高阶负指针调整事件
unsigned int xdata NJC_HP_15min[4] = {0,0,0,0};         
unsigned int xdata NJC_HP_MAX[4] = {0xFFFF,0xFFFF,0xFFFF,0xFFFF};
unsigned char xdata default_155M[4] = {0,0,0,0};						//四个光口的缺陷指示
unsigned char xdata EB_2M[3][21] = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
unsigned long int xdata REI_2M[3][21] = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
unsigned long int xdata REI_2M_15min[3][21] = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
unsigned long int xdata REI_2M_MAX[3][21] = {{0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF}};
unsigned int xdata PJC_2M[3][21] = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
unsigned int xdata PJC_2M_15min[3][21] = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
unsigned int xdata PJC_2M_MAX[3][21] = {{0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF}};
unsigned int xdata NJC_2M[3][21] = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
unsigned int xdata NJC_2M_15min[3][21] = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
unsigned int xdata NJC_2M_MAX[3][21] = {{0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF}};
unsigned char xdata default_2M[3][21] = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
unsigned long int xdata perf_value;										//保存所要查询的性能值
unsigned char xdata min15_flg = 0;										//15分钟性能标志位


void get_performance(void){
//每秒取出性能值函数
unsigned int xdata temp;   
unsigned char xdata dflg;
unsigned char xdata num;
unsigned char xdata portnum;
unsigned char xdata i;
unsigned char xdata j;
unsigned char xdata k;

//收集MCB盘A光口的性能值
	temp = SohB1e_counth8_a;									//得到B1的高8位计数值           
	temp = (temp << 8) + SohB1e_countl8_a;						//得到B1的低8位计数值                         
	B1[0] = temp;												//将B1计数器值存入变量
	if ((Intmask0_a & 0xDA) | (Intmask2_a & 0xE0) | (Intmask3_a & 0x80)){		//判断告警是否存在
       	dflg = 1;                                                                                          
    }
	else dflg = 0;                                                                                                                   
    if (dflg | intflg_MCBA){									//判断该秒是否误块秒
       	default_155M[0] = 1;
    }
    else default_155M[0] = 0;
	intflg_MCBA = 0;
	temp = SohB2e_counth8_a;									//得到B2的高8位计数值                 
	temp = (temp << 8) + SohB2e_countl8_a;						//得到B2的低8位计数值                         
	B2[0] = temp;												//将B2的计数值存入变量
	temp = SohM1e_counth8_a;									//得到M1即MS-REI的高8位计数值         
    temp = (temp << 8) + SohM1e_countl8_a;						//得到M1即MS-REI的低8位计数值                 
    REI_MS[0] += temp;											//将M1即MS-REI的计数值存入变量
    REI_MS_15min[0] += temp;
	check_alarm_mcb[3] &= 0xBF;									//清除告警字
	if (REI_MS_15min[0] > REI_MS_MAX[0]){						//判断MS-REI是否过限
		check_alarm_mcb[3] |= 0x40;								//写告警字
	}
    temp = PohB3e_counth7_a & 0x7F;								//得到B3的高7位计数值                         
    temp = (temp <<	8) + PohB3e_countl8_a;						//得到B3的低8位计数值                         
    B3[0] = temp;												//将B3的计数值存入变量
	temp = Pohrei_counth7_a & 0x7F;								//得到HP的REI高7位计数值      
	temp = (temp << 8) + Pohrei_countl8_a;						//得到HP的REI低8位计数值              
	REI_HP[0] += temp;											//将HP_REI的值存入变量
    REI_HP_15min[0] += temp;
	check_alarm_mcb[3] &= 0xDF;									//清除告警字
	if (REI_HP_15min[0] > REI_HP_MAX[0]){						//判断HP-REI是否过限
		check_alarm_mcb[3] |= 0x20;								//写告警字
	}
    temp = Sohpfm_rx_a & 0x80;									//得到OFS的标志位                                                                                                         
    OFS[0] += temp >> 7; 										//对OFS变量进行累加   
    OFS_15min[0] += temp >> 7;
	check_alarm_mcb[3] &= 0x7F;									//清除告警字
	if (OFS_15min[0] > OFS_MAX[0]){								//判断OFS是否过限
		check_alarm_mcb[3] |= 0x80;								//写告警字
	}
	temp = Pjerx_count_a;
    PJC_HP[0] += temp;											//将正指针调整事件计数存入变量
    PJC_HP_15min[0] += temp;
	check_alarm_mcb[3] &= 0xEF;									//清除告警字
	if (PJC_HP_15min[0] > PJC_HP_MAX[0]){						//判断PJC是否过限
		check_alarm_mcb[3] |= 0x10;								//写告警字
	}
	temp = Njerx_count_a;
    NJC_HP[0] += temp;											//将负指针调整事件计数存入变量
    NJC_HP_15min[0] += temp;
	check_alarm_mcb[3] &= 0xF7;									//清除告警字
	if (NJC_HP_15min[0] > NJC_HP_MAX[0]){						//判断NJC是否过限
		check_alarm_mcb[3] |= 0x08;								//写告警字
	}
//收集MCB盘B口的性能值
	temp = SohB1e_counth8_b;									//得到B1的高8位计数值                                                                                                          
	temp = (temp << 8) + SohB1e_countl8_b;						//得到B1的低8位计数值           
	B1[1] = temp;												//将B1计数器值存入变量          
	if ((Intmask0_b & 0xDA) | (Intmask2_b & 0xE0) | (Intmask3_b & 0x80)){		//判断告警是否存在              
       	dflg = 1;                                                                                               
    }                                                                                                               
	else dflg = 0;                                                                                                                   
    if (dflg | intflg_MCBB){									//判断该秒是否误块秒            
       	default_155M[1] = 1;                                                                                       
    }                                                                                                               
    else default_155M[1] = 0;
	intflg_MCBB = 0;                                                                                          
	temp = SohB2e_counth8_b;									//得到B2的高8位计数值           
	temp = (temp << 8) + SohB2e_countl8_b;						//得到B2的低8位计数值           
	B2[1] = temp;												//将B2的计数值存入变量          
	temp = SohM1e_counth8_b;									//得到M1即MS-REI的高8位计数值   
    temp = (temp << 8) + SohM1e_countl8_b;						//得到M1即MS-REI的低8位计数值   
    REI_MS[1] += temp;											//将M1即MS-REI的计数值存入变量  
    REI_MS_15min[1] += temp;
   	check_alarm_mcb[4] &= 0xBF;									//清除告警字
	if (REI_MS_15min[1] > REI_MS_MAX[1]){						//判断MS-REI是否过限
		check_alarm_mcb[4] |= 0x40;								//写告警字
	}
    temp = PohB3e_counth7_b & 0x7F;								//得到B3的高7位计数值           
    temp = (temp <<	8) + PohB3e_countl8_b;						//得到B3的低8位计数值           
    B3[1] = temp;												//将B3的计数值存入变量          
	temp = Pohrei_counth7_b & 0x7F;								//得到HP的REI高7位计数值        
	temp = (temp << 8) + Pohrei_countl8_b;						//得到HP的REI低8位计数值        
	REI_HP[1] += temp;											//将HP_REI的值存入变量          
    REI_HP_15min[1] += temp;
	check_alarm_mcb[4] &= 0xDF;									//清除告警字
	if (REI_HP_15min[1] > REI_HP_MAX[1]){						//判断HP-REI是否过限
		check_alarm_mcb[4] |= 0x20;								//写告警字
	}
    temp = Sohpfm_rx_b & 0x80;									//得到OFS的标志位               
    OFS[1] += temp >> 7; 										//对OFS变量进行累加             
    OFS_15min[1] += temp >> 7;
    check_alarm_mcb[4] &= 0x7F;									//清除告警字
	if (OFS_15min[1] > OFS_MAX[1]){								//判断OFS是否过限
		check_alarm_mcb[4] |= 0x80;								//写告警字
	}
	temp = Pjerx_count_b;
    PJC_HP[1] += temp;											//将正指针调整事件计数存入变量  
    PJC_HP_15min[1] += temp;
    check_alarm_mcb[4] &= 0xEF;									//清除告警字
	if (PJC_HP_15min[1] > PJC_HP_MAX[1]){						//判断PJC是否过限
		check_alarm_mcb[4] |= 0x10;								//写告警字
	}
	temp = Njerx_count_b;
    NJC_HP[1] += temp;											//将负指针调整事件计数存入变量  
    NJC_HP_15min[1] += temp;
	check_alarm_mcb[4] &= 0xF7;									//清除告警字
	if (NJC_HP_15min[1] > NJC_HP_MAX[1]){						//判断NJC是否过限
		check_alarm_mcb[4] |= 0x08;								//写告警字
	}

	Rdint_clr = 0x80;											//清除MCB一些计数器的值

//收集OTB盘A口的性能值
	if (start_flg[0] == 0){
	temp = f2rc7860_rd(F2SohB1e_counth8_a);						//得到B1的高8位计数值                                                                                                                

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -