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

📄 board_type.c

📁 单片机程序代码,经过很详细的测试.呵呵,硬件相关.
💻 C
📖 第 1 页 / 共 2 页
字号:
				if (hold_board[2] == 1){			//该盘还未初始化,则进行初始化
					init_se0111(2);
					board_type[2][1] = 2;
					hold_board[2] = 2;				//表示该盘已经初始化完毕
					start_flg[2] = 0;					//
					board_flg[2] = 0;
					if (!GetResRdyTbl(3))
						SetResRdyTbl(3);               //置响应事件列表相应位为1
				 }
				 else hold_board[2] = 2;
			}
			else hold_board[2] = 1;
		}
		if (btemp == 0x57 & start_flg_EOS[2]){
			if (hold_board[2] != 0){				//一秒以后盘标志位表示该盘还在原位置
				if (hold_board[2] == 1){			//该盘还未初始化,则进行初始化
					init_se0121(2);
					board_type[2][1] = 3;
					hold_board[2] = 2;				//表示该盘已经初始化完毕
					start_flg_EOS[2] = 0;
					board_flg[2] = 0;
					if (!GetResRdyTbl(3))
						SetResRdyTbl(3);               //置响应事件列表相应位为1
				 }
				 else hold_board[2] = 2;
			}
			else hold_board[2] = 1;
		}

		P1 = 0x40;
		btemp = XBYTE[0xA400];
		P1 = 0xFF;
		if ((btemp != 0x51) & (board_type[3][1] == 2)){							//2M盘3不在则置位该盘初始化标志位为1
			start_flg[3] = 1;
			if (board_flg[3] == 0){					//2M盘3丢失
				for (temp = 0; temp <= 20; temp++){	
					lparray2m[2][temp] = 0;			//将2M盘的环回状态复原为无环回
					EB_2M[2][temp] = 0;				//将2M盘的性能值清0
					REI_2M[2][temp] = 0;
					REI_2M_15min[2][temp] = 0;
					PJC_2M[2][temp] = 0;
					PJC_2M_15min[2][temp] = 0;
					NJC_2M[2][temp] = 0;
					NJC_2M_15min[2][temp] = 0;
					timeslot_2M[2][temp] = 0;
				}
				hold_board[3] = 0;
				board_flg[3] = 1;
				if (!GetResRdyTbl(8))
					SetResRdyTbl(8);               //置响应事件列表相应位为1
			}
		}
		else if((btemp != 0x57) & (board_type[3][1] == 3)){
			start_flg_EOS[3] = 1;
			if (board_flg[3] == 0){				//EOS盘1丢失
				lparray_EOS[2] = 0;
				hold_board[3] = 0;
				board_flg[3] = 1;
				if (!GetResRdyTbl(8))
					SetResRdyTbl(8);               //置响应事件列表相应位为1
			}
		}
		if (btemp == 0x51 & start_flg[3]){
			if (hold_board[3] != 0){				//一秒以后盘标志位表示该盘还在原位置
				if (hold_board[3] == 1){			//该盘还未初始化,则进行初始化
					init_se0111(3);					
					board_type[3][1] = 2;
					hold_board[3] = 2;				//表示该盘已经初始化完毕
					start_flg[3] = 0;				
					board_flg[3] = 0;
					if (!GetResRdyTbl(4))
						SetResRdyTbl(4);               //置响应事件列表相应位为1
				 }
				 else hold_board[3] = 2;
			}
			else hold_board[3] = 1;
		}
		if (btemp == 0x57 & start_flg_EOS[3]){
			if (hold_board[3] != 0){				//一秒以后盘标志位表示该盘还在原位置
				if (hold_board[3] == 1){			//该盘还未初始化,则进行初始化
					init_se0121(3);
					board_type[3][1] = 3;
					hold_board[3] = 2;				//表示该盘已经初始化完毕
					start_flg_EOS[3] = 0;
					board_flg[3] = 0;
					if (!GetResRdyTbl(4))
						SetResRdyTbl(4);               //置响应事件列表相应位为1
				 }
				 else hold_board[3] = 2;
			}
			else hold_board[3] = 1;
		}

		P1 = 0x10;
		btemp = XBYTE[0xB000];
		P1 = 0xFF;
		if (btemp != 0x55){
			start_flg[0] = 1;
			if (board_flg[0] == 0){					//光分支盘丢失
				for (temp = 2; temp <= 3; temp++){
					if (lparrayf[temp] == 2){
				  		for(temp1 = 0; temp1 <= 63; temp1++){
							PTUN(temp,temp1)=0xFF;
						}
					}
					lparrayf[temp] = 0;				//将光分支盘的环回状态复原为无环回
					B1[temp] = 0;				//将光分支盘的性能值清0
					B2[temp] = 0;
					B3[temp] = 0;
					REI_MS[temp] = 0;
					REI_MS_15min[temp] = 0;
					REI_HP[temp] = 0;
					REI_HP_15min[temp] = 0;
					OFS[temp] = 0;
					OFS_15min[temp] = 0;
					PJC_HP[temp] = 0;
					PJC_HP_15min[temp] = 0;
					NJC_HP[temp] = 0;
					NJC_HP_15min[temp] = 0;
				}
				hold_board[0] = 0;
				if (!GetResRdyTbl(9))
					SetResRdyTbl(9);               //置响应事件列表相应位为1
			}
		}
		if (btemp == 0x55 & start_flg[0]){
			if (hold_board[0] != 0){				//一秒以后盘标志位表示该盘还在原位置
				if (hold_board[0] == 1){			//该盘还未初始化,则进行初始化
			   		f2_rc7820();
					f2rc7820_wr(F2Encrypt_reg,0xAA);
					f2rc7820_wr(F2Intmask_reg,0xFF);
				    f2_rc7860();
					f2rc7860_wr(F2Dxc_cntr,0xA0);
					hold_board[0] = 2;				//表示该盘已经初始化完毕
					start_flg[0] = 0;					//
					if (!GetResRdyTbl(5))
						SetResRdyTbl(5);               //置响应事件列表相应位为1
				 }
				 else hold_board[0] = 2;
			}
			else hold_board[0] = 1;
		}
		board_flg[0] = start_flg[0];
}

