首先请大家认真看下预备知识:_
(耐心一点)
51单片机的串口通信,是全双工的,就是可以同时收/发的,互相不影响的。
串口是可以同时收/发的,虽然都是用SBUF,但却是两个独立的寄存器,互不影响,只是都叫一个名,SBUF。
但是,对于接收或发送,确实是接收到一个字节以后才能接收下一个,不可能同时接收几个。对于送,也是同样的,发送一个字节数据后,要等发送完成了,才能再发下一个。
接收和发送,可先定义一两个变量,如,接收用rec变量保存,发送数据在send变量中。
发送时,SBUF=send;while(TI==0);TI=0;//这是用查询方式发送的。当一个字节的数据发送完成后,就会自动置TI=1,所以,可以查询TI=1时,就说明是发送结束了。如果是允许中断,就是会产生中断,判断TI=1,就是发送中断,要用指令清0,就是TI=0;
接收时, 当收到一个数据后,也会自己置RI=1,通常,接收都是中断方式,所以, 当RI=1, 就会产生中断。而响应中断,执行中断程序,就要用指令清0,即中断中判断是RI=1,说明是接收中断,RI=0; 清除RI。
接 收数据:rec=SBUF; 就行了。如果是接收一组数据,可以定义一个数组,用数组保存接收一组数据就行了。
SBUF中不能存放数据,收到后必须立即读取,否则,下一个数据到了就被替代了。RI和TI置1,是硬件自动的,就是这么设计的,想改也改不了的。
多个字节发送和接收,可以用循环控制次数。
下面附上代码:(具体原理不再讲述可以自己搜一下学一学)

/**************************************************************************************
*                     串口通信实验                                                  *
实现现象:下载程序后打开串口调试助手,将波特率设置为4800,选择发送的数据就可以显示在串口助手上。
注意事项:无。
***************************************************************************************/#include "reg52.h"             //此文件中定义了单片机的一些特殊功能寄存器typedef unsigned int u16;      //对数据类型进行声明定义
typedef unsigned char u8;/*******************************************************************************
* 函数名         :UsartInit()
* 函数功能         :设置串口
* 输入           : 无
* 输出             : 无
*******************************************************************************/
void UsartInit()
{SCON=0X50;            //设置为工作方式1TMOD=0X20;           //设置计数器工作方式2PCON=0X80;         //波特率加倍TH1=0XF3;               //计数器初始值设置,注意波特率是9600的TL1=0XF3;ES=1;                       //打开接收中断EA=1;                      //打开总中断TR1=1;                  //打开计数器
}/*******************************************************************************
* 函 数 名       : main
* 函数功能       : 主函数
* 输    入       : 无
* 输    出         : 无
*******************************************************************************/
void main()
{   UsartInit();  //    串口初始化while(1);
}/*******************************************************************************
* 函数名         : Usart() interrupt 4
* 函数功能        : 串口通信中断函数
* 输入           : 无
* 输出             : 无
*******************************************************************************/
void Usart() interrupt 4
{u8 receiveData;receiveData=SBUF;//出去接收到的数据RI = 0;//清除接收中断标志位SBUF=receiveData;//将接收到的数据放入到发送寄存器while(!TI);            //等待发送数据完成TI=0;                        //清除发送完成标志位
}

我的单片机是STC90C516RD+属于51系列的,我的晶振频率是11.899MHZ。
对于初值的计算机可以使用如下软件:

其中注意:(1)计算初值时,波特率是加倍之前(对于SMOD=1时这种情况)的波特率。
(2)软件是51波特率初值计算,还有一个是定时器初值计算,不要下载错误
下面就是烧录程序了,连接好USB线,打开串口助手软件,设置波特率4800
如下图:

枣红色框框里面是波特率设置的地方,波特率为4800,绿色框框和红色框框(挨着绿色的那个)是模式的设置,文本模式如图,hex模式则是数字(16进制的)。

