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

📄 uart.c

📁 LPC2214 相关ADC代码,RS232,DAC,可以做为工业控制的参考
💻 C
字号:
#include  "config.h" 


extern uint8  rcv_buf[39];



extern uint8  Singel_A_CheckTime;
extern uint8  Singel_A_Frequency;
extern uint8  Singel_A_NoFireDelay;
extern uint8  Single_A_Q;

extern uint8  Double_A_CheckTime;
extern uint8  Double_A_Frequency;
extern uint8  Double_A_NoFireDelay;
extern uint8  Double_A_Q;

extern uint8  Double_B_CheckTime;
extern uint8  Double_B_Frequency;
extern uint8  Double_B_NoFireDelay;
extern uint8  Double_B_Q;

extern uint8  Flag_Single_Double;
extern uint8  Flag_A_B;
extern uint8  Flag_Enable_Bypass;

extern uint16 A_pps;
extern uint16 B_pps;

/****************************************************************************
* 名称:SendByte()
* 功能:向串口UART0发送字节数据。
* 入口参数:data                要发送的数据
* 出口参数:无
****************************************************************************/
void  SendByte(uint8 data)
{  U0THR = data;                      	// 发送数据
   while( (U0LSR&0x40)==0 );	     // 等待数据发送完毕
}


/****************************************************************************
* 名称:ISendBuf()
* 功能:将缓冲区的数据发送回主机(使用FIFO),并等待发送完毕。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  ISendBuf(void)
{ 
	/*
   uint8  i;
  
   for(i=0; i<1; i++) SendByte(rcv_buf[i]);
   while( (U0LSR&0x20)==0 );         	// 等待数据发送
   */
}  


/****************************************************************************
* 名称:UART1_SendByte()
* 功能:向串口UART1发送字节数据。
* 入口参数:data                要发送的数据
* 出口参数:无
****************************************************************************/
void  UART1_SendByte(uint8 data)
{  U1THR = data;				    // 发送数据

   while( (U1LSR&0x40)==0 );	    // 等待数据发送完毕
}




//   协议发送部分
//   共6个函数
void  ISendBuf1(void)
{ 
   uint8  i;
   uint8  SEND_STRING[3];
  
  
   
     
   SEND_STRING[0]=0X02;
   SEND_STRING[1]=0X01;
   SEND_STRING[2]=0X01;
   
   
   
   for(i=0; i<3; i++) SendByte(SEND_STRING[i]); 
   // print uart1
   for(i=0;i<3;i++) UART1_SendByte(0x55);
   for(i=0;i<3;i++) UART1_SendByte(SEND_STRING[i]);
   while( (U0LSR&0x20)==0 );         	// 等待数据发送
}  


