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

📄 uart.c

📁 基于AVR的一种程序,智能控制器,可用于低压无功补偿部分,
💻 C
📖 第 1 页 / 共 2 页
字号:
	while(*SCICTL2&0x0080==0);
	*SCITXBUF=0x16;	
	Delay(5000);	
}

/****************************************************/
/*函数功能:接收桢数据中的有用数据体*/
/****************************************************/
void Re_Copy(void)
{
	uint temp,i;
	temp=rece_long[1]*256+rece_long[0];
	receive_temp[copy_count]=receive[serial_count];
	copy_count++;
	if(copy_count>=temp)
		{
			rece_data1_flag=0;
			rece_cs_flag=1;
			copy_count=0;
		}	
}


void Deal_serial(void)
{
	uint temp;
	if(rece_begain_flag==1)
		{
			if(receive[serial_count]==0x68)
				{
					rece_addr1_flag=1;				
					rece_begain_flag=0;
				}
		}
		else if(rece_addr1_flag==1)
			{
				rece_addr[0]=receive[serial_count];
				rece_addr1_flag=0;
				rece_addr2_flag=1;
			}
		else if(rece_addr2_flag==1)
			{
				rece_addr[1]=receive[serial_count];          /*低字节在前,高字节在后*/
				temp=rece_addr[1]*256+rece_addr[0];
				if(temp==up3_data.set_shuju[1]||temp==22222)rece_addr2_flag=0;			
					else rece_begain_flag=1; 	
				rece_enable_flag=1;		
			}
		else if(rece_enable_flag==1)
			{
				if(receive[serial_count]==0x68)
					{
						rece_enable_flag=0;
						rece_con1_flag=1;
					}
					else{ rece_begain_flag=1;rece_enable_flag=0;}						
			}
		else if(rece_con1_flag==1)
			{
				rece_con[0]=receive[serial_count];
				rece_con1_flag=0;
				rece_con2_flag=1;
			}
		else if(rece_con2_flag==1)
			{
				rece_con[1]=receive[serial_count];
				switch(rece_con[0])
          {
            case 0x0a1:if(rece_con[1]==0x01)             /*读参数*/
                        {
                          read_set_flag=1;
                          rece_con2_flag=0;
                          rece_l1_flag=1;                          
                        }
            	       else
            	        {
            	        	  rece_con2_flag=0;
                        	rece_begain_flag=1;              /*重新接收新数据*/
                      }
                      break;
            case 0x0a2:if(rece_con[1]==0x01)            /*设置参数*/
                       {
                       	 write_set_flag=1; 
                         rece_con2_flag=0;
                         rece_l1_flag=1;                         
                       }
                       else
                       {
                         rece_con2_flag=0;
                         rece_begain_flag=1;              /*重新接收新数据*/
                       }
                      break;
            case 0x0a3:if(rece_con[1]==0x01)             /*遥控投切*/
                       {
                         write_control_flag=1;
                         rece_con2_flag=0;
                         rece_l1_flag=1;
                       }
                      else
                       {
                         rece_con2_flag=0;
                         rece_begain_flag=1;              /*重新接收新数据*/
                       }
                      break;
            case 0x0a4:if(rece_con[1]==0x01)              /*读实时数据*/
                       {
                         read_ss_flag=1;
                         rece_con2_flag=0;
                         rece_l1_flag=1;
                       }
                      else
                       {
                         rece_con2_flag=0;
                         rece_begain_flag=1;              /*重新接收新数据*/
                       }
                      break;
            case 0x99:if(rece_con[1]==0x01)               /*调整比例系数*/
                       {
                         wr_bl_flag=1;
                         rece_con2_flag=0;
                         rece_l1_flag=1;                         
                       }
                      else
                       {
                         rece_con2_flag=0;
                         rece_begain_flag=1;              /*重新接收新数据*/
                       }
                      break;
            case 0x0af:if(rece_con[1]==0x01)              /*广播校时*/
                       {
                       	 wr_time_flag=1;
                       	 rece_con2_flag=0;
                       	 rece_l1_flag=1;
                       }
                       else
                       {
                       	 rece_con2_flag=0;
                       	 rece_begain_flag=1;
                       }
                       break;
            case 0x0a8:if(rece_con[1]==0x01)
            						{
            							set_power_flag=1;          /*更改电量表底*/		
            							rece_con2_flag=0;
            							rece_l1_flag=1;
            						}
            					  else
            					  	{
            					  		rece_con2_flag=0;
            					  		rece_begain_flag=1;
            					  	}                      
                      break;
            case 0x0a5:rece_l1_flag=1;                  /*整点数据*/
                      read_zd_flag=1;
                      rece_con2_flag=0;
                      break;
            case 0x0a6:rece_l1_flag=1;                  /*统计数据*/
                      read_tj_flag=1;
                      rece_con2_flag=0;
                      break;
            case 0x0a7:rece_l1_flag=1;                  /*事件记录*/
                      read_td_flag=1;
                      rece_con2_flag=0;
                      break;
						case 0x0ae:                                 /*初始化数据区*/
											chushihua=1;
											rece_l1_flag=1;
											rece_con2_flag=0;
											break;
            default: rece_con2_flag=0;                    /*返回重新接收*/
                     rece_begain_flag=1;
                     break;
           }				
			}
	 else if(rece_l1_flag==1)
	 	 {
	 	 	rece_long[0]=receive[serial_count];
	 	 	rece_l1_flag=0;
	 	 	rece_l2_flag=1;
	 	 }
	 else if(rece_l2_flag==1)
	 	{
	 		rece_long[1]=receive[serial_count];
	 		temp=rece_long[1]*256+rece_long[0];
	 		if(temp==0)
	 			{
	 				rece_l2_flag=0;
	 				rece_cs_flag=1;
	 			}
	 			else
	 				{
	 					rece_l2_flag=0;
	 					rece_data1_flag=1;			
	 				}	 		
	 	}	 
	 	
	else if(rece_data1_flag==1)
		{	
		  Re_Copy();			
		}	
	else if(rece_cs_flag==1)
		{
			rece_cs_flag=0;
			rece_end_flag=1;			
		}
	else if(rece_end_flag==1)
		{
			if(receive[serial_count]=0x16)
				{
					rece_fin_flag=1;		
					rece_end_flag=0;		
				}
				else {rece_begain_flag=1;rece_end_flag=0;}
		}			 	  	
}


