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

📄 test.c

📁 单片机程序代码,经过很详细的测试.呵呵,硬件相关.
💻 C
📖 第 1 页 / 共 5 页
字号:
					f2rc7860_wr(F2Intmask0_b,inter_reg[3][0]);
					inter_reg[3][0] &= 0xD0;	//取出可发生自动倒换的bit位
					if (inter_reg[3][0] != 0){
						init_recover[3] = 1;
						path_switch_otbb();
	//					SetExtRdyTbl(7);
					}
				}
				if (inter_reg[3][1] != 0){
					f2rc7860_wr(F2Intmask1_b,inter_reg[3][1]);
				}
				if (inter_reg[3][2] != 0){
					f2rc7860_wr(F2Intmask2_b,inter_reg[3][2]);
					inter_reg[3][2] &= 0xE0;
					if (inter_reg[3][2] != 0){
						init_recover[3] = 1;
						path_switch_otbb();
	//					SetExtRdyTbl(7);
					}
				}
				if (inter_reg[3][3] != 0){
	//				f2rc7860_wr(F2Intmask3_b,judge3);
					inter_reg[3][3] &= 0x80;
					if (inter_reg[3][3] != 0){
						init_recover[3] = 1;
						path_switch_otbb_tu();
						SetExtRdyTbl(8);
					}
				}
			}
		f2rc7860_wr(F2Int_mask,0);
		}
	}

	if (int_reg == 0){	//检测出中断信号漏检以后再次进行倒换
		SetExtRdyTbl(2);
		SetExtRdyTbl(4);
		if ((start_flg[0] == 0) && (f2int_reg == 0)){
			SetExtRdyTbl(6);
			SetExtRdyTbl(8);
		}
//		test_reg[1] = test_reg[0] = 0;	//检测变量重新清零
	}

//	SetExtRdyTbl(15);					//每秒查询改写2M盘的AIS速率
	Rdint_clr = 0x40;					//清除MCB盘的Ia3_a与Ia3_b中断位
	f2rc7860_wr(F2Rdint_clr,0x40);		//清除OTB盘的F2Ia3_a与F2Ia3_b中断位
	Int_mask = 0;	
	SetExtRdyTbl(17);					//进行时钟频偏检测程序
