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

📄 test.c

📁 单片机程序代码,经过很详细的测试.呵呵,硬件相关.
💻 C
📖 第 1 页 / 共 5 页
字号:
			}
			break;
		case 0x543030:				//command"T00" 测试用命令查看寄存器的数值
		case 0x743030:				//command"t00"
			if (!GetMcpRdyTbl(40)){
				cmd_para_save.test_read_board = (rx_buf[i][0xA])-0x30;
				cmd_length_temp1 = (unsigned int)AsciiToHex(rx_buf[i][0x0B]);
				cmd_length_temp2 = (unsigned int)AsciiToHex(rx_buf[i][0x0C]);
				cmd_length_temp3 = (unsigned int)AsciiToHex(rx_buf[i][0x0D]);
				cmd_length_temp4 = (unsigned int)AsciiToHex(rx_buf[i][0x0E]);
				cmd_para_save.test_read_address = cmd_length_temp1 << 12 | cmd_length_temp2 << 8 | cmd_length_temp3 << 4 | cmd_length_temp4;
				SetMcpRdyTbl(40);
			}
			break;
		case 0x543031:				//command"T01" 测试用命令写寄存器
		case 0x743031:				//command"t01"
			if (!GetMcpRdyTbl(41)){
				cmd_para_save.test_write_board = (rx_buf[i][0xA])-0x30;
				cmd_length_temp1 = (unsigned int)AsciiToHex(rx_buf[i][0x0B]);
				cmd_length_temp2 = (unsigned int)AsciiToHex(rx_buf[i][0x0C]);
				cmd_length_temp3 = (unsigned int)AsciiToHex(rx_buf[i][0x0D]);
				cmd_length_temp4 = (unsigned int)AsciiToHex(rx_buf[i][0x0E]);
				cmd_para_save.test_write_address = cmd_length_temp1 << 12 | cmd_length_temp2 << 8 | cmd_length_temp3 << 4 | cmd_length_temp4;
				temp1 = AsciiToHex(rx_buf[i][0x0F]);
				temp2 = AsciiToHex(rx_buf[i][0x10]);
				cmd_para_save.test_write_value = temp1 << 4 | temp2;
				SetMcpRdyTbl(41);
			}
			break;
/*		case 0x543032:				//command"T02" 测试用命令查看寄存器的数值
		case 0x743032:				//command"t02"
			if (!GetMcpRdyTbl(42)){
				cmd_para_save.test_read_name = rx_buf[i][0x0A] - 0x30;
				SetMcpRdyTbl(42);
			}
		break;
		case 0x543033:				//command"T03" 测试用命令写寄存器
		case 0x743033:				//command"t03"
			if (!GetMcpRdyTbl(43)){
				cmd_para_save.test_write_name = rx_buf[i][0x0A] - 0x30;
				temp1 = AsciiToHex(rx_buf[i][0x0B]);
				temp2 = AsciiToHex(rx_buf[i][0x0C]);
				cmd_para_save.test_value = temp1 << 4 | temp2;
				SetMcpRdyTbl(43);
			}
			break;
*/		case 0x543034:				//command"T04" 测试用命令写寄存器
		case 0x743034:				//command"t04"
			if (!GetMcpRdyTbl(44)){
				read_port = rx_buf[i][0x0A] - 0x30;
				SetMcpRdyTbl(44);
			}
			break;
		case 0x543035:				//command"T05" 测试用命令写寄存器
		case 0x743035:				//command"t05"
			if (!GetMcpRdyTbl(45)){
				read_port = rx_buf[i][0x0A] - 0x30;
				SetMcpRdyTbl(45);
			}
			break;

		default :
			reply_unknown_cmd(i);
	}
	save_cmd_enable[i] = 0;
}

void save_cmd1(void){
	if (rx_buf_overflow[0]){
		reply_unknown_cmd(0);
	}
	else if (save_cmd_enable[0]){
		analysis_cmd(0);
//		while (!tx_buf_empty){}
//		for(i=0;i<RX_BUF_SIZE;i++)
//			tx_buf[i] = rx_buf[0][i];
//		save_cmd_enable[0] = 0;
//		while(!tx_done){}
//		tx_done = 0;
//		tx_buf_empty = 0;
//		TI = 1;
	}
}

void save_cmd2(void){
	if (rx_buf_overflow[1]){
		reply_unknown_cmd(1);
	}
	else if (save_cmd_enable[1]){
		analysis_cmd(1);
//		while(!tx_buf_empty){}
//		for(i=0;i<RX_BUF_SIZE;i++)
//			tx_buf[i] = rx_buf[1][i];
//		save_cmd_enable[1] = 0;
//		while(!tx_done){}
//		tx_done = 0;
//		tx_buf_empty = 0;
//		TI = 1;
	}
}

