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

📄 点对点通信?.txt

📁 单片机点对点的串口通信(max232) 单片机点对点的串口通信(max232) 单片机点对点的串口通信(max232)
💻 TXT
字号:
#include<reg52.h>
#define uchar unsigned char
#define TR 1		//??
uchar idata buf[10];	//设置接收存储器
uchar pf;		//检验奇偶效验和

void init(void)		//初始化函数
{
	TMOD=20;	//抽口通信初始化
	TH1=0XE8;	//设定定时器1,工作方式2
	TL1=0XE8;
	PCON=0X00;
	TR1=1;		//开定时器1
	SCON=0X50;	//串口工作方式1.SM0=0,SM1=1.REN=1
}

void send(uchar idata *d)	//发送数据函数	
{
	uchar i;
	do			
	{
		SBUF=0xaa;		//发送联络信号
		while(TI==0);TI=0;	//发送结束
		while(RI==0);RI=0;	//等待应答
	}while((SBUF^0Xbb)!=0);		//一直等待,直到应答成功
	do				//发送数据
	{
		pf=0;			//效验和清零
		for(i=0;i<16;i++)	//发送16位数据
		{
			SBUF=d[i];	//发送数据
			pf+=d[i];	//记录效验和
			while(TI==0);TI=0;	//发送一位结束,并清除发送结束标志

		}
		SBUF=pf;	//发送效验和
		while(TI==0);TI=0;	//等待发送结束
		while(TI==0);TI=0;	//等待回应
	}while(SBUF!=0);		//应答出错,重发,直正确回应

}

void receive(uchar idata *d)		//接受数据函数
{
	uchar i;
	do				
	{
		while(RI==0);RI=0;	//判断是否有接收
	}while((SBUF^0XAA)!=0);		//判断是否是接收请求
	SBUF=0XBB;     	 //发送应答	
	while(TI==0);TI=0;	//等待发送结束,并清除标志位
	while(1)		//接受数据
	{
		pf=0;		//效验和清零
		for(i=0;i<16;i++)		//接收16为数据
		{
			while(RI==0);RI=0;	//等待发送结束,清楚标志位
			d[i]=SBUF;		//存储一位数据
			pf+=d[i];		//记录效验和
		}
		while(RI==0);RI=0;		//等待发送效验和结束
		if((SBUF^pf)==0)		//判断效验和与否
		{
			SBUF=0x00;break;	//效验和相同,发回完毕指令
		}
		else
		{
		SBUF=0xff;			
		while(TI==0);TI=0;		//否则发回重发指令,重新接受	
		}
	}
}

void main()
{
	init();				//函数初始化
	if(TR==0)			//发送
	{
		send(buf);
	}
	else				//接收
	{
		receive(buf);
	}
}

⌨️ 快捷键说明

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