串口通信学习

串口通信

1.单片机向电脑发送数据

image-20230509134645738

利用STC-ISP中的波特率计算器来初始化串口,AUXR在STC89C52RC中没有,可以删除这两行代码。

其中波特率发生器,定时器时钟一定要选择方框中的选项,波特率4800表示发送的速率。然后将初始化代码模块化。

初始化代码如下
/**
  * @brief  串口初始化,4800bps@11.0592MHz
  * @param  无
  * @retval 无
  */
void UART_Init()
{
	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xFA;			//设置定时初始值
	TH1 = 0xFA;			//设置定时重载值
	ET1 = 0;			//禁止定时器中断
	TR1 = 1;			//定时器1开始计时

}

利用STC-ISP中的波特率计算器来初始化串口,AUXR在STC89C52RC中没有,可以删除这两行代码。

其中波特率发生器,定时器时钟一定要选择方框中的选项,波特率4800表示发送的速率。然后将初始化代码模块化。

发送数据函数
void UART_SendToCom(char Byte)
{
	SBUF=Byte;			//发送数据
	while(TI==0);		//等待发送结束
	TI=0;			//TI复位
}

SBUF就是要发送的8位比特。赋值后自动发送。

main函数,每一秒向电脑发送一个自增的数字(16进制)
#include <REGX52.H>
#include "UART.h"
void Delay(int num)		//@12.000MHz,延迟1ms
{
	unsigned char i, j;
	while(num--){
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}
void main(){
	int sec=0;
	UART_Init();	//串口初始化
	while(1)
	{
		UART_SendToCom(sec);
		sec++;
		Delay(1000);
	}
}

打开串口助手页面,查看收到来自单片机发送的数据

image-20230509135347793

这个串口默认关闭,要打开后才能收到数据。

image-20230509135413561

2.电脑通过串口控制LED

main函数

#include <REGX52.H>
#include "UART.h"

void main(){
	UART_Init();	//串口初始化
	while(1)
	{
		
	}
}
void UART_0() interrupt 4
{
	if(RI==1){
		P2=~SBUF;
		UART_SendToCom(SBUF);
	}
	RI=0;
	
}

UART.c函数,加了2个打开串口中断的代码

 #include <REGX52.H>
/**
  * @brief  串口初始化,4800bps@11.0592MHz
  * @param  无
  * @retval 无
  */
void UART_Init()
{
	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xFA;			//设置定时初始值
	TH1 = 0xFA;			//设置定时重载值
	ET1 = 0;			//禁止定时器中断
	TR1 = 1;			//定时器1开始计时
	EA=1;				//打开串口中断
	ES=1;
	
}
/**
  * @brief  发送数据
  * @param  要发送的一个字节数据
  * @retval 无
  */
void UART_SendToCom(char Byte)
{
	SBUF=Byte;			//发送数据
	while(TI==0);		//等待发送结束
	TI=0;			//TI复位
}

在串口助手页面,向单片机发送0xfe数据,LED灯如下

image-20230509213919698

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值