void main (void)  {

		unsigned char xdata TUnum;
//		unsigned char xdata inport;
//		unsigned char xdata outport;
		unsigned char xdata btemp;

		Uchar prio=0;

		EA = 0;              /* Disable global interrupt flag       */

		P1_0 = ~P1_0;

		/*Setup the serial port for 1200 baud at 16MHz.
		------------------------------------------------*/
		#ifndef MONITOR51
		    SCON  = 0x50;		        /* SCON: mode 1, 8-bit UART, enable rcvr      */
		    TMOD |= 0x20;               /* TMOD: timer 1, mode 2, 8-bit reload        */

			P1_0 = ~P1_0;

		    TH1   = 0xFA;                /* TH1:  reload value for 9600 baud @ 11.0592MHz   */
			TL1	  = 0xFA;
		    TR1   = 1;                  /* TR1:  timer 1 run                          */
//		   /* TI    = 1;                  /* TI:   set TI to send first char of UART    */
		#endif
		
//		TestSerial();      // uncomment this function to verify serial communication
		 
//		#if 0   // init ISD51 and start user program until the uVision2 Debugger connects
//		  ISDinit ();        // initialize uVision2 Debugger and continue program run
//		#endif
		
//		#if 0   // init ISD51 and wait until the uVision2 Debugger connects
//		  ISDwait ();        // wait for connection to uVision2 Debugger
//		#endif

		P1_0 = ~P1_0;

		time = 0;
		time1 = 0;
		time2 = 0;
		time3 = 0;

		PX0 = 1;				//set int0 high ptio
		PS = 1;					//set serial high prio

		P1_0 = ~P1_0;

		ES = 1;					//enable serial port int
  		EA = 1;              	// Enable global interrupt flag

		P1_0 = ~P1_0;

		TMOD |= 0x01;			//timer 1 type 1
		TH0 = -46080/256;

		P1_0 = ~P1_0;

		TL0 = -46080%256;

		P1_0 = ~P1_0;

		ET0 = 1;				//open T/C0 interrupt
		TR0 = 1;				//start T/C0

		P1_0 = ~P1_0;

	btemp = 1;
	while (btemp){
		if (P1_7 == 1){
			btemp = 0;
		}
	}

		
	
///////////////////
	P1 = 0x50;
	XBYTE[0xC400] = 0x01;
	delay();
	XBYTE[0xC400] = 0x00;
	P1 = 0;
	init_7820();
	Encrypt_reg = 0xAA;
	Intmask_reg = 0xFF;
//	btemp = Int_reg;
	S_reg = 0xC1;  //set 7820 free run


//init 7860
	P1 = 0x30;
	XBYTE[0xC400] = 0x01;
	delay();
	XBYTE[0xC400] = 0x00;
	P1 = 0;
	init_7860();
	Reg_protect			= 0xAA;
//	Int_mask            = 0x80;
	Dxc_cntr			= 0xA0;

//close alarm LED
	XBYTE[0xBC00] = 0x01;
	XBYTE[0xC000] = 0x01;

//init se0111 or init se0121
	P1 = 0x20;
	btemp = XBYTE[0xA400];
	P1 = 0xFF;
	if (btemp == 0x51){
		init_se0111(1);
		board_type[1][1] = 2;
		start_flg[1] = 0;
		if (!GetResRdyTbl(2))
			SetResRdyTbl(2);               //置响应事件列表相应位为1
	}
	else if (btemp == 0x57){				//初始化EOS
		init_se0121(1);
		board_type[1][1] = 3;
		start_flg_EOS[1] = 0;
		if (!GetResRdyTbl(2))
			SetResRdyTbl(2);               //置响应事件列表相应位为1
	}

	P1 = 0x60;
	btemp = XBYTE[0xA400];
	P1 = 0xFF;
	if (btemp == 0x51){
		init_se0111(2);
		board_type[2][1] = 2;
		start_flg[2] = 0;
		if (!GetResRdyTbl(3))
			SetResRdyTbl(3);               //置响应事件列表相应位为1
	}
	else if (btemp == 0x57){				//初始化EOS
		init_se0121(2);
		board_type[2][1] = 3;
		start_flg_EOS[2] = 0;
		if (!GetResRdyTbl(3))
			SetResRdyTbl(3);               //置响应事件列表相应位为1
	}

	P1 = 0x40;
	btemp = XBYTE[0xA400];
	P1 = 0xFF;
	if (btemp == 0x51){
		init_se0111(3);
		board_type[3][1] = 2;
		start_flg[3] = 0;
		if (!GetResRdyTbl(4))
			SetResRdyTbl(4);               //置响应事件列表相应位为1
	}
	else if (btemp == 0x57){				//初始化EOS
		init_se0121(3);
		board_type[3][1] = 3;
		start_flg_EOS[3] = 0;
		if (!GetResRdyTbl(4))
			SetResRdyTbl(4);               //置响应事件列表相应位为1
	}

	P1 = 0x10;
	btemp = XBYTE[0xB000];
	P1 = 0xFF;
	if (btemp == 0x55){
		reset_f2rc7860();
    	f2_rc7820();
		f2rc7820_wr(F2Encrypt_reg,0xAA);
		f2rc7820_wr(F2Intmask_reg,0xFF);

	    f2_rc7860();
		f2rc7860_wr(F2Dxc_cntr,0xA0);
		start_flg[0] = 0;
		if (!GetResRdyTbl(5))
			SetResRdyTbl(5);               //置响应事件列表相应位为1
	}


  		for(TUnum=0;TUnum<=63;TUnum++){
			PTUN(0,TUnum)=0xFF;
		}
		for(TUnum=0;TUnum<=63;TUnum++){
			PTUN(1,TUnum)=0xFF;
		}
  		for(TUnum=0;TUnum<=63;TUnum++){
			PTUN(2,TUnum)=0xFF;
		}
  		for(TUnum=0;TUnum<=63;TUnum++){
			PTUN(3,TUnum)=0xFF;
		}
  		for(TUnum=0;TUnum<=63;TUnum++){
			PTUN(4,TUnum)=0xFF;
		}
  		for(TUnum=0;TUnum<=63;TUnum++){
			PTUN(5,TUnum)=0xFF;
		}
  		for(TUnum=0;TUnum<=63;TUnum++){
			PTUN(6,TUnum)=0xFF;
		}


	btemp = 1;
	while (btemp){
		save_cmd1();
		btemp = GetMcpRdyTbl(20);
		if (btemp == 1){
			btemp = 0;
			commandid = 0x00433830;
			result = 0;
			SetResRdyTbl(1);                    //置响应事件列表相应位为1
		}
		else btemp = 1;
	}


	 while (1)  {
//		#if 1   // init ISD51 only when the uVision2 Debugger tries to connect
//		    ISDcheck();      // initialize uVision2 Debugger and continue program run
//		#endif
		save_cmd1();
		save_cmd2();

	if (time >= 20){
		time = 0;
		P3_4 =  ~P3_4;
	}	

		prio = ScanResRdyTbl();
		switch(prio){
			case 1:
				reply_mcp_command(commandid,result);
				break;
			case 2:
				report_initializers_2M1();
				break;
			case 3:
				report_initializers_2M2();
				break;
			case 4:
				report_initializers_2M3();
				break;
			case 5:
				report_initializers_OTB();
				break;
			case 6:
				report_loss_2M1();
				break;
			case 7:
				report_loss_2M2();
				break;
			case 8:
				report_loss_2M3();
				break;
			case 9:
				report_loss_OTB();
				break;
			case 10:
				report_clock_stat(result);
				break;
			case 11:
				report_clock_working(result);
				break;
			case 12:
			    report_overhead_value(result,overhead_value);
				break;
			case 13:
				report_board_type(result);
				break;
			case 14:
				report_board_state(result);
				break;
			case 15:
				report_15min_performance();
				break;
			case 16:
				report_work_performance(result);
				break;
			case 17:
				report_overheadj_value(result);
				break;
			case 18:
				report_1sec_performance();
				break;
			case 19:
				report_alarm();
				break;
			case 20:
				report_port_lpstat(result);
				break;
			case 21:
				report_path_switch_table(result,bboardid,bportid,btimeid);
				break;
			case 22:
				report_path_stat(result,mboardid,mportid);
				break;
			case 28:
				report_auto_path_switch(auto_path_port);
				break;
			case 33:
				report_EOS_address(result);
				break;
			case 35:
				report_search_location(result);
				break;
			case 37:
				report_EOS_work_state(result);
				break;
			case 39:
				report_EOS_num(result);
				break;
			case 40:
				report_regiester_value(result);
				break;
//			case 41:
//				report_variable_value(result);
//				br

⌨️ 快捷键说明

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