51单片机UART串口通信实现接收PC的字符串

这篇具有很好参考价值的文章主要介绍了51单片机UART串口通信实现接收PC的字符串。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        基本思路是触发串口接收中断之后,在串口中断服务函数中处理接收到的字节并将其连接成字符串存入全局变量中。

隐含的额外工作有:

1.区分是发送中断还是接收中断,两者都会进入同一个中断服务子函数;

2.判断已接收到了句末,暂停接收,并通过标志位告知其他函数。

串口初始化省略,网上到处都是,但基本都是做到串口回声为止,教接收数据的少,所以着重讲如何接收字符串。

uart.h中需要添加的用于存放相关数据的全局结构体:

typedef struct
{
	u8 buff[65];    //用于存放接收到的字符串
	u8 flag;        //接收完成中断标志位
	u8 len;         //用于偏移字符串指针,可以理解为长度,如果buff设得很长,对应这里需要改成u16
}REC;

extern REC UART_rec;//设为全局

uart.c中中断服务子函数:


REC UART_rec={0};              //初始化结构体

void UART(void) interrupt 4
{
	u8 temp=0;
	RI=0;//清除接收中断标志
	temp=SBUF;
	if(temp==0||temp=='\r'||temp=='\n'||UART_rec.len>=65||temp=='{')
	{
	  UART_rec.buff[UART_rec.len]='\0';
	  UART_rec.flag=1;	//数据包接收完成标志
	  UART_rec.len=0; 	//为下一个数据包做准备
	}
	else
	{
	 UART_rec.buff[UART_rec.len++]=temp;
	} 

 其中:

if(temp==0||temp=='\r'||temp=='\n'||UART_rec.len>=65||temp=='{')

可以自定义各自接收完毕的标准,包括常规的回车以外还有到达指定长度结束以及MQTT数据包的封装'{',可以用来丢弃封装的开头节省一些字节之类的;

main.c测试:

void main (void)
{
    UART_Config();        //串口初始化,本文不涉及
    printf("Hello!\r\n");

    while(1)
    {
       if(UART_rec.flag)//若接收完成
        {
         printf("接收到了:%s\r\n",UART_rec.buff);
	     UART_rec.flag=0;     //接收标志位清零,准备接收下一字符串  
        }
    }

}

串口助手现象:

接收ASCII:

51单片机UART串口通信实现接收PC的字符串

 接收中文:

51单片机UART串口通信实现接收PC的字符串

接收带空格的句子(顺便测试了超出长度的情况):

51单片机UART串口通信实现接收PC的字符串

不足:

1.必须要有句末的标志,若不发送\r、\n、\r\n结尾将不会结束接收;

2.某些情况下句末标志为\r\n时将会吞掉下一句的开头第一个字节,比如通过串口发送数据到PC之后的下一次接收不能接收以\r\n结尾的数据。评论区可以讨论一下解决方法,也教教我。

如果是STM32可以通过串口空闲中断来判断接收完毕,更稳妥,不会出现这两个问题

51单片机UART串口通信实现接收PC的字符串文章来源地址https://www.toymoban.com/news/detail-419635.html

到了这里,关于51单片机UART串口通信实现接收PC的字符串的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【单片机】基于STM32的UART串口通信

    简单讲解一下UART通信协议,以及UART能够实现的一些功能,还有有关使用STM32CubeMX来配置芯片的一些操作。实验内容基于 正点原子精英板 开发板,单片机芯片为 STM32F103ZET6 。 在后面我会以我使用的STM32F429开发板来举例讲解(其他STM32系列芯片大多数都可以按照这些步骤来操作

    2024年01月17日
    浏览(58)
  • 51单片机-串口通信

    目录 1.什么是通信 1.1.通信的概念 1.2.传送方式 1.3.同步方式 1.4.传送方向 1.5.校验方式 2.单片机串口介绍 2.1.硬件电路 2.2.电平标准 2.3.常见接口 2.4.内部结构 2.5.相关寄存器 2.6.工作模式(模式1) 2.7.如何配置串口中断 3.实际应用 3.1.单片机向电脑发送数据 3.2.电脑向单片机发送

    2024年02月01日
    浏览(40)
  • 51单片机串口通信

    串口通信(serial communication)是指外设和计算机间通过数据信号线、地线等按位进行传输数据的一种通信方式,属于串行通信方式。 接口标准:常用RS-232和RS-485 RS-232C有一种9针的非标准连接器口,简称DB9。串口通信使用的大多都是DB9接口。在串口通信中,通常我们只使用2、

    2024年02月05日
    浏览(41)
  • 51单片机 | 串口通信实验

      这一节我们就来学习 51 单片机的串口通信。开发板上集成了 1 个串口通信电路,是 USB 转串口模块,它既可下载程序也可实现串口通信功能。本节要实现的功能是: 51 单片机通过串口( UART )实现与 PC 机对话, 51 单片机的串口收到 PC 机发来的数据后原封不动的返回给

    2024年02月04日
    浏览(56)
  • 51单片机学习--串口通信

    首先需要配置寄存器: 下面这里SCON配0x40和0x50都可以,因为暂时还不需要接受信息,所以REN置1置0都可 在main中调用SendByte函数,每按下一次复位键,接收缓冲区就会收到一个11 这就是单向发送的一个简单实例,接下来实现每隔一秒发送一个递增的数据,只需要添加一个全局变

    2024年02月14日
    浏览(38)
  • 51单片机(八)串口通信

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月05日
    浏览(43)
  • 51单片机(串口通信、蓝牙)

    串行接口简称串口,也称 串行通信接口 或串行通讯接口(通常指COM接口),是采用串行通信方 式的扩展接口。串行接口(Serial Interface)是指 数据一位一位地顺序传送。 其特点是通信线路简 单,只要一对传输线就可以实现 双向通信( 可以直接利用电话线作为传输线),从

    2024年02月15日
    浏览(33)
  • 【51单片机】串口通信&&使用串口通信控制LED灯

    🎊专栏【51单片机】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【Promise】 🥰大一同学小吉,欢迎并且感谢大家指出我的问题🥰 目录 🍔串口通信 😎代码   🍔串口初始化 ⭐分析  🏳️‍🌈确定T1的工作方式 🎈TMOD=0X20;  🏳️‍🌈确定T1的初值 🎈

    2024年02月17日
    浏览(37)
  • 【51单片机系列】proteus仿真单片机的串口通信

    本文参考:https://zhuanlan.zhihu.com/p/425809292。 在proteus之外使用串口软件和单片机通信。通过在proteus设计一个单片机接收PC发送的数据,并将接收的数据发送出去,利用软件【Configure Virtual Serial Port Driver】创建一对虚拟串口,利用软件【串口助手】向单片机发送数据。 proteus仿真

    2024年01月17日
    浏览(42)
  • 【PROTEUS-51单片机串口通信仿真】

    本次实验对51单片机的串口进行了双机通信的仿真,实现了51单片机的简单双机通信;现对本次仿真的结构及实现的功能做简要的介绍, 本次仿真主要构成:主机U1-MASTER、从机U2-SLAVE、以及LED显示部分(第一部分显示主机接收到的信息、第二部分显示从机接收到的信号); 实

    2024年01月15日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包