stc51单片机串口通信程序相关推荐

  1. ws2812b程序51单片机_51单片机串口通信程序详解

    串口通信简介 串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件.一般完成这种功能的电路,我们称为串行接口电路 ...

  2. STC15F2K60S2单片机的串口通信程序及相关知识

    一.STC15F2K60S2单片机简介 中国深圳宏晶STC系列单片机是2005年推出中国本土的第一款具有全球竞争力的,且与MCS-51兼容的STC系列单片机.它完全兼容51单片机,是新一代增强型单片机 ...

  3. 51单片机串口通信原理、相关寄存器配置与简单串口收发程序代码

    目录 1. 串口通信原理 2. 51单片机串口通信 2.1 串口简要模式图 2.2 相关寄存器 (1)PCON.SCON.SBUF (2)IE.IPH.IP (3)配置T1定时器 2.3 波特率和系统 ...

  4. 51单片机C语言波特率十六进制,理解51单片机串口通信的波特率与USB转串口通信...

    RS232 在我们电脑上,一般都会有一个9针的串行接口,这个串行接口叫做RS232接口,它和UART通信有关联,但是由于现在笔记本电脑不带9针串口,所以和单片机通信越来越趋于使用USB虚拟串口. 九针 ...

  5. qt linux 串口eventdriven,详解 Qt 串口通信程序全程图文 (1)

    Qt 串口通信程序全程图文 是本文介绍的内容,在Qt中并没有特定的串口控制类,现在大部分人使用的是第三方写的qextserialport类,我们这里也是使用的该类.我们可以去 http://sourc ...

  6. 详解 Qt 串口通信程序全程图文 (3)

    Qt 串口通信程序全程图文是本文要介绍的内容,下面的程序在第一部分中所写的程序上进行了一些改进.加入打开和关闭串口,发送数据等功能. 1.加入了"打开串口","关闭串口& ...

  7. 详解 Qt 串口通信程序全程图文 (1)

    Qt 串口通信程序全程图文 是本文介绍的内容,在Qt中并没有特定的串口控制类,现在大部分人使用的是第三方写的qextserialport类,我们这里也是使用的该类.我们可以去 http://sourc ...

  8. QT中串口通信程序(转)

    (说明:我们的编程环境是windows xp下,在Qt Creator中进行,如果在Linux下或直接用源码编写,程序稍有不同,请自己改动.) 在Qt中并没有特定的串口控制类,现在大部分人使用的是第三 ...

  9. 【转】Qt编写串口通信程序全程图文讲解

    Qt编写串口通信程序全程图文讲解 本文章原创于www.yafeilinux.com 转载请注明出处. (说明:我们的编程环境是windows xp下,在Qt Creator中进行,如果在Linux下或 ...

  10. 基于PC与单片机串口通信的温度监控系统程序设计

    基于PC与单片机串口通信的温度监控系统程序设计 1.系统介绍 1)本系统主要讲解基于PC与单片机串口通信的温度监控系统程序设计(如图1),上位机采用常用的PC机,下位机使用的是STC89C52单片机, ...

最新文章

  1. 提交响应后无法调用sendredirect_微服务的那些事(三),微服务的远程调用方式。RPC和HTTP...
  2. 数据库死锁及解决方法
  3. mysql 连接串 utf8_mysql 连接url中useUnicode=truecharacterEncoding=UTF-8 的作用
  4. 诸神战纪2java_诸神战纪2死神归来
  5. 堆/栈/动态存储方式/静态存储方式
  6. 我所理解的设计模式(C++实现)——策略模式(Strategy Pattern)
  7. 2019 ICPC Asia Nanchang Regional K.Tree 树上启发式合并 + 动态开点线段树
  8. RuoYi-Cloud 部署篇_01(windows环境 mysql +nginx版本)
  9. c语言编程 通讯录排序,C语言实现一个通讯录
  10. JAVA各种加密与解密方式(精挑版)
  11. 软件测试证书(1)— 软件评测师
  12. 网易云短信接口(验证码类短信||通知类短信)
  13. matlab计算海洋浮力频率_海洋要素计算:潮汐调和分析
  14. 计算机开机后桌面放大,开机后桌面图标变大 桌面图标变大了怎么处理?
  15. python爬房源信息_Python:爬取airbnb房源信息(Selenium)
  16. denoted(denoted by)
  17. 旧机还在换盆?! Linux deploy让她再发光!
  18. 推荐 8 个高质量的公众号
  19. openstack的部署与云主机实例
  20. 为什么说 HashMap 是无序的

热门文章

  1. 浅谈C#tabcontrol应用
  2. java面试填空题 jsp_JSP面试题及答案
  3. C语言调用外部API实现车牌识别
  4. 理解Alpha-Beta 剪枝算法
  5. P问题、NP问题、NPC问题、NPH问题详解
  6. C语言实现蔡勒公式求周几
  7. 01-unity下载与安装
  8. 第一章 C语言郝斌笔记
  9. pdf如何去除保护限制,pdf复制打印限制怎么解除?
  10. MacBook M1 虚拟机安装Windows7 Xp