51单片机学习--串口通信

首先需要配置寄存器:

下面这里SCON配0x40和0x50都可以,因为暂时还不需要接受信息,所以REN置1置0都可

c 复制代码
void Uart_Init(void)		//4800bps@11.0592MHz
{
	PCON |= 0x80;		//使能波特率倍速位SMOD
	SCON = 0x50;		//8位数据,可变波特率
	TMOD &= 0x0F;		//清除定时器1模式位
	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
	TL1 = 0xF4;		//设定定时初值
	TH1 = 0xF4;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
}


在main中调用SendByte函数,每按下一次复位键,接收缓冲区就会收到一个11
这就是单向发送的一个简单实例,接下来实现每隔一秒发送一个递增的数据,只需要添加一个全局变量Sec,再把SendByte放到循环中即可

c 复制代码
#include <REGX52.H>
#include "Delay.h"

unsigned char Sec;

void Uart_Init(void)		//4800bps@11.0592MHz
{
	PCON |= 0x80;		//使能波特率倍速位SMOD
	SCON = 0x50;		//8位数据,可变波特率
	TMOD &= 0x0F;		//清除定时器1模式位
	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
	TL1 = 0xF4;		//设定定时初值
	TH1 = 0xF4;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
}

void Uart_SendByte(unsigned char Byte)
{
	SBUF = Byte; //写入
	while(TI == 0); //直到发送成功,TI变成1,跳出循环
	TI = 0; //复位
}


void main()
{
	Uart_Init();
	while(1)
	{
		Uart_SendByte(Sec);
		Sec ++;
		Delay(1000);
	}
}

最后需要做的是把这个串口模块化,方便以后直接使用
下面实现电脑端向单片机发送数据,单片机需要利用中断来检测是否有数据发送过来,在中断函数里面来进行数据处理,接收功能需要把SCON的REN给置1,所以SCON = 0x50,中断系统需要重新配置

所以ES = 1;
EA = 1;
最后一个优先级开关可以先不管
写在Uart串口控制的初始化函数里
最后还要在main.c写中断函数 函数名后面要跟上interrupt 4代表串口接收/发送中断


在接收到信息之后RI会置1,此时进行处理,结束之后记得手动清零

c 复制代码
#include <REGX52.H>
#include "Delay.h"
#include "Uart.h"

unsigned char Sec;

void main()
{
	Uart_Init();
	while(1)
	{
		
	}
}

void Uart_Routine() interrupt 4
{
	if(RI == 1) //串口接收到数据后会自动将RI置1
	{
		P2 = SBUF; //读取缓冲区
		RI = 0;
	}
}

此时在输入区发送0f,左边全灭右边全亮啦

插入一条提醒:一个函数不能即在主函数中调用又在中断函数中调用!

在中断函数中调用SendByte即可让单片机在读取电脑发来的数据的同时,还能将这个数据Send回来

c 复制代码
void Uart_Routine() interrupt 4
{
	if(RI == 1) //串口接收到数据后会自动将RI置1
	{
		P2 = SBUF; //读取缓冲区
		Uart_SendByte(SBUF);
		RI = 0;
	}
}

最后把串口中断函数放到之前的Uart模块里面,方便以后使用。。

相关推荐
V搜xhliang02461 小时前
AI智能体的数据安全与合规实践
人工智能·学习·数据分析·自动化·ai编程
Mr..Jackey2 小时前
瑞佑 RUI Builder 图形化 UI 设计工具
arm开发·人工智能·单片机·ui·人机交互·ra8889·lcd控制芯片
无敌的牛2 小时前
redis学习过程
数据库·redis·学习
旅僧4 小时前
Π环境部署(运行 且 无理论讲解)
学习
jushi89994 小时前
Lucas Chess R国际象棋、中国象棋、日本将棋、五子棋训练学习工具游戏软件
学习
自传.4 小时前
尚硅谷 Vibe Coding|第一章 AI 编程基础理论 学习笔记
笔记·学习·尚硅谷·vibe coding
西城微科方案开发5 小时前
多品类电子秤一体化PCBA整体方案
单片机·嵌入式硬件·电子秤
吃好睡好便好5 小时前
改变时间轴的跨度
学习·生活
火花页.5 小时前
【正点原子ZYNQ领航者7020】PS端GPIO中断→按键控制LED实验
单片机·嵌入式硬件
ye150127774555 小时前
4.2V升6V1A同步升压WT3213
单片机·嵌入式硬件·其他·硬件工程