//	SetResRdyTbl(41);					//打印中断次数

}
/****************************************************************************************
void service_int0(void) interrupt 0 using 1{
volatile unsigned char int_reg;
volatile unsigned char judge;
volatile unsigned char judge1;
volatile unsigned char judge2;
volatile unsigned char judge3;
volatile unsigned char temp,temp1,temp2;
	
	for (temp = 0; temp <= 7; temp++){				//取出63个时隙的AIS寄存器值
		ais_reg[0][temp] = XBYTE[temp + 0x88A6];
		ais_reg[1][temp] = XBYTE[temp + 0x8AA6];
		if (start_flg[0] == 0){
			ais_reg[2][temp] = f2rc7860_rd(temp + 0x00A6);
			ais_reg[3][temp] = f2rc7860_rd(temp + 0x02A6);
		}
	}
	for (temp = 0; temp <= 3; temp++){				//取出4个光口的中断寄存器值
		inter_reg[0][temp] = XBYTE[temp + 0x88B5];
		inter_reg[1][temp] = XBYTE[temp + 0x8AB5];
		if (start_flg[0] == 0){
			inter_reg[2][temp] = f2rc7860_rd(temp + 0x00B5);
			inter_reg[3][temp] = f2rc7860_rd(temp + 0x02B5);
		}
	}

	int_reg = Int_vec;
	temp = int_reg & 0xF0;
	if (temp){
		for (temp = 0; temp <= 7; temp++){				//取出63个时隙的AIS寄存器值
			ais_reg[0][temp] |= XBYTE[temp + 0x88A6];
		}
		temp = inter_reg[0][0] & 0xDA;
		temp1 = inter_reg[0][2] & 0xE0;
		temp2 = inter_reg[0][3] & 0x80;
		if (temp | temp1 | temp2){
			intflg_MCBA = 1;				//计算误码秒的标志位
		}
		if (inter_reg[0][0] != 0){
			Intmask0_a = inter_reg[0][0];
			inter_reg[0][0] &= 0xD0;					//取出可发生自动倒换的bit位
			if (inter_reg[0][0] != 0){
				init_recover[0] = 1;
				path_switch_mcba();
//				SetExtRdyTbl(1);
			}
		}
		if (inter_reg[0][1] != 0){
			Intmask1_a = inter_reg[0][1];
		}
		if (inter_reg[0][2] != 0){
			Intmask2_a = inter_reg[0][2];
			inter_reg[0][2] &= 0xE0;
			if (inter_reg[0][2] != 0){
//				SetExtRdyTbl(1);
				init_recover[0] = 1;
				path_switch_mcba();
			}
		}
		if (inter_reg[0][3] != 0){
//			Intmask3_a = judge3;
			inter_reg[0][3] &= 0x80;
			if (inter_reg[0][3] != 0){
				test_reg[0] += 1;
				init_recover[0] = 1;
				path_switch_mcba_tu();
				SetExtRdyTbl(2);
			}
		}
	}

	temp = int_reg & 0x0F;
	if (temp){
		for (temp = 0; temp <= 7; temp++){				//取出63个时隙的AIS寄存器值
			ais_reg[1][temp] |= XBYTE[temp + 0x8AA6];
		}
		temp = inter_reg[1][0] & 0xDA;
		temp1 = inter_reg[1][2] & 0xE0;
		temp2 = inter_reg[1][3] & 0x80;
		if (temp | temp1 | temp2){
			intflg_MCBB = 1;
		}
		if (inter_reg[1][0] != 0){
			Intmask0_b = inter_reg[1][0];
			inter_reg[1][0] &= 0xD0;					//取出可发生自动倒换的bit位
			if (inter_reg[1][0] != 0){
				test_reg[1] += 1;
				init_recover[1] = 1;
				path_switch_mcbb();
//				SetExtRdyTbl(3);
			}
		}
		if (inter_reg[1][1] != 0){
			Intmask1_b = inter_reg[1][1];
		}
		if (inter_reg[1][2] != 0){
			Intmask2_b = inter_reg[1][2];
			inter_reg[1][2] &= 0xE0;
			if (inter_reg[1][2] != 0){
//				SetExtRdyTbl(3);
				init_recover[1] = 1;
				path_switch_mcbb();
			}
		}
		if (inter_reg[1][3] != 0){
//			Intmask3_b = judge3;
			inter_reg[1][3] &= 0x80;
			if (inter_reg[1][3] != 0){
				init_recover[1] = 1;
				path_switch_mcbb_tu();
				SetExtRdyTbl(4);
			}
		}
	}

//	Rdint_clr = 0x40;					//清除MCB盘的Ia3_a与Ia3_b中断位
//	judge = int_flg & 0x04;
//	if (judge == 0x04){
	if (f2rc7820_rd(F2Int_reg)){
		f2rc7820_wr(F2Encrypt_reg,0xAA);       //open 7820 write reg
		f2rc7820_wr(F2Intmask_reg,0xFF);
	}

//	judge = int_flg & 0x08;								//取出OTB7860的中断
//	if (judge == 0x08){
	int_reg = f2rc7860_rd(F2Int_vec);
	if (int_reg){
		if (start_flg[0] == 1){
			f2rc7860_wr(F2Reg_protect,0xAA);       //open 7860 write reg protect
			f2rc7860_wr(F2Int_mask,0x80);
		}
		else{
		if (int_reg & 0xF0){
	   		judge = f2rc7860_rd(F2Ia0_a);					//光分支盘A口中断处理
			judge1 = f2rc7860_rd(F2Ia1_a);
			judge2 = f2rc7860_rd(F2Ia2_a);
			judge3 = f2rc7860_rd(F2Ia3_a);
//			f2rc7860_wr(F2Rdint_clr,0x40);		//清除OTB盘的F2Ia3_a与F2Ia3_b中断位
			for (temp = 0; temp <= 7; temp++){				//取出63个时隙的AIS寄存器值
				ais_reg[2][temp] |= f2rc7860_rd(temp + 0x00A6);
			}
			if ((judge & 0xDA) | (judge2 & 0xE0) | (judge3 & 0x80)){
				intflg_OTBA = 1;
			}
			if (judge != 0){
				f2rc7860_wr(F2Intmask0_a,judge);
				judge &= 0xD0;					//取出可发生自动倒换的bit位
				if (judge != 0){
					init_recover[2] = 1;
					path_switch_otba();
//					SetExtRdyTbl(5);
				}
			}
			if (judge1 != 0){
				f2rc7860_wr(F2Intmask1_a,judge1);
//				judge1 &= 0xF0;
//				if (judge1 != 0){
//					SetExtRdyTbl(5);
//					path_switch_otba();
//				}
			}
			if (judge2 != 0){
				f2rc7860_wr(F2Intmask2_a,judge2);
				judge2 &= 0xE0;
				if (judge2 != 0){
//					SetExtRdyTbl(5);
					init_recover[2] = 1;
					path_switch_otba();
				}
			}
			if (judge3 != 0){
//				f2rc7860_wr(F2Intmask3_a,judge3);
				judge3 &= 0x80;
				if (judge3 != 0){
					init_recover[2] = 1;
					path_switch_otba_tu();
					SetExtRdyTbl(6);
				}
			}
		}

		if (int_reg & 0x0F){
			judge = f2rc7860_rd(F2Ia0_b);					//光分支盘B口中断处理
			judge1 = f2rc7860_rd(F2Ia1_b);
			judge2 = f2rc7860_rd(F2Ia2_b);
			judge3 = f2rc7860_rd(F2Ia3_b);
//			f2rc7860_wr(F2Rdint_clr,0x40);		//清除OTB盘的F2Ia3_a与F2Ia3_b中断位
			for (temp = 0; temp <= 7; temp++){				//取出63个时隙的AIS寄存器值
				ais_reg[3][temp] |= f2rc7860_rd(temp + 0x02A6);
			}
			if ((judge & 0xDA) | (judge2 & 0xE0) | (judge3 & 0x80)){
				intflg_OTBB = 1;
			}
			if (judge != 0){
				f2rc7860_wr(F2Intmask0_b,judge);
				judge &= 0xD0;					//取出可发生自动倒换的bit位
				if (judge != 0){
					init_recover[3] = 1;
					path_switch_otbb();
//					SetExtRdyTbl(7);
				}
			}
			if (judge1 != 0){
				f2rc7860_wr(F2Intmask1_b,judge1);
//				judge1 &= 0xF0;
//				if (judge1 != 0){
//					SetExtRdyTbl(7);
//					path_switch_otbb();
//				}
			}
			if (judge2 != 0){
				f2rc7860_wr(F2Intmask2_b,judge2);
				judge2 &= 0xE0;
				if (judge2 != 0){
//					SetExtRdyTbl(7);
					init_recover[3] = 1;
					path_switch_otbb();
				}
			}
			if (judge3 != 0){
//				f2rc7860_wr(F2Intmask3_b,judge3);
				judge3 &= 0x80;
				if (judge3 != 0){
					init_recover[3] = 1;
					path_switch_otbb_tu();
					SetExtRdyTbl(8);
				}
			}
		}
	}
	}

	SetExtRdyTbl(15);					//每秒查询改写2M盘的AIS速率
	Rdint_clr = 0x40;					//清除MCB盘的Ia3_a与Ia3_b中断位
	f2rc7860_wr(F2Rdint_clr,0x40);		//清除OTB盘的F2Ia3_a与F2Ia3_b中断位

}


/****************************************************************************************
void service_int0(void) interrupt 0 using 1{
volatile unsigned char int_reg;
volatile unsigned char judge;
volatile unsigned char judge1;
volatile unsigned char judge2;
volatile unsigned char judge3;
volatile unsigned char temp;
	
//	Rdint_clr = 0x40;					//清除MCB盘的Ia3_a与Ia3_b中断位
//	f2rc7860_wr(F2Rdint_clr,0x40);		//清除OTB盘的F2Ia3_a与F2Ia3_b中断位
//	int_flg = XBYTE[0xB400];			//中断源片选信号 Bit0 MCB7820,Bit1 MCB7860,Bit2 OTB7820,Bit3 OTB7860
	for (temp = 0; temp <= 7; temp++){				//取出63个时隙的AIS寄存器值
		ais_reg[0][temp] = XBYTE[temp + 0x88A6];
		ais_reg[1][temp] = XBYTE[temp + 0x8AA6];
		if (start_flg[0] == 0){
			ais_reg[2][temp] = f2rc7860_rd(temp + 0x00A6);
			ais_reg[3][temp] = f2rc7860_rd(temp + 0x02A6);
		}
	}
//	for (temp = 0; temp <= 7; temp++){				//取出63个时隙的AIS寄存器值
//		ais_reg[0][temp] |= XBYTE[temp + 0x88A6];
//		ais_reg[1][temp] |= XBYTE[temp + 0x8AA6];
//		if (start_flg[0] == 0){
//			ais_reg[2][temp] |= f2rc7860_rd(temp + 0x00A6);
//			ais_reg[3][temp] |= f2rc7860_rd(temp + 0x02A6);
//		}
//	}
//	Rdint_clr = 0x40;					//清除MCB盘的Ia3_a与Ia3_b中断位
//	f2rc7860_wr(F2Rdint_clr,0x40);		//清除OTB盘的F2Ia3_a与F2Ia3_b中断位

	int_reg = Int_vec;
	if (int_reg & 0xF0){
		judge  = Ia0_a;					//得出MCB的7860A口IA0中断寄存器值
		judge1 = Ia1_a;
		judge2 = Ia2_a;	
		judge3 = Ia3_a;		
		Rdint_clr = 0x40;					//清除MCB盘的Ia3_a与Ia3_b中断位
		for (temp = 0; temp <= 7; temp++){				//取出63个时隙的AIS寄存器值
			ais_reg[0][temp] |= XBYTE[temp + 0x88A6];
		}
		if ((judge & 0xDA) | (judge2 & 0xE0) | (judge3 & 0x80)){
			intflg_MCBA = 1;				//计算误码秒的标志位
		}
		if (judge != 0){
			Intmask0_a = judge;
			judge &= 0xD0;					//取出可发生自动倒换的bit位
			if (judge != 0){
//				SetExtRdyTbl(1);
				init_recover[0] = 1;
				path_switch_mcba();
			}
		}
		if (judge1 != 0){
			Intmask1_a = judge1;
//			judge1 &= 0xF0;
//			if (judge1 != 0){
//				SetExtRdyTbl(1);
//				path_switch_mcba();
//			}
		}
		if (judge2 != 0){
			Intmask2_a = judge2;
			judge2 &= 0xE0;
			if (judge2 != 0){
//				SetExtRdyTbl(1);
				init_recover[0] = 1;
				path_switch_mcba();
			}
		}
		if (judge3 != 0){
//			Intmask3_a = judge3;
			judge3 &= 0x80;
			if (judge3 != 0){
//				ina += 1;
				SetExtRdyTbl(2);
				init_recover[0] = 1;
				path_switch_mcba_tu();
			}
		}
	}

	if (int_reg & 0x0F){
		judge  = Ia0_b;					//得出MCB的7860B口IA0中断寄存器值
		judge1 = Ia1_b;		
		judge2 = Ia2_b;
		judge3 = Ia3_b;
		Rdint_clr = 0x40;					//清除MCB盘的Ia3_a与Ia3_b中断位
		for (temp = 0; temp <= 7; temp++){				//取出63个时隙的AIS寄存器值
			ais_reg[1][temp] |= XBYTE[temp + 0x8AA6];
		}
		if ((judge & 0xDA) | (judge2 & 0xE0) | (judge3 & 0x80)){
			intflg_MCBB = 1;
		}
		if (judge != 0){
			Intmask0_b = judge;
			judge &= 0xD0;					//取出可发生自动倒换的bit位
			if (judge != 0){
//				SetExtRdyTbl(3);
				init_recover[1] = 1;
				path_switch_mcbb();
			}
		}
		if (judge1 != 0){
			Intmask1_b = judge1;
//			judge1 &= 0xF0;
//			if (judge1 != 0){
//				SetExtRdyTbl(3);
//				path_switch_mcbb();
//			}
		}
		if (judge2 != 0){
			Intmask2_b = judge2;
			judge2 &= 0xE0;
			if (judge2 != 0){
//				SetExtRdyTbl(3);
				init_recover[1] = 1;
				path_switch_mcbb();
			}
		}
		if (judge3 != 0){
//			Intmask3_b = judge3;
			judge3 &= 0x80;
			if (judge3 != 0){
//				inb += 1;
				SetExtRdyTbl(4);

⌨️ 快捷键说明

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