void report_initializers(unsigned char slotid, unsigned char boardid){
//上报单盘初始化完成函数
	tx_buf[0] = '$';
	tx_buf[1] = '2';
	tx_buf[2] = '1';
	tx_buf[3] = 0x43;
	tx_buf[4] = 0x38;
	tx_buf[5] = 0x31;
	tx_buf[6] = '0';
	tx_buf[7] = '0';
	tx_buf[8] = '0';
	tx_buf[9] = '2';
	tx_buf[10] = slotid + 0x30;
	tx_buf[11] = boardid +0x30;
	tx_buf[12] = '*';
	tx_buf_pointer = 0;	
	while(tx_buf[tx_buf_pointer] != '*'){
		SBUF = tx_buf[tx_buf_pointer];
		while(tx_done == 0);
		tx_done = 0;
		tx_buf_pointer++;
	}
	SBUF = tx_buf[tx_buf_pointer];          //发送最后一个字符'*'
	while(tx_done == 0);
	tx_done = 0;
}

void report_initializers_2M1(void){
//C81上报MCP完成2M盘1初始化
	report_initializers(1,board_type[1][1]);
}

void report_initializers_2M2(void){
//C81上报MCP完成2M盘2初始化
	report_initializers(2,board_type[2][1]);
}

void report_initializers_2M3(void){
//C81上报MCP完成2M盘3初始化
	report_initializers(3,board_type[3][1]);
}

void report_initializers_OTB(void){
//C81上报MCP完成OTB盘初始化
	report_initializers(4,4);
}

