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

📄 uart_comm.c

📁 自己的小作,能简化繁琐的通讯帧格式的检测工作,在常量数组 PROTOCOL_ARRAY 中定义一个或多个通讯帧格式,能同时将多个有效帧检测出来,采样队列的方式,高效.
💻 C
📖 第 1 页 / 共 2 页
字号:
            }      
        }
    }
}
/*************************************************************
//  name:		;
//  function: 	以中断方式发送uart0_trs 中制定的缓冲区中的数据	;
//  hardware use:	none ;
//  pra in:		;
//  pra out:		;
//									;
//									;
//									;
//  note:		;
//  author:		jerry chen .
*************************************************************/
void uart0_send_irq (uint8 *buff_point, uint8 send_num )
{
    uart0_trs.comm_cnt = 0;
    uart0_trs.rtx_num = send_num;
    uart0_trs.tx_buff = buff_point;
    uart0_trs.lsr_status.tx_finish_flag = 0;

    U0THR = (uart0_trs.tx_buff)[uart0_trs.comm_cnt++];
}

/*************************************************************
//  name:		;
//  function: 		;
//  hardware use:	none ;
//  pra in:		;
//  pra out:		;
//									;
//									;
//									;
//  note:		;
//  author:		jerry chen .
*************************************************************/
void frame_det (void)
{
	uint8	i,j,tx_num_temp,det_point,finish,head_over_max,*level_temp,key_position_temp;	
	
	if( uart0_rec.rtx_num > 0 )
	{
	    for(i=0;i<PROTOCOL_MAX;i++)
	    {
	    	finish = 0;
	        while( (multi_frame_det.frame_det[i].valid==0) && (finish==0) )
	        {
				if( multi_frame_det.frame_det[i].level == 0 )
				{

		            det_point = multi_frame_det.detected_positon + 1;
		            if( det_point >= COM_QUE_MAX )
		            {
		                det_point -= COM_QUE_MAX;
		            }
		            
		            wait
		            
	            }
	            
	            level_temp = &multi_frame_det.frame_det[i].level;
	            
	            if( level_temp > 0 )
	            {
	            	key_position_temp = multi_frame_det.frame_det[i].frame_start + PROTOCOL_ARRAY[i].key_array[ level_temp ].offset;

	            	if(uart0_rec_que.head<uart0_rec_que.trail)
	            	{
	            		head_over_max =uart0_rec_que.head + COM_QUE_MAX;
	            	}
	            	else
	            	{
	            		head_over_max =uart0_rec_que.head;
	            	}

	            	if( PROTOCOL_ARRAY[i].key_array[ level_temp ].type == 0 )
	            	{


	            		if( key_position_temp <= head_over_max )
	            		{
	            			if( PROTOCOL_ARRAY[i].key_array[ level_temp ].key  == uart0_rec_que.queue[ key_position_temp ] )
	            			{
	            				(*level_temp)++ ;
	            				if( (*level_temp) >= PROTOCOL_ARRAY[i].level_num )
	            				{
	            					multi_frame_det.frame_det[i].valid = 1;
	            				}
	            			}
	            			else
	            			{
	            				multi_frame_det.frame_det[i].frame_start =0;
	            				multi_frame_det.frame_det[i].level = 0;
	            				multi_frame_det.frame_det[i].valid = 0;
	            				finish = 0;
	            			}
	            		}
	            		else
	            		{
	            			finish = 1;
	            		}
	            		
	            	}
	            	else if( PROTOCOL_ARRAY[i].key_array[ multi_frame_det.frame_det[i].level ].type == 1 )
	            	{
	            		if(uart0_rec_que.queue[ key_position_temp ] > PROTOCOL_ARRAY[i].key_array[ level_temp ].key_point_max)
	            		{
	            			multi_frame_det.frame_det[i].frame_start =0;
	            			multi_frame_det.frame_det[i].level = 0;
	            			multi_frame_det.frame_det[i].valid = 0;
	            			finish = 0;
	            		}
	            		else
	            		{
	            			if()
	            			
	            			
	            			
	            			
	            			
	            		}
	            		
	            		
	            		
	            		
	            		
	            	}
	            	
	            	
	            	
	            	
	            	
	            	
	            	
	            	
	            }
	            
	            
	            
	            
	            
	            for(j=0;j<uart0_rec.rtx_num;j++)
	            {
	                if( uart0_rec_que.queue[det_point] == PROTOCOL_ARRAY[i].key_array[0].key )
	                {
	                    multi_frame_det.frame_det[i].level++;
	                    if(multi_frame_det.frame_det[i].level >= PROTOCOL_ARRAY[i].level_num)
	                    {
	                        multi_frame_det.frame_det[i].valid = 1;
	                    }
	                    else
	                    {
	                        multi_frame_det.frame_det[i].frame_start = det_point;
	                    
    	                    for(;j<uart0_rec.rtx_num;j++)
    	                    {
    	                        if( uart0_rec_que.queue[det_point] == PROTOCOL_ARRAY[i].key_array[ multi_frame_det.frame_det[i].level ].key )    
    	                        
    	                        
    	                        
    	                    }
    	                }
	                    
	                    break;
	                }
	                else
	                {
    	                det_point++;
    	                if( det_point >= COM_QUE_MAX )
        	            {
        	                det_point -= COM_QUE_MAX;
        	            }
    	            }
	            }
	            
//	            if(multi_frame_det.frame_det[i].level == 1)
//	            {
//                    det_point++;
//    	            if( det_point >= COM_QUE_MAX )
//        	        {
//        	            det_point -= COM_QUE_MAX;
//        	        }
//
//    	            for(;j<uart0_rec.rtx_num;j++)
//    	            {
//    	                if( uart0_rec_que.queue[det_point] == PROTOCOL_ARRAY[i].key_array[0].key )
//    	                {
//    	                    multi_frame_det.frame_det[i].level++;
//    	                    multi_frame_det.frame_det[i].frame_start = det_point;
//    	                    break;
//    	                }
//    	                else
//    	                {
//        	                det_point++;
//        	                if( det_point >= COM_QUE_MAX )
//            	            {
//            	                det_point -= COM_QUE_MAX;
//            	            }
//        	            }
//    	            }
//	                
//	            }
	            
	        }
	        else
	        {






	            
	        }
	        
	        
	    }
	    
	    
	    
	    
	    
	    
	    
	    
	    
	    

	    
	    uart0_rec.rtx_num = 0;
	}
}

/*************************************************************
//  name:		;
//  function: 		;
//  hardware use:	none ;
//  pra in:		;
//  pra out:		;
//									;
//									;
//									;
//  note:		;
//  author:		jerry chen .
*************************************************************/
uint8 protocol_op_DLT645( uint8 valid_frame_start )
{
	uint8	i;	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}



















⌨️ 快捷键说明

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