void uart(void)
{
	uint i,record;
	record=p_day%2;
	if(rece_flag==1)
	 {
		Deal_serial();
		serial_count++;
		if(serial_count>999)serial_count=0;
		if(serial_count==rece_count)rece_flag=0;
		if(rece_fin_flag==1)
			{
				if(read_set_flag==1){Send_Set();Uart_Send(send_data,54);read_set_flag=0;}
				if(write_set_flag==1){Send_WriteSet();Uart_Send(send_data,10);Save_Pcset();write_set_flag=0;}
				if(wr_bl_flag==1){Send_Blset();Uart_Send(send_data,8);wr_bl_flag=0;}
				if(write_control_flag==1){Send_Control();Uart_Send(send_data,10);write_control_flag=0;}
				if(read_ss_flag==1){Send_Ss();Uart_Send(send_data,104);read_ss_flag=0;}				
				if(wr_time_flag==1)
					{
						for(i=0;i<6;i++)timer[i]=receive_temp[i];
						Write_Time();
						wr_time_flag=0;
					}
				if(read_zd_flag==1)
					{						
						Send_Zd();
						Uart_Send(send_data,731);
						read_zd_flag=0;
					}
				if(read_tj_flag==1)
					{
						Send_Tj();
						Uart_Send(send_data,163);
						read_tj_flag=0;
					}
				if(read_td_flag==1)
					{
						Send_Td();
						Uart_Send(send_data,268);
						read_td_flag=0;
					}
				if(chushihua==1)
					{
						chushihua=0;
						Send_ChuSH();
						Uart_Send(send_data,10);
						for(i=0;i<200;i++)
						flash_buffer[i]=0;
						for(i=0;i<1600;i++)
						Write_Flash((i+4),0,flash_buffer,200);
						Write_Flash(1,0,flash_buffer,1);												
					}
				if(set_power_flag==1)
					{
						set_power_flag=0;
						for(i=0;i<4;i++)
						set_yg[i]=receive_temp[i];
						for(i=0;i<4;i++)
						set_wg[i]=receive_temp[i+4];
						Write_Ram();
						Send_Power();
						Uart_Send(send_data,10);						
					}
				rece_begain_flag=1;
				rece_fin_flag=0;	
			}
	 }
}

⌨️ 快捷键说明

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