void report_loss_board(unsigned char slotid, unsigned char boardid){
//上报单盘丢失函数
	tx_buf[0] = '$';
	tx_buf[1] = '2';
	tx_buf[2] = '1';
	tx_buf[3] = 0x46;
	tx_buf[4] = 0x30;
	tx_buf[5] = 0x32;
	tx_buf[6] = '0';
	tx_buf[7] = '0';
	tx_buf[8] = '0';
	tx_buf[9] = '2';
	tx_buf[10] = slotid + 0x30;
	tx_buf[11] = boardid +0x30;
	tx_buf[12] = '*';
	tx_buf_pointer = 0;	
	while(tx_buf[tx_buf_pointer] != '*'){
		SBUF = tx_buf[tx_buf_pointer];
		while(tx_done == 0);
		tx_done = 0;
		tx_buf_pointer++;
	}
	SBUF = tx_buf[tx_buf_pointer];          //发送最后一个字符'*'
	while(tx_done == 0);
	tx_done = 0;
}

void report_loss_2M1(void){
//F02上报MCP 2M盘1丢失
	report_loss_board(1,board_type[1][1]);
}

void report_loss_2M2(void){
//F02上报MCP 2M盘2丢失
	report_loss_board(2,board_type[2][1]);
}

void report_loss_2M3(void){
//F02上报MCP 2M盘3丢失
	report_loss_board(3,board_type[3][1]);
}

void report_loss_OTB(void){
//F02上报MCP OTB盘丢失
	report_loss_board(4,4);
}

void read_soft_version(void){
//V00读取MCU软件版本号
	if (!GetResRdyTbl(50))
		SetResRdyTbl(50); 
}

void report_soft_version(void){
//V00回复命令
	tx_buf[0] = '$';
	tx_buf[1] = '2';
	tx_buf[2] = '1';
	tx_buf[3] = 0x56;
	tx_buf[4] = 0x30;
	tx_buf[5] = 0x30;
	tx_buf[6] = '0';
	tx_buf[7] = '0';
	tx_buf[8] = '0';
	tx_buf[9] = '7';
	tx_buf[10] = '0';
	tx_buf[11] = '0';
	tx_buf[12] = '1';
	tx_buf[13] = '0';
	tx_buf[14] = '1';
	tx_buf[15] = '0';
	tx_buf[16] = '3';
	tx_buf[17] = '*';
	tx_buf_pointer = 0;	
	while(tx_buf[tx_buf_pointer] != '*'){
		SBUF = tx_buf[tx_buf_pointer];
		while(tx_done == 0);
		tx_done = 0;
		tx_buf_pointer++;
	}
	SBUF = tx_buf[tx_buf_pointer];          //发送最后一个字符'*'
	while(tx_done == 0);
	tx_done = 0;
}

void read_hard_version(void){
//V01读取MCU硬件版本号
	if (!GetResRdyTbl(51))
		SetResRdyTbl(51); 
}

void report_hard_version(void){
//V01回复命令
	tx_buf[0] = '$';
	tx_buf[1] = '2';
	tx_buf[2] = '1';
	tx_buf[3] = 0x56;
	tx_buf[4] = 0x30;
	tx_buf[5] = 0x31;
	tx_buf[6] = '0';
	tx_buf[7] = '0';
	tx_buf[8] = '0';
	tx_buf[9] = '7';
	tx_buf[10] = '0';
	tx_buf[11] = '0';
	tx_buf[12] = '1';
	tx_buf[13] = '0';
	tx_buf[14] = '0';
	tx_buf[15] = '0';
	tx_buf[16] = '2';
	tx_buf[17] = '*';
	tx_buf_pointer = 0;	
	while(tx_buf[tx_buf_pointer] != '*'){
		SBUF = tx_buf[tx_buf_pointer];
		while(tx_done == 0);
		tx_done = 0;
		tx_buf_pointer++;
	}
	SBUF = tx_buf[tx_buf_pointer];          //发送最后一个字符'*'
	while(tx_done == 0);
	tx_done = 0;
}