/*

void  ISendBuf2(void)
{ 
    uint8  i;
    uint8  SEND_STRING[39]; 
  
  
   
   SEND_STRING[0]=0X26;
   SEND_STRING[1]=0X02;
   
   SEND_STRING[2]=CH1_DKUP_A/256;
   SEND_STRING[3]=CH1_DKUP_A%256;
   SEND_STRING[4]=CH1_DROP_A/256;
   SEND_STRING[5]=CH1_DROP_A%256;
   SEND_STRING[6]=CH1_MIN_A/256;   
   SEND_STRING[7]=CH1_MIN_A%256;
   SEND_STRING[8]=CH1_MAX_A/256;
   SEND_STRING[9]=CH1_MAX_A%256;
   SEND_STRING[10]=CH1_GAIN_A;
   
   SEND_STRING[11]=CH1_DKUP_B/256;
   SEND_STRING[12]=CH1_DKUP_B%256; 
   SEND_STRING[13]=CH1_DROP_B/256;
   SEND_STRING[14]=CH1_DROP_B%256;   
   SEND_STRING[15]=CH1_MIN_B/256;
   SEND_STRING[16]=CH1_MIN_B%256;
   SEND_STRING[17]=CH1_MAX_B/256;
   SEND_STRING[18]=CH1_MAX_B%256;
   SEND_STRING[19]=CH1_GAIN_B;
   
   SEND_STRING[20]=CH2_DKUP_A/256;
   SEND_STRING[21]=CH2_DKUP_A%256;
   SEND_STRING[22]=CH2_DROP_A/256;
   SEND_STRING[23]=CH2_DROP_A%256;
   SEND_STRING[24]=CH2_MIN_A/256;   
   SEND_STRING[25]=CH2_MIN_A%256;
   SEND_STRING[26]=CH2_MAX_A/256;
   SEND_STRING[27]=CH2_MAX_A%256;
   SEND_STRING[28]=CH2_GAIN_A;
   
   SEND_STRING[29]=CH2_DKUP_B/256;
   SEND_STRING[30]=CH2_DKUP_B%256; 
   SEND_STRING[31]=CH2_DROP_B/256;
   SEND_STRING[32]=CH2_DROP_B%256;   
   SEND_STRING[33]=CH2_MIN_B/256;
   SEND_STRING[34]=CH2_MIN_B%256;
   SEND_STRING[35]=CH2_MAX_B/256;
   SEND_STRING[36]=CH2_MAX_B%256;
   SEND_STRING[37]=CH2_GAIN_B;
   
   // 校验字节
   check32=0;
   for(i=1;i<38;i++) check32+=SEND_STRING[i];
   SEND_STRING[38]=check32%256;
   
   
   
   
   
   for(i=0; i<39; i++) SendByte(SEND_STRING[i]); 
   // print uart1
   for(i=0;i<3;i++) UART1_SendByte(0x55);
   for(i=0;i<39;i++) UART1_SendByte(SEND_STRING[i]);
   while( (U0LSR&0x20)==0 );         	// 等待数据发送
}  




void  ISendBuf3(void)
{ 
   uint8  i;
   uint8  SEND_STRING[8];
  
  
  
     
   SEND_STRING[0]=0X07;
   SEND_STRING[1]=0X03;
   
   
   SEND_STRING[2]=CH1_UV_IDD;
   SEND_STRING[3]=CH1_A_B; 
   SEND_STRING[4]=CH2_UV_IDD;
   SEND_STRING[5]=CH2_A_B;   
   SEND_STRING[6]=OTD_time;
   
   // 校验字节
   check32=0;
   for(i=1;i<7;i++) check32+=SEND_STRING[i];
   SEND_STRING[7]=check32%256;
  
   
   
   
   for(i=0; i<8; i++) SendByte(SEND_STRING[i]); 
   // print uart1
   for(i=0;i<3;i++) UART1_SendByte(0x55);
   for(i=0;i<8;i++) UART1_SendByte(SEND_STRING[i]);
   while( (U0LSR&0x20)==0 );         	// 等待数据发送
}  



*/

uint8 Check()
{


	return 1;
}



void DataRet()
{
	uint8 rcv_length,rcv_type;
	uint8 rcv_start;
	uint8 i;
	
	
	if(0==Check())
	{
	
		UART1_SendByte(0xcc);
		return;
	}
	
	
	
	rcv_length=rcv_buf[0]+1;
	rcv_type=rcv_buf[1];
	
	
	
	
	UART1_SendByte(0xaa);
	UART1_SendByte(0xaa);
	UART1_SendByte(0xaa);
	
	for(i=0;i<rcv_length;i++) UART1_SendByte(rcv_buf[i]);
	
	
	
	
	switch(rcv_type)
    {
    
    	case 0x01:     		    
     	    ISendBuf1(); 
     		rcv_start=2;     		  		    
     		break;
     	case 0x02:
     	    //  开始握手时对02协议回 02 01 01
     		if(rcv_start>0) 
     		{
     		  	ISendBuf1();
     		   	rcv_start--;
     		}     		     
     		//else ISendBuf2();
     		break;
     	case 0x03:
     		//  开始握手时对02协议回 02 01 01
     		if(rcv_start>0) 
     		{
     		  	ISendBuf1();
     		   	rcv_start--;
     		}     		     
     		//else ISendBuf3();
     		break;
     		
     		
     	default:
     	    break;
     	
     	    
     	    
    }
	
	
	
	

}

⌨️ 快捷键说明

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