51单片机之串口通信 ---- 自学笔记_旭日初扬的博客-程序员秘密

技术标签: 单片机  

一、串口通信

1.1、计算机通信的基础

计算机通信:是将计算机技术与通信技术相结合,完成计算机与外部设备或计算机与计算机之间的信息交换,可分为两大类:并行通信与串行通信。

  1.  多微机系统的广泛应用与计算机网络技术的普及。
  2.  计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。
  3. 通信有两种方式:并行通信、串行通信
  4. 在多微机系统以及现代测控系统中信息的交换多采用串行通信。

1.2、并行通信

将数据字节的各位用多条数据线同时进行传送。同时传送8个字节(下图  )

串行通信控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收困难。

1.3、串行通信

将数据字节分成一位一位的形式存,在一条传输线逐个传输

特点:传输线少,长距离传送时成本低,且可以利用电话线等现成设备,但数据的传输控制比并行通信复杂。

先传输低位,在传输高位

串行通信可分为同步通信和异步通信

1.3.1、同步通信

同步通信时要建立发送方时钟对接收方时钟的直接控制(两个时钟完全同步),使双方达到完全同步,此时,传输数据的为之间的距离均为“为间隔”的整数倍,同时传送的字符间不留间歇,即保持同步关系,也保持字符同步关系,发送方对接收方的同步可以通过两种方法实现。

 

1.3.2、异步通信

异步通信是指通信的发送和接收设备使用各自的时钟(即:两个设备的时钟是相互独立的)控制数据的发送和接收的过程,为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。

异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间歇是任意的,但每个字符中的各位是以固定的时间传送的,即字符之间不一定有“位间隔”的整数倍的关系,但同一个字符内的各位之间的距离均为“位间隔”整数倍。

异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个字符都要附加2~3位用于起止位,各帧之间

还有间隔,因此传输效率不高。

1.3.3、串行通信的传输方向

单工:数据传输仅沿一个方向,不能实现反向传输。

半双工:数据传输可以沿两个方向,但需分时进行。

全双工:数据可以同时进行双向传输。

1.3.4串行通信中常见的错误校验

奇偶校验

  • 发送数据时,数据为尾随1位奇偶检验位(0或1)。
  • 奇校验时,数据中“1”的个数与校验位“1”的个数之和应为奇数。

  • 偶校验时,数据中“1”的个数与检验位“1”的个数之和应为偶数。

  • 接收字符时,对“1”的个数进行检验,若发现不一致,则说明传输数据过程中出现了差错。

代码和校验

  • 发送将所发数据块求和(或个字节异或),产生一个字节的校验字节(校验和)附加到数据块末尾,
  • 接收方接收数据同时对数据块(除校验字节外)求和(或个字节异或),
  • 将所得的结果与发送方的"检验和"进行比较,相符则无差错,否则即认为传送过程中出现了差错。

循环冗余校验

通过某种数学运算实现有效信息与校验位之间的循环校验,常用与对磁盘信息的传输、存储区的完整性校验。

这种检验方法纠错能力强,广泛应用于同步通信中。

1.3.5、传输速率

  • 比特率(也叫波特率)每秒钟传输二进制代码的位数
  • 单位:位/秒(bps)
  • 例子:每秒传输240个字符,每个字符包含10位(一个起始位、一个停止位、八个数据位),这时的比特率为:
  • 10位  X  240个/秒  = 2400 bps

1.3.6、传输距离与传输速率的关系

  • 串行接口或终端直接传送串行信息位流的最大距离与传输速率及传输线的电气特性有关,
  • 当传输线每使用0.3M(约为1英尺)有50PF电容的非平衡屏蔽双绞线时,传输距离随传输速率的增大而减小。
  • 当比特率超过1000bps时,最大传输距离迅速下降,如9600bps时最大距离下降到只有76M(约为250英尺)

1.4、串行通信的接口标准

1.4.1、RS-232C接口

  EIA(美国电子工业协会)1969年修订RS -232C标准。

RS-232C定义了数据终端设备(DTE) 与数据通信设备(DCE)之间的物理接口标准。

机械特性:RS-232C接口规定使用25针连接器,连接器的尺寸及每个插针的排列位置都有明确的定义。(阳头)

