IAP15W413AS工业自动化控制之【15串口收发单个字符】

  • SingleYork
  • LV5工程师
  • |      2017-09-12 09:58:41
  • 浏览量 2596
  • 回复:7
本帖最后由 SingleYork 于 2017-9-16 16:44 编辑 bg1.png

这一讲笔者主要跟大家分享一下,如果通过单片机的UART口接口一个字符和发送一个字符。其实串口通信在我们的工业应用中是非常普遍的了,那么,如何利用好串口收发指定的数据来控制我们想要实现的功能呢?笔者通过一个简单的例子来进行分析。

本例主要是利用串口1的中断方式来进行数据收发,PC端用串口助手发送一个字符A,单片机接收并返回字符A。代码其实很简单,我们先来看下一下完整的串口收发部分的代码吧:

首先看串口中断接收部分:在中断函数里,每次有数据来的时候,将接收到的数据存到一个变量ReciveData里面,同时将一个标志位置1,便于后面发送部分判断收发可以发送数据了。

发送部分是自定义了一个发送函数,当接收数据标志位Uart1RXFinish为1的时候,说明收到了数据,这个时候发送忙标志TX_Busy为0,说明发送空闲,即可将数据发送出去,同时清除接收完成标志位Uart1RXFinish。

代码很简单就不做太多赘述,下面我们来看下实验效果,将程序下载到控制板,然后打开串口助手,发送一个字符A,可以看到,在接收部分也显示收到了一个字符A,说明实验是OK的:

再发送一个字符B,同样可以看到,串口接收部分接收到了一个字符B:

当然,我们还可以将本例进一步延伸,做一些简单的控制,比如:单片机收到字符A,让OUT00输出ON,单片机接收到字符B,然OUT00输出OFF。下面我们来看一下代码:

我们通过两个if语句,就能实现我们想要的功能,在if条件在中,当接收到的数据为字符A时(if(ReciveData=='A')),让OUT00输出ON,即:OUT00 = ON;当接收到的数据为字符B时(if(ReciveData=='B')),让OUT00输出OFF,即:OUT00 = OFF;我们可以将修改后的代码下载到控制板中,来看实验现象。

通过串口助手发送字符A时,我们可以看到Y00指示灯亮了,说明OUT00输出ON:

通过串口助手发送字符B时,我们可以看到Y00指示灯灭了,说明OUT00输出OFF。

原理很简单,代码部分也很简单,这里需要注意的是,单片机串口收发时只能是按字节来收发,一个字符占一个字节,如果发送多个字符时,SUBF里面接收到的新的数据会把旧的数据覆盖掉。同时,需要注意的是,单个字符是用单引号(' '),字符串是用双引号(" ")。多字节通信,笔者将在下一讲跟大家分享。

源代码如下:

  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:1
7943603 2017-09-12
牛!牛!
0   回复
举报
发布
SingleYork 回复 2017-09-12
:handshake感谢支持……
0   回复
举报
瞎折腾 回复 2017-09-12
多更新点啊
0   回复
举报
mr_liu 回复 2017-09-12
赞~
0   回复
举报
x
收藏成功!点击 我的收藏 查看收藏的全部帖子