目录

串口介绍

硬件电路

电平标准

常见通讯接口比较

51单片机的UART

串口参数及时序图

串口通信流程图

串口相关寄存器

波特率的计算方法

中断模式以及寄存器的配置

数据显示模式

代码示例(串口与电脑互发数据)


串口介绍

串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。

单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大的扩展了单片机的应用范围,增强了单片机系统的硬件实力。

51单片机内部自带UART(Universal Asynchronous Receiver Transmitter,通用异步收发器),可实现单片机的串口通信。

硬件电路

简单双向串口通信有两根通信线(发送端TXD和接收端RXD)

TXD与RXD要交叉连接

当只需单向的数据传输时,可以直接一根通信线

当电平标准不一致时,需要加电平转换芯片

下图是以前的投影仪的插口线脚分布图,可以看的也用了TXD来发送数据,RXD来接受数据

电平标准

电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:

TTL电平:+5V表示1,0V表示0

RS232电平:-3~-15V表示1,+3~+15V表示0

RS485电平:两线压差+2~+6V表示1,-2~-6V表示0(差分信号)

注意这里单片机用的是TTL电平,而计算机用的是RS232电平,所以在单片机与电脑进行串口通信的时候要加电平转换芯片

常见通讯接口比较

全双工:通信双方可以在同一时刻互相传输数据

半双工:通信双方可以互相传输数据,但必须分时复用一根数据线

单工:通信只能有一方发送到另一方,不能反向传输

异步:通信双方各自约定通信速率

同步:通信双方靠一根时钟线来约定通信速率

总线:连接各个设备的数据传输线路(类似于一条马路,把路边各住户连接起来,使住户可以相互交流)

51单片机的UART

串口参数及时序图

波特率:串口通信的速率(发送和接收各数据位的间隔时间)

检验位:用于数据验证(九位数据模式时的最后一位,RB8/TB8)

停止位:用于数据帧间隔

检验位:常用的有奇校验,偶校验。通常来判断发送的数据的正确性,是否有丢帧的情况

以偶校验举例说明

发送一段数据 0000 0011 1 这里最后一位1表示前面8位数据有偶数个1

0000 0001 0 这里最后一位0表示前面8位数据有奇数个1

但是如果说发送 0000 0011 1 接收到的是0000 0101 1,可以发现偶校验正确,这也就是奇偶校验的弊端,即不能判断出每一位的数据是否发生改变,只能判断1的位数是否为偶数,所以说在一定程度上是有检验作用的,但是不是非常精确。

串口通信流程图

看串口模式图我们软件在进行编程的时候要注意:

SUBF(数据缓存器),TI(数据发送标志位),RI(数据接受标志位)的配置要求

以及T1溢出率的配置(TH1,TL1初值),SMOD置0时为正常波特率,置1时波特率加倍

将数据写入SBUF时,就进行发送,我们这里不管是如何一位一位的发送的,只将数据写入SUBF中即可。

串口相关寄存器

这里还是为了尽可能的全面,所以在手册截的图。

补充说明一下,波特率的计算方法:

在图上的寄存器SCON的配置中也可以看出来。1,是看SMOD的配置为1那么波特率加倍。2,其次是定时器1的溢出率,计算方法是周期的倒数。

下面举波特率为4800的计算方法(也是我们下面的代码里面的定时器1配置的)

设T=13us,定时器1的溢出率=1/T=0.0769230769230769,为使定时器误差小,这里的SMOD的配置为1,所以最后,波特率=(1/T)x(1/16)x1000000=4,807.692307692308 约等于4800

中断模式以及寄存器的配置

串口中断位要打开,而定时器1的中断就不用开了(溢出后不用进行中断执行其他操作,计时器只是提供稳定的波特率)

(下图有个小错误:上面的为定时器0,下面的是定时器1)

这里有个小错误:上面的为定时器0,下面的是定时器1

数据显示模式

以官方STC的烧写软件为例:

HEX模式/十六进制模式/二进制模式:以原始数据的形式显示

文本模式/字符模式:以原始数据编码后的形式显示(即ASCLL代码编译以后)

代码示例(串口与电脑互发数据)

主函数:

#include <REGX52.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;                //读取SBUF数据,取反后输出到LEDUART_SendByte(SBUF);//将受到的数据发回串口(实现单片机向电脑发送数据)RI=0;                   //按照手册RI需要手动置0}
}

SUBF输入函数:

