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

📄 ser_com.c

📁 51事例原代码 很多很好用 51事例原代码 很多很好用
💻 C
字号:
#define CALL 0x24	//主机呼叫
#define BUSY 0x15	//从机忙
#define OK 0x00		//从机准备好
#define SUCC 0x2A	//接收成功
#define ERR 0xF0	//接收错误
#define MAXLEN 32	//缓冲区最大长度

unsigned char buf[MAXLEN]={"AN"};
unsigned char buf_length=0;


void init_serial(void)
{
	TMOD=0x20;
	TH1=0xFD;
	TL1=0xFD;
	PCON=0x80;
	TR1=1;
	SCON=0x50;
}

void send_data(unsigned char *buf,unsigned char lenth)
{
	unsigned char i;
	unsigned char len;
	unsigned char ecc;
	len=lenth;
	ecc=len;
	/*发送数据长度*/
	TI=0;
	SBUF=len;	//发送长度
	while(!TI);
	TI=0;

	/*发送数据*/
	for(i=0;i<len;i++)
	{
		SBUF=*buf;
		ecc=ecc^(*buf);
		buf++;
		while(!TI);
		TI=0;
	}

	/*发送校验字节*/
	SBUF=ecc;
	while(!TI);
	TI=0;	
}

void send_packet(void)
{
	unsigned char tmp;
	tmp=BUSY;
	while(tmp!=OK)
	{
		/*发送呼叫信号CALL*/
		TI=0;
		SBUF=CALL;
		while(!TI);
		TI=0;

		/*接收从机应答*/

		RI=0;
		while(!RI);
		tmp=SBUF;
		RI=0;
	}

	tmp=ERR;
	while(tmp!=SUCC)
	{
		send_data(buf,buf_length);
		
		RI=0;
		while(!RI);
		tmp=SBUF;
		RI=0;
	}

}

unsigned char recive_data(unsigned char *buf)
{
	unsigned char i;
	unsigned char tmp;
	unsigned char ecc;

	/*接收数据长度字节*/
	RI=0;
	while(!RI);
	buf_length=SBUF;
	RI=0;

	/*使用len的值为校验字节ecc赋初值*/
	ecc=buf_length;

	/*接收数据*/
	for(i=0;i<buf_length;i++)
	{
		while(!RI);
		*buf=SBUF;
		ecc=ecc^(*buf);
		RI=0;
		buf++;
	}

	/*接收校验字节*/

   while(!RI);
   tmp=SBUF;
   RI=0;

   /*进行数据校验*/
   ecc=tmp^ecc;
   if(ecc!=0)				//如果校验错误
   {
   		/*发送校验错误信号ERR*/
   		TI=0;
		SBUF=ERR;
		while(!TI);
		TI=0;
		return 0xFF;		//返回0xFF表示校验错误
	}
    else
	{
		/*发送校验成功信号SUCC*/
		TI=0;
		SBUF=SUCC;
		while(!TI);
		TI=0;
		return 0;			//校验成功,返回0
	}
}

void recive_packet(void)
{
	unsigned char tmp=0;

	/*如果接收到的数据不是CALL,则继续等待*/
	while(tmp!=CALL)
	{
		RI=0;
		while(!RI);
		tmp=SBUF;
		RI=0;
	}
	/*发送OK信号,表示从机可以接收数据*/
	TI=0;
	SBUF=OK;
	while(!TI);
	TI=0;
	/*接收数据*/
	tmp=0xFF;
	while(tmp==0xFF)
		tmp=recive_data(buf);//校验失败返回0xFF,接收成功返回0
	
}

⌨️ 快捷键说明

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