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模块里面,方便以后使用。。

相关推荐
wdfk_prog5 分钟前
Python脚本深度解析:实现基于YMODEM的单片机固件自动化升级
python·单片机·自动化
zheshiyangyang10 分钟前
TypeScript学习【一】
javascript·学习·typescript
纳祥科技12 分钟前
分享:一种为蓝牙、WIFI、U段音频发射设备提供ARC回传数字音频桥接功能的方案
网络·单片机·音视频
T1an-12 小时前
Axum web框架【实习】
学习·rust
知识分享小能手2 小时前
React学习教程,从入门到精通, React 新创建组件语法知识点及案例代码(11)
前端·javascript·学习·react.js·架构·前端框架·react
代码总长两年半3 小时前
STM32物联网项目---ESP8266微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制---代码篇(四)
stm32·单片机·物联网
@小红花3 小时前
从0到1学习Vue框架Day03
前端·javascript·vue.js·学习·ecmascript
mysla3 小时前
嵌入式学习day45-硬件—汇编
汇编·学习
咕咚.萌西3 小时前
RISC-V体系架构
嵌入式硬件·架构·risc-v
玉~你还好吗4 小时前
【嵌入式电机控制#进阶10】参数辨识(一):电阻辨识
单片机·嵌入式硬件