单片机_串口通信详解

  
  楼主在实际的项目开发过程中,特别是用一些比较常见的传感器,使用最多的通信方式可能就是串口通信了,特别是UART(通用异步收发器),线少,虽然传输速度没有并行传输高,但是对我们要求不高的项目中,足够了!足够了!足够了!最重要的是简单!简单!简单!
  


  
理论篇
  

  • 串行通信并行通信

  速度和资源的问题,比如说一个字节八位,如果一位一位通过一根线传输那就是串行通信,但要是八位同时通过八根线一起发,就是并行通信。

  

  • 串行通信三种传送方式

  单工: 数据传输只支持数据在一个方向上传输,应用如监视器、电视机
  半双工:允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信,应用如对讲机,只能一个人讲一个人听,但是两个人都可以讲和听。不能同时进行。
  全双工:允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。应用如打电话,两个人可以同时讲话,同时听到对方的内容。

串行通信两种通信方式

  前面说过,串行通信是通过一根线来接受发送的,问题来了,怎么发送是不是就是一个问题?

  如果我想什么时候发送给你一帧数据(包括由起始位1位数据位8位奇偶校验位1位停止位1位组成),没有约定,也就是一帧数据发送完到下一帧数据中间间隔的时间是不确定的,这种就是异步通信

  图片来自:https://blog.csdn.net/u012160319/article/details/43486995

  注意这里每个字符都是固定的格式,但是中间的空闲位是不确定的。

  但如果,我们规定好1秒钟你就必须发送给我9600位数据,这个时候你也想既然时间都定了,没必要没一帧数据都加一个起始位、奇偶校验位、停止位,就在开始发送一两个同步字符,告诉我开始发了,后面连续按顺序传送数据,没有间隙,知道一块数据发送完成。这就叫同步通信

  图片来自:https://blog.csdn.net/u012160319/article/details/43486995

  注意这里在数据流的开始有规定的1或2个约定的同步字符后数据是连续按顺序的。

  所以同步和异步最重要的区别就是有没有同步时钟。而且同步通信是有一根时钟线的
  异步通信传输是以字节为单位的,但是同步通信传输是以数据块(帧)为单位的
  

  • 常见的串行通信

  这里说一下USART,USART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备。他是和UART兼容的,但是USART是支持同步的,所以如果你想使用其进行同步通信,还要接其时钟线,但是我们实际上都是按照UART用。  //手动滑稽

  

  • 波特率、奇偶校验位、停止位 (摘自百度)
      

  波特率指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数这是一个衡量符号传输速率的参数。如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为240Bd,比特率为10位*240个/秒=2400bps。

  起始位提示接收器数据传输即将开始,即标志传输一个字符的开始。必须是持续一个比特时间的逻辑0(低电平),使数据线处于逻辑0低电平状态,发送器通过发送起始位而开始一个字符传送,接收方可用起始位使自己的接收时钟与发送方的数据同步。
  奇偶校验位在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。
  停止位用于表示单个数据包的最后一位典型的值为1*,1.5和2位*。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

  看到这里,博主突然想到一个问题,不知道大家有没有发现一个问题,就是我们平时使用的串口小助手,当我们用UART时候,我们使用设置了有无就检验,既然没有同步时钟,为啥还要有一个波特率的设置呢?


  看到没,看到没,这里下次给大家说明一下哦!

  


  

实战篇

