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

📄 coma.c

📁 TL16C554串口扩展芯片的四个串口通信程序
💻 C
字号:

//comA.c

#include "head.h" 

extern uint baud;
extern uchar COM_BUFFER[1024]; 
extern uchar Command; 
extern uchar Function;
extern uchar Key_Flag;
extern uchar Key_Value;
extern uchar Vol_Flag;
extern uchar Vol_Value;
extern uchar Data_Flag;
extern uint  Data_Len; 

extern uchar CheckSum_ComA(uchar *p_data,uchar len); 

void comA_send_string(uchar *p_data,uint len)
{  
	uint i,j;
     	uint n,k;
     	uchar status_lsr;
        
    	CSA = 0;
        if(len>16)
        {      
        	n=len/16;
        	k=len%16;
        	for(i=0;i<n;i++)
        	{
        		for(j=0;j<16;j++)
        		{
        		  	  TL16C554_A_THR=*(p_data+16*i+j);       		  	         		  	  
        		}
        		while((((status_lsr=TL16C554_A_LSR)&0x20)==0)&&
        		      (((status_lsr=TL16C554_A_LSR)&0x10)==0));
        	}
         	for(i=0;i<k;i++)
         	{
			TL16C554_A_THR=*(p_data+16*n+i);
		}         	
        }
        else
        {
         	for(i=0;i<len;i++)
         	{
			TL16C554_A_THR=*(p_data+i);
		}       	
        }
        CSA = 1;
}

interrupt [EXT_INT4] void ext_int4_isr(void)
{
	uchar data; 
	uchar status_a_iir; 
	uchar status_a_lsr;
	uchar status_a_msr;	
	uint i;
	uint len;
	uint comA_t1=0;
	uint comA_t2=0; 
	static uint ComA_Cnt=0;
	static uchar ComA_Buf[64]; 
	
	CSA=0;
	status_a_iir = TL16C554_A_IIR;
	status_a_msr = TL16C554_A_MSR;
	status_a_lsr = TL16C554_A_LSR;		
	data = TL16C554_A_RBR; 
	if((ComA_Cnt == 0)&&(data == 0xA5))
	{      
		ComA_Cnt = 1;
		ComA_Buf[0] = 0xA5;
	}
	else if(ComA_Cnt > 0)
	{ 
		ComA_Cnt++;
		ComA_Buf[ComA_Cnt-1] = data;
		if((ComA_Buf[0]==0xA5)&&(ComA_Cnt==6)&&((ComA_Buf[1]==0xB1)||
		(ComA_Buf[1]==0xB3)||(ComA_Buf[1]==0xB5)||(ComA_Buf[1]==0xBC)||
		(ComA_Buf[1]==0xBD)||(ComA_Buf[1]==0xBE)||(ComA_Buf[1]==0xC3)))
		{
  			if(CheckSum_ComA(ComA_Buf,5)==ComA_Buf[5])
   			{  
   				Key_Flag = 1;
   				Command = ComA_Buf[1];
   				Key_Value = ComA_Buf[4];	
   			}
   			ComA_Cnt = 0;
		}
		else if((ComA_Buf[0]==0xA5)&&(ComA_Cnt==7)&&(ComA_Buf[1]==0xB8))
		{
			if(CheckSum_ComA(ComA_Buf,6)==ComA_Buf[6])
			{
   				Vol_Flag = 1;
  			 	Vol_Sel = ComA_Buf[4]; 
   				Vol_Value = ComA_Buf[5];
			}
			ComA_Cnt = 0;
		}
		else if((ComA_Buf[0]==0xA5)&&(ComA_Cnt==10)&&
			((ComA_Buf[1]==0xB9)||(ComA_Buf[1]==0xBA)))
		{
			if(CheckSum_ComA(ComA_Buf,9)==ComA_Buf[9])
			{
				Data_Flag = 1;
				Data_Len = 4;
   				Command = ComA_Buf[1];
   				for(i=0;i<4;i++)
   					COM_BUFFER[i]=ComA_Buf[i+5];
			}
			ComA_Cnt = 0;			
		}
		else if((ComA_Buf[0]==0xA5)&&(ComA_Cnt==(ComA_Buf[2]*256+ComA_Buf[3]+5))&&
		       ((ComA_Buf[1]==0xB2)||(ComA_Buf[1]==0xB7)||(ComA_Buf[1]==0xC2)||
		        (ComA_Buf[1]==0xC4)))
		{
			len = ComA_Buf[2]*256+ComA_Buf[3];
			if(CheckSum_ComA(ComA_Buf,len+4)==ComA_Buf[ComA_Cnt-1])
			{			      	      			      	  	
				Data_Flag = 1;
				Data_Len = len;
   				Command = ComA_Buf[1];
   				for(i=0;i<len;i++)
   					COM_BUFFER[i]=ComA_Buf[i+4];			      	  		
			}
			ComA_Cnt = 0;			 	
		}	
		else if((ComA_Buf[0]==0xA5)&&(ComA_Cnt==(ComA_Buf[2]*256+ComA_Buf[3]+6))&&
		       ((ComA_Buf[1]==0xB4)||(ComA_Buf[1]==0xB6)))
		{
			len = ComA_Buf[2]*256+ComA_Buf[3];
			if(CheckSum_ComA(ComA_Buf,len+5)==ComA_Buf[ComA_Cnt-1])
			{			      	      			      	  	
				Data_Flag = 1;
				Data_Len = len; 			      		
   				Command = ComA_Buf[1];
   				Function = ComA_Buf[4];
   				for(i=0;i<len;i++)
   					COM_BUFFER[i]=ComA_Buf[i+5];				      	  		
			}
			ComA_Cnt = 0;			 	
		}
		else
		{
			for (comA_t1=1;comA_t1<ComA_Cnt;comA_t1++)
			{
				if(ComA_Buf[comA_t1]==0xA5)
				{
					ComA_Cnt=ComA_Cnt-comA_t1;
					for(comA_t2=0;comA_t2<ComA_Cnt;comA_t2++)
					{
						ComA_Buf[comA_t2]=ComA_Buf[comA_t1+comA_t2];
					}
					break;
				}
			 }
			 if(ComA_Cnt==64)
			 ComA_Cnt=0;			
		}			
	}
	CSA=1;
	EIFR |= 0x10;	
}


⌨️ 快捷键说明

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