2020-11-19

博主作为新手,参考大佬代码后,分享自己所写的51单片机串口通信代码,包括发送与接收部分,后续还会在文章中继续更新内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

51单片机 串口通讯

本人新手,之前看了好多大佬的代码,写的串口,在此分享自己写的代码,望各位大佬多多指教

看完 这位大佬的 代码后写的 51单片机串口通信的发送与接收(转)

之后我会在此文章继续更新

/*
	2020年11月19日10:37:04
	
	功能:
		串口方式1 波特率 9600 @11.0592
		采用中断方式
		
		接收一个字符或者发送一个字符
		
		可以在此基础上 传输字符串
		
		接收字符 或者 发送 字符两不误
*/
#include <reg52.h>

void init();

char rec_buff = '\0'; //接收缓存
char sen_buff = '\0'; //发送缓存

void main()
{
	
	init();
	
	sen_buff = 'k'; //上电 发送一个 k
	SBUF = sen_buff;
	//sen_buff = '\0'; //发送内容 清空 写在中断里面了 也可以不再中断清空 操作完后再清空
	
	
	while(1)
	{
		sen_buff = rec_buff; //不断检测 当接收中断之后 rec_buff 将不再是'\0' 进入下面的控制中
		
		if(sen_buff)
		{
			switch(sen_buff)
			{
				case '1':
					P1 = 0xFE;
					break;
				case '2':
					P1 = 0xFC;
					break;
				case '3':
					P1 = 0xF8;
					break;
			}
			
			SBUF = '@'; //接收到之后返回一个@ 可自行修改
			//sen_buff = '\0';
			rec_buff = '\0'; //防止不断发送 , 发送之后清空接收到的内容 如果想保留可以 在整个变量
		}
		
		/*
		if(sen_buff != '\0')
		{
			
			SBUF = sen_buff;
			sen_buff = '\0';
			rec_buff = '\0';
		}
		*/
		
	}
}
void init()
{
	//设置 定时器 TMOD
	TMOD = 0x20;
	TH1 = 0xFD;
	TL1  = 0xFD;
	
	//设置SCON
	SM0 = 0;
	SM1 = 1;
	SM2 = 1; //串口方式1 当确实收到 停止位 REN才置1
	
	//设置中断 IE
	EA = 1;
	ES = 1;
	
	//开启定时器 允许接收数据 TMOD SCON
	TR1 = 1;
	REN = 1;
}

void ser() interrupt 4 //串行口中断
{
	// 判断是 接收还是发送引起的中断
	if(RI == 1)
	{
		RI = 0;
		rec_buff = SBUF; //将接收到的数据保存在 rec_buff中
	}
	if(TI == 1)
	{
		TI = 0;
		sen_buff = '\0'; //将发送的数据清空
	}
	
}





 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值