过程特性:规定了信号之间的时序关系,以便正确地接收和发送数据。

1.4.2、RS-232存在的问题

1.5、RS-422A接口

RS-422A输出驱动器为双端平衡驱动器。如果其中一条线为逻辑“1”状态,另外一条线就为逻辑“0”,比采用单端不平衡驱动对电压的放大倍数大一倍,差分电路能从地线干扰中拾取有效信号,差分接收器可以分辨200mv以上电位差。若传输过程中混入了干扰和噪声,由于差分放大器的作用,可使干扰和噪声相互低消。因此可以避免或大大减弱地线干扰和电磁干扰的影响。RS-422A传输速率

(90Kbps)时,传输距离可达到1200米

 

1.6、RS---485接口

 

 

1.7、89C51串行口的结构

1.8、80C51串行的控制寄存器

SCON是一个特殊功能寄存器,用以设定串行口的工作接收/发送控制以及设置状态标志;

S

 

SM0和SM1为工作方式选择位,可选择四种工作方式;

 

二、单片机与单片机的通信

 

 

三、串口通信编程

#include "reg52.h"
typedef unsigned int u16;	 // 定义数据格式
//   #define  宏定义关键字 
typedef unsigned char u8;


void statsInit()
{

  TMOD = 0x20;
  TH1 = 0xF3;
  TL1=  0xF3;
  PCON=0x80;
  TR1=1;           // 打开定时器
  SCON =  0x50;
  ES=1;          
  EA=0;
}

void main()
{
 statsInit();
  while(1);
}