//这里转自郭天祥单片机的串行口测试程序,使用51单片机的定时器1确定比特率,具体通信方式为UART
//补充一个知识点---串口中断,当单片机接收到一帧数据后,RI会置1,向CPU申请中断,若之前有中断允许,
//则产生了中断,进入中断服务程序。当然,单片机发送完一帧数据,TI也会置1,同样会产生中断!#include "reg52.h"  //定义51单片机特殊功能寄存器#define BAUDRATE     2400  //波特率
#define SYSTEMCLOCK  12000000  //系统时钟频率void uart_sendstring(unsigned char *str);//主函数
void main(void)
{ SCON = 0x50;TMOD |= 0x20;TH1 = 256 - (unsigned int)(SYSTEMCLOCK/BAUDRATE/384+0.5); ES = 1;  //时能串口中断EA = 1;TR1 = 1;  //启动定时器1uart_sendstring("hello,world.\r\n");while(1);
}//通过串口发送字符串
void uart_sendstring(unsigned char *str)
{unsigned char *p;p = str;while(*p != '\0'){SBUF = *p;while(TI == 0);  //等待发送标志位置位TI = 0;p++;}
}
//这部分程序很简单,就是发送一串字符串,可用

皮一下,下篇就介绍为啥 异步通信还要设置波特率?_深入理解同步/异步通信。

图片来自水印,皮

单片机_串口通信知识详解相关推荐

  1. python 快速排序_小白入门知识详解:Python实现快速排序的方法(含实例代码)...

    前言: 今天为大家带来的内容是:小白入门知识详解:Python实现快速排序的方法(含实例代码)希望通过本文的内容能够对各位有所帮助,喜欢的话记得点赞转发收藏不迷路哦!!! 提示: 这篇文章主要介绍了P ...

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

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

  3. 上位机和MYSQL连接_上位机下位机串口通信设计详解

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

  4. 串口及串口通信硬件详解UART,I2C,SPI,USB

    1.计算机与计算机或计算机与终端之间的数据传送串行通讯和并行通讯二种方式 1.1.串行通信 和 并行通信 并行通讯通常可以一次传送8bit.16bit.32bit甚至更高的位数,相应地就需要8根.16 ...

  5. 串口通信原理详解232、422、485

    本文介绍了串口通讯的基本概念.数据格式.通讯方式.典型的串口通讯标准等内容. 串口通讯,RS232,RS485,停止位,奇校验,偶校验 1 串口通讯 串口通讯(Serial Communication ...

  6. MATLAB与51单片机进行串口通信详解

    目录 一.51单片机与电脑进行串口通信 二.MATLAB串口通信函数 三.串口属性 四.示例Demo 4.1 MATLAB接收单片机发来的数据 4.2 MATLAB向单片机发送数据控制LED 五.总结 ...

  7. 网络知识详解之:HTTPS通信原理剖析(对称、非对称加密、数字签名、数字证书)

    网络知识详解之:HTTPS通信原理剖析(对称.非对称加密.数字签名.数字证书) 计算机网络相关知识体系详解 网络知识详解之:TCP连接原理详解 网络知识详解之:HTTP协议基础 网络知识详解之:HTT ...

  8. pclexpress是什么主板_主板知识详解:PCI Express 插槽

    主板知识详解:PCI Express 插槽 PCI-Express 是最新的总线和接口标准,它原来的名称为"3GIO",是由英特尔提出的.很明显,英特尔的意思是,它代表着下一代 I ...

  9. 最全 VxLAN 知识详解

    什么是VXLAN VXLAN(Virtual eXtensible Local Area Network,虚拟扩展局域网),是由IETF定义的NVO3(Network Virtualization o ...

最新文章

  1. showimg.php,layer弹出图片
  2. 给Java程序员的Golang教程
  3. QT学习:字符串类QString
  4. Spring JdbcTemplate配置
  5. EF另一个 SqlParameterCollection 中已包含 SqlParameter。
  6. 开源 数据仓库_使用这些开源工具进行数据仓库
  7. oracle有人用过fra吗,FRA(闪回恢复区)
  8. 【Android开发—智能家居系列】(二):用手机对WIFI模块进行配置
  9. HDU1864 最大报销额【0-1背包】
  10. 手机号 ,邮箱,固定电话js验证,身份证号(正则表达式)
  11. Linux基础之bash shell介绍及基本特性
  12. 将Matplotlib嵌入wxPython的GUI界面中
  13. 短视频解析技术原理,去水印原理分析整理汇总
  14. 【iOS开发】实现App内替换图标
  15. 爬虫免费Charles使用教程
  16. Java使用POI实现多个excel合并成一个excel
  17. 非度量多维标度_用R语言做非度量多维尺度分析(NMDS)
  18. python开发抢票软件_12306抢票软件run python版
  19. 比尔·盖茨持有过的中国股票
  20. 地平线 J2J3了解笔记

热门文章

  1. 主成分分析及PCA函数使用说明
  2. python3.6.2卡住_Python 协程任务卡住不动
  3. 人狼羊菜问题的简单实现
  4. linux下查看目标文件.a中函数符号名称
  5. 相机标定----世界坐标系,相机坐标系,图像坐标系,像素坐标系的转换
  6. 视频回放 | 如何成为一名优秀的地学和生态学领域的国际期刊审稿人?
  7. 杭州法院受理人脸识别第一案!
  8. 分销软件在企业电商中能做什么
  9. 如何校招进BAT做产品经理
  10. 怎么解决自动化用例获取token失败报错