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

📄 rs232.c

📁 it is code for briging up_machtion to down machtion,it s functions act protol changing and comunica
💻 C
字号:

		




#include  "port.h"
#include  "function.h"
#include  "variable.h"
#include "ExHeadFileRs232.h"
void SerialInterruptServe(void) interrupt 4

{
	PageTemp=SFRPAGE;
	
	if (RI0)
	{
		RI0=0;
		Rs232RxData=SBUF0;
		if(RecFlagRs232)
			{
			
				Rs485RxBuffer[Rs232RxWritePointer++]=Rs232RxData;
						
			
			}
		else if(AnalysisFlag)
			{
				AnalyseUpMachineFlag = 0;
		 		RecFlagRs232=0;
		 		LenDataRs232=0;
		 		Local_mvRs232=1;
		 		Rs232RxWritePointer=0;
				return;
			}
		else if(AnalysisFrameStartRs232())
			{
				return;
			}
		//获取帧指令
		if(Rs232RxWritePointer == LocationCommandRs232 )
			{
				Commands=Rs232RxData;
				return;
			}
					
		 //分析数据长度
		if (Rs232RxWritePointer == LocationFrLenRs232)
			{
				LenDataRs232 = Rs232RxData;
				return;
			} 
		//分析帧尾
		if (Rs232RxWritePointer == (LenDataRs232 + LenFrExDataRs232))
			{	
		 		if( Rs232RxData != FrameEndRs232)
					{
						AnalyseUpMachineFlag = 0;
 						RecFlagRs232=0;
 						LenDataRs232=0;
 						Rs232RxWritePointer=0;
						AnalysisFlag=0;
						SFRPAGE=CONFIG_PAGE;
						LampRecUp=0x01;
					}
				else
					{   
 						RecFlagRs232=0;
 						Rs232RxWritePointer=0;
						AnalyseUpMachineFlag = 1;
						AnalysisFlag=0x01;

					}
					
			}
				
	
			
		
	}
	if(TI0 != 0)
  	{	//将485接口置于发送状态
	 	TI0 = 0;
	 	if ((--(Rs232SendLen)) == 0x00)
		{
			Rs232TxSendPointer = 0;
			SFRPAGE=CONFIG_PAGE;
			LampSendUp=0x01;
		}
		else
		{

			SFRPAGE=UART0_PAGE;
			SBUF0 = Rs485RxBuffer[Rs232TxSendPointer++];
		}
	}
	SFRPAGE=PageTemp;
}





char AnalysisFrameStartRs232(void)  	
{
//	RI0 = 0;
//	Rs232RxData = SBUF0;
		//如果程序正在分析上位机指令;
		//或正在向组合模块发送指令;
		//或正在等待组合模块回馈上位机指令
		//时,上位机又来了指令,这时可以抛弃以上三种情况不管,
		//重新接收上位机指令,解析上位机指令,
		//向组合模块发送指令,等待组合模块回馈信息
		//if (Analyse_UpMachine_Flag)
		//	return;
	if (Rs232RxWritePointer>Rs232BuffLen)
	{
 		AnalyseUpMachineFlag = 0;
 		RecFlagRs232=0;
 		LenDataRs232=0;
 		Local_mvRs232=1;
 		Rs232RxWritePointer=0;
 		return 0; 
 	}
	if (!RecFlagRs232)//判断接收标志
	{     
 		if (Rs232RxData != FrameStartRs232)
			{
				return 0;
			}
		else
			{
		  		Rs232RxWritePointer = 0;
				Rs485RxBuffer[Rs232RxWritePointer++]=Rs232RxData;
		  		Local_mvRs232=0x01;//定义帧头出现的位置		
		  		RecFlagRs232=0x01;
				SFRPAGE=CONFIG_PAGE;
				LampRecUp=0x00;
				return 1;
			}
	}
}	


unsigned char Security(unsigned char *buff,unsigned char FrLen,unsigned char LenFrExData)
{  
	unsigned char CrcLen, CrcL, CrcH; //Temp, i;
	unsigned char *Crcbuf;

    Crcbuf = buff + 1;	// 校正的命令单元的起始地址
	CrcLen =( FrLen + LenFrExData-4);	// 命令单元长度
	Crc1021(Crcbuf, CrcLen, &CrcH, &CrcL);
	if ((*(buff+CrcLen +1) == CrcL)&& (*(buff+CrcLen + 2) == CrcH))
		 return 1;
	else 
	   	 return 0;

}

⌨️ 快捷键说明

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