void Ustart() interrupt 4
{
   u8 receiveDate;      // 将数据从缓冲器中读出
	receiveDate =SBUF;
	RI=0;   //软件清零
	SBUF = receiveDate;
	while(!TI);
	TI=0;
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/RONG_YAO/article/details/106020507

智能推荐

Python学习笔记(十)--------Python异常捕获与处理及自定义异常_Baldwin_KeepMind的博客-程序员秘密

更多Pythton学习系列内容请点击我本文基于Python3.71. 相关什么是异常?异常就是“不正常”。我们的程序的执行过程中发生了一个不正常的事件,这个事件影响了程序的正常运行,此时就是发生了程序异常。与在Java中一样的,Python中的异常也是一个对象,当程序发生异常时,程序会抛出响应的异常对象,我们需要去捕获这个异常并解决他,防止异常导致程序停止。这里是一段防爬虫文本,读者请忽略...

linux内核网络协议栈--ip层报文转发之ip_local_out()函数(六)_bob62856的博客-程序员秘密

IP层本地报文发送有两个函数ip_local_out和ip_local_out_sk,实际实现两者是等同的,因为本地发送的报文,skb必然关联着一个sock对象。1、ip_local_out函数static inline int ip_local_out(struct sk_buff *skb){ return ip_local_out_sk(skb->sk, skb); //本地报文发送,本地发送的报文都关联着一个sock对象}2、ip_local_out_sk函数int ip_lo

python海归绘图画四个矩形_python画四个矩形_独白的小强的博客-程序员秘密

#绘制矩形import turtleturtle.width(2)turtle.color(“red”)turtle.forward(100)turtle.left(90)turtle.forward(100)turtle.left(90)turtle.forward(100)turtle.left(90)turtle.forward(100)turtle.goto(100,...

四分树( Quadtrees, UVa 297)_可以用四分树来表示一个黑白图像_ 千年暗室 一灯即明的博客-程序员秘密

如图6-8所示, 可以用四分树来表示一个黑白图像, 方法是用根结点表示整幅图像, 然后把行列各分成两等分, 按照图中的方式编号, 从左到右对应4个子结点。 如果某子结点对应的区域全黑或者全白, 则直接用一个黑结点或者白结点表示; 如果既有黑又有白, 则用一个灰结点表示, 并且为这个区域递归建树。给出两棵四分树的先序遍历, 求二者合并之后( 黑色部分合并) 黑色像素的个数。 p表示中间结点, f...

Cocos2d-x 获取系统毫秒时间_cocos2d gettimeinmilliseconds()_kodeLove的博客-程序员秘密

原文链接:http://4137613.blog.51cto.com/4127613/760652因为最近在写一个炸弹人例子,用双击控制布雷。但是突然发现知易的教程中使用的是 UITouch 类,这个类是 iOS 的。因此在 cocos2d 中无法使用。因此只能自己手动判断两次单击之间的时间间隔,以此来确定双击。 所以,我们需要获得系统时间,本来想用标准 C 里面的 time,

2020C语言程序设计1253,1253C语言程序设计A-国家开放大学2021年1月期末考试真题及答案-计算机科学与技术.pdf..._大笨妞的博客-程序员秘密

试卷代号: 1253座位号亡二]国家开放大学2020 年秋季学期期末统一考试C 语言程序设计试题2021 年 1 月I: :I~I 二 I 三 I 四 I 总分 1得分 1 评卷人一、单项选择题(把合适的选项编号填写在括号内。每小题 3 分,共42 分)1. 在每个 C 语言程序中都必须包含有这样一个函数,该函数的函数名为( ...

随便推点

Modbus功能码与数据类型_modbus数据类型_翱翔的蠢猪的博客-程序员秘密

表1 ModBus功能码 功能码  名称             作用  01  读取线圈状态 取得一组逻辑线圈的当前状态(ON/OFF)  02  读取输入状态  取得一组开关输入的当前状态(ON/OFF)  03  读取保持寄存器  在一个或多个保持寄存器中取得当前的二进制值  04  读取输入寄存器  在一个或多个输入寄存器中取得当前的二进制值  05  强置单线圈 

safari的java扩展_用 Web 技术为 Safari 编写扩展_紫木祀水的博客-程序员秘密

原标题:用 Web 技术为 Safari 编写扩展作者:希德,iOS 开发者,前“有经验的前端开发工程师”,就职于网易严选。正在写书《Thinkable SwiftUI》(严重拖稿中)Session 10665: https://developer.apple.com/videos/play/wwdc2020/10665今年(2020)苹果宣布引入一种新的 Safari 扩展类型,这种类型使用 W...

.class文件的字节码结构_class的字节码规范文档地址_Java程序员周瑜的博客-程序员秘密

在进入正文之前为了帮助大家更好的学习小编在此整理了很多的学习资料,欢迎大家在文末进行领取。写一个简单的 Demo.java 程序如下所示使用 javac 命令编译 Demo.java 文件生成 Demo.class 文件接着用文本编辑器打开生成的 Demo.class 文件,如下所示可以看到,该文件中是由十六进制符号组成的,这一段十六进制符号组成的长串是遵守Java 虚拟机规范的在 Java 虚拟机规范中规定了 Java 虚拟机结构、Class 类文件结构、字节码指令等内容,可以参考 GitHub

Word2016写论文之题注功能——公式自动编号右对齐等操作_公式题注_zhanghm1995的博客-程序员秘密

本系列文章主要详细介绍本人在使用Word2016写论文过程所用到的各种操作,这些操作都非常的实用,能够大为减少论文排版的工作量。其中很多方法也都是参考网上一些优秀博客的,经过本人的实践成功之后才记录在此,文中也注明了资源来源,希望对大家有所帮助!操作系统:Window10Office版本:2016这篇博文主要介绍题注的使用技巧,通过题注的使用,可以对图片、公式、一些指定对象进行自动编号,...

Linux挂载远程机器文件目录_巨大的豌豆的博客-程序员秘密

简洁应该是程序员的永恒追求——某人情景:java,vim。vim代码提示,受尽折磨,随大众,eclipse。远程开发机,本地编辑,同步,不胜其烦。方案:use NFS service ! 把远程机器上的目录挂载在本地机器上。第一步:在远程机器上启动NFS服务。1,在/etc/exports中添加这一行:/home/user/work/task1 10

Cocos Creator教程:截图&切图_cocos 切图_weakenCoder的博客-程序员秘密

截图1本方式是常用到,要求截图时不能包含mask节点。优点是比下面方式2省内存。var size = cc.director.getWinSize();var fileName = “result_share.jpg”;var fullPath = jsb.fileUtils.getWritablePath() + fileName;if(jsb.fileUtils.isFileExis...

推荐文章

热门文章

相关标签