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

📄 10_3_2.c

📁 单片机学习的例程.rar 学习单片机要从最基本的学起。对于初学者来说很适合的单片机C程序
💻 C
字号:
//单片机发送和接收字符的程序实例:

#include<reg51.h>
unsigned idata rx[10];
unsigned idata tx[10];
unsigned receive(unsigned addrs);
unsigned send();

main()
{
	TMOD=0x20;				//定时器T1定义为模式2
	TL1=0xE6;TH1=0xE6;		//置初值,12MHz晶振,波特率1200
	PCON=0x00;
	TR1=1;					//启动定时器
	SCON=0xE0;				//串行口方式3,允许接收
	receive(0xF0);			//接收数据
	send();					//发送数据
}

unsigned receive(unsigned addrs)
{
	unsigned i,p;
	while(1)
		{
		while(RI!=1);		//等待PC机的联络信号
		RI=0;
		if (SBUF!=addrs)
			error();		//地址出错,向PC机发出错标记
		else
			{
			TB8=0;			//地址标记位清零,准备接收数据
			SBUF=0x00;		//发地址正确代码
			while(TI!=1);	//等待发送完
			TI=0;
			while(RI!=1);
			RI=0;
				{
				while(1)
					{
					p=0;
					for (i=0;i<10;i++)
						{
						while(RI!=1);
						RI=0;
						rx[i]=SBUF;	 	//接收数据
						p+=rx[i];
						}
					while(RI==0);RI=0;
					if (SBUF==p)
						{
						SBUF=0x00; 		//校验和相同,发0x00给PC机
						while(TI!=1);	//等待发送完
						TI=0;
						}
					else
						error();		//出错
					}
					TB8=1;				//重置地址标准位
					return(0)
				}
			}
		}
}

unsigned send()
{
	unsigned data i,p;
	do
		{
		p=0;					//清校验和
		for (i=0;i<10;i++)
			{
			SBUF=tx[i];			//发送数据
			p+=tx[i];			//计算校验和
			while(TI!=1);
			TI=0;
			}
			SBUF=p;				//发送校验和
			while(TI!=1);
			TI=0;
			while(RI!=1);
			RI=0;
		}
	while(SBUF!=0);				//PC机接收不正确时,重新发送
	TBS=1;						//重置地址标记位
	return(0);
}

void error() 					//出错处理函数
{
	SBUF=0xFF;					//发出错标志给PC机
	while(TI!=1);				//等待发送完
	TI=0;
}

⌨️ 快捷键说明

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