unsigned char read_register(struct cmd_para_save *read_reg){
//T00专为读取寄存器值的命令
unsigned char xdata read_board;
unsigned int  xdata read_address;
unsigned char xdata *point;
unsigned char xdata porth;
unsigned char xdata portl;
unsigned char xdata return_value;

	read_board = read_reg -> test_read_board;
	read_address = read_reg -> test_read_address;
	point = read_address;
	porth = (unsigned char) (read_address >> 8);
	portl = (unsigned char) (read_address & 0x00FF);
	
	switch (read_board){
		case 5: return_value = *point;
				break;
		case 4:	if (porth >= 0x10){
					read_address &= 0x0FFF;
					return_value = f2rc7860_rd(read_address);
				}
				else 	
					return_value = f2rc7820_rd(portl);
				break;
		case 3: 
		case 2: 
		case 1: if (porth < 0x80)
					return_value = se0111_reg_rd(porth,portl,read_board);
				else if (porth == 0xA4)
				{
					switch(read_board)
					{
						case 1:	P1 = 0x20;
								break;
						case 2: P1 = 0x60;
								break;
						case 3: P1 = 0x40;
								break;
						default:break;
					}
					return_value = XBYTE[0xA400];
					P1 = 0xFF;
				}
				else return_value = se0121_reg_rd(portl,read_board);
				break;
		default:return_value = 2;
				break;
	}
	if (!GetResRdyTbl(40))
		SetResRdyTbl(40); 
	return (return_value);
}

void report_regiester_value(unsigned char value){
unsigned char xdata temp;

	tx_buf[0] = '$';
	tx_buf[1] = '2';
	tx_buf[2] = '1';
	tx_buf[3] = 0x54;
	tx_buf[4] = 0x30;
	tx_buf[5] = 0x30;
	tx_buf[6] = '0';
	tx_buf[7] = '0';
	tx_buf[8] = '0';
	tx_buf[9] = '2';
	temp = value >> 4;
	if (temp > 9)
		tx_buf[10] = temp + 0x37;
	else tx_buf[10] = temp + 0x30;
	temp = value & 0x0F;
	if (temp > 9)
		tx_buf[11] = temp + 0x37;
	else tx_buf[11] = temp + 0x30;
	tx_buf[12] = '*';
	tx_buf_pointer = 0;	
	while(tx_buf[tx_buf_pointer] != '*'){
		SBUF = tx_buf[tx_buf_pointer];
		while(tx_done == 0);
		tx_done = 0;
		tx_buf_pointer++;
	}
	SBUF = tx_buf[tx_buf_pointer];          //发送最后一个字符'*'
	while(tx_done == 0);
	tx_done = 0;
}


unsigned char write_register(struct cmd_para_save *write_reg){
//T01专为写寄存器值的命令
unsigned char xdata write_board;
unsigned int  xdata write_address;
unsigned char xdata write_value;
unsigned char xdata *point;
unsigned char xdata porth;
unsigned char xdata portl;
unsigned char xdata return_value;

	commandid = 0x00543031;
	write_board = write_reg -> test_write_board;
	write_address = write_reg -> test_write_address;
	write_value = write_reg -> test_write_value;
	point = write_address;
	porth = (unsigned char) (write_address >> 8);
	portl = (unsigned char) (write_address & 0x00FF);
	
	switch (write_board){
		case 5: *point = write_value;
				return_value = 0;
				break;
		case 4:	if (porth >= 0x10){
					write_address &= 0x0FFF;
					f2rc7860_wr(write_address,write_value);
					return_value = 0;
				}
				else 	
					f2rc7820_wr(portl,write_value);
					return_value = 0;
				break;
		case 3: 
		case 2: 
		case 1: if (porth < 0x80)
					se0111_reg_wr(porth,portl,write_value,write_board);
				else se0121_reg_wr(portl,write_value,write_board);
				return_value = 0;
				break;
		default:return_value = 2;
				break;
	}
	if (!GetResRdyTbl(1))
		SetResRdyTbl(1); 
	return (return_value);
}

⌨️ 快捷键说明

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