#include <REGX52.H>void UART_Init()
{SCON = 0x50;    //工作方式1,其中的REN为1,允许接收PCON |= 0x80;   //为了减少误差波特率加倍TMOD &= 0x0F;       //设置定时器1模式TMOD |= 0x20;        //设置定时器1模式TL1 = 0xF3;        //设定定时初值TH1 = 0xF3;        //设定定时器重装值ET1 = 0;           //禁止定时器1中断TR1 = 1;         //启动定时器1ES=1;           //设置接收发送中断EA=1;}void UART_SendByte(unsigned char Byte)
{SBUF=Byte;   //将SBUF数据赋值while(TI==0);//if(TI==1) {TI=0;}在停止位后硬件自动将TI置1,按照手册,这里要手动置0TI=0;
}

STC89C52单片机串口通信以及代码演示相关推荐

  1. STC89C52单片机 串口通信

    串口初始化 void UARTInit() {EA = 1; //打开总中断ES = 1; //打开串口中断SM0 = 0; SM1 = 1;//串口工作方式1,8位UART波特率可变REN = 1; ...

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

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

  3. 51单片机串口通信发送以及接收代码详解1

    #include <reg51.h> //实验现象:单片接收电脑发送的字符串,并发回给PC端的代码.//函数声明 void uart_init(void); void uart_seng_ ...

  4. 51单片机串口通信发送以及接收代码详解2

    #include <reg51.h> //实验现象:在电脑端没按下发送的时候,单片一直给电脑发送aaa字符串: //实验现象:在电脑端按下发送的时候,结束字符串aaa的发送代码,执行单片接 ...

  5. 51单片机~串口通信(讲解+代码)

    51单片机~串口通信 (一)计算机串行通信原理: 综上:所以在设置的时候,经常将SCON设置为0X50==0101 0000 ,使用方式1. (二)工作: 中断控制 led灯,每发送一条指令灯亮或灭( ...

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

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

  7. 51单片机串口通信模板_深入理解51单片机串口通信及通信实例

    串口通信的原理 串口通信(SerialCommunications)的概念非常简单,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一 ...

  8. 51单片机-串口通信

    目录 1.什么是通信 1.1.通信的概念 1.2.传送方式 1.3.同步方式 1.4.传送方向 1.5.校验方式 2.单片机串口介绍 2.1.硬件电路 2.2.电平标准 2.3.常见接口 2.4.内部 ...

  9. 蓝桥杯单片机串口通信学习提升笔记

    今日得以继续蓝桥杯国赛备赛之旅: 有道是 "不知何事萦怀抱,醒也无聊,醉也无聊,梦也何曾到谢桥." 那我们该如何 让这位诗人纳兰 "再听乐府曲 ,畅解相思苦"呢 ...

最新文章

  1. 你了解如何用GAN做语义分割吗
  2. 解密!谷歌这样搞定美军世纪难题,从眼科诊断到无人驾驶
  3. The request failed with HTTP status 401:Access Denied
  4. ping发送超大数据包(高级用法)
  5. 深度学习过拟合解决方案
  6. P5659-[CSP-S2019]树上的数【贪心】
  7. (王道408考研数据结构)第三章栈和队列-第二节:队列基本概念、顺序栈和链栈基本操作
  8. c语言提示错误信息,【资料】C语言错误信息中文解释
  9. sqlserver varchar 对于 sum 运算符无效_在sqlserver上实现自定义函数四舍六入五成双...
  10. Linux系统中用DNW向ARM开发板下载程序
  11. 安装freetds小记
  12. 尚硅谷大数据Flink从入门到实战(2020最新版)
  13. c语言opengles程序,OpenGL教程 OpenGL编程指南
  14. ASIO音频驱动开发指南
  15. 计算机显示不出桌面上的文件夹,为什么电脑桌面上的EXCEL文件不显示EXCEL图标...
  16. Python定时执行程序(schedule)
  17. 《网蜂A8实战演练》——11.Linux 电容式触摸屏驱动
  18. 趣图:程序员的鄙视链/图
  19. 2019-04-28 21:43:41.098 ERROR 2920 --- [nio-8888-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] :
  20. AutoMagic使用说明

热门文章

  1. Spring mvc 的生命周期
  2. 【一看就懂】tf.logical_and(),tf.logical_or(),tf.logical_not(),tf.logical_xor()
  3. mapbox初步使用
  4. 有效的预防电脑辐射的方法
  5. 前端性能优化 —— 前端性能分析
  6. obj文件、mtl文件结构说明
  7. TypeScript 类型声明书写踩坑全解析
  8. nginx【30】listen指令的用法
  9. 宝德服务器硬盘报警,宝德服务器基础培训.ppt
  10. 硬盘串口和并口的区别