串口通信
上位机-串口通信详解(以RS232为例))
上位机-串⼝通信详解(以RS232为例))1、什么是串⼝通信?写这个的时候我在想应该怎么解释串⼝通信,因为串⼝通信很多朋友不了解的原因是涉及到硬件的知识,对于没有相关专业知识的朋友很难理解串⼝通信。
所以我这⾥只做部分的解释,需要了解更多硬件相关信息的朋友可以看这篇博⽂:串⼝通信在百度词条上的解释是:串⼝通信(Serial Communications)的概念⾮常简单,串⼝按位(bit)发送和接收的。
简单的解释就是:两个⼈说话,⼀个⼈说,⼀个⼈听。
是的,就是这个么简单。
如果不需要了解硬件,那么我们只需要了解通信,串⼝不需要理解,那是硬件⼯程师需要考虑的事情。
我们今天讲的是上位机与串⼝通信,重点是通信。
2、串⼝通信协议所谓通信协议是指通信双⽅的⼀种约定。
约定包括对数据格式、同步⽅式、传送速度、传送步骤、检纠错⽅式以及控制字符定义等问题做出统⼀规定,通信双⽅必须共同遵守。
串⼝通信协议中,很多朋友很疑惑,RS232,RS485这些协议怎么⽤?但实际上这些准确来说,是⼀种标准。
我们可以直接使⽤这种标准进⾏通信,完全没有任何问题。
还有⼀种⾃定义通信协议,顾名思义,⾃定义通信协议是基于需求编写的,符合RS232等标准的协议。
这部分对于上位机来说,我们只需要得到第三⽅提供的⾃定义通信协议,根据其中的内容进⾏编程即可,具体的功能实现是由硬件⼯程师实现。
在通信协议中,最重要的是端⼝(com)、波特率、数据位、校验位、停⽌位。
3、实现⼀个demo通过上⾯的了解,上位机⼯程师应该有⼀个概念,上位机与串⼝的通信重点是通信,常⽤的通信可以直接使⽤标准的完成,但是如果是属于⾃定义通信协议的,需要提供⾃定义的通信协议。
1)⾸先我们实现⼀个界⾯,如下:2)配置串⼝参数-打开串⼝3)发送数据4)接收数据1、使⽤异步接收数据2、如果需要写完之后直接读,参考以下⽅法:5)效果图:6)基于⾃定义协议的通信(发送和接收都使⽤16进制进⾏)⾸先⾃定义⼀个通信协议:1、使⽤RS232进⾏通信,设定如下:波特率:9600数据位:8停⽌位:1奇偶校验:⽆2、通信协议内容:1)寄存器1 置1 执⾏功能1 地址 0b2)寄存器2 置1 执⾏功能2 地址 1b3)crc校验:将数据+地址等通过与或等操作⽣成的⼀个值(⼀般⾃定义的都会进⾏校验)4)开始位:015)结束位: 056)地址位:0a(根据不同寄存器决定)7)结果位:0e (成功0e,失败00)发送例⼦:执⾏功能101 0b 01 00 00 00 00 00 00 00 06 0e 05解析:01是开始位,0b是对应寄存器1的地址,数据长度是8,没有数据的置00,06是crc校验⽣成值,0e是结果位,05 是结束位。
单片机串口通信原理
单片机串口通信原理
单片机串口通信原理是指通过串口进行数据的发送和接收。
串口通信是一种异步通信方式,它使用两根信号线(TXD和RXD)进行数据的传输。
在发送数据时,单片机将待发送的数据通过串口发送数据线(TXD)发送出去。
发送的数据会经过一个串口发送缓冲区,然后按照一定的通信协议进行处理,并通过串口传输线将数据发送给外部设备。
在接收数据时,外部设备将待发送的数据通过串口传输线发送给单片机。
单片机接收数据线(RXD)会将接收到的数据传
输到一个串口接收缓冲区中。
然后,单片机会根据通信协议进行数据的解析和处理,最后将数据保存在内部的寄存器中供程序使用。
串口通信协议通常包括数据位、停止位、校验位等信息。
数据位指的是每个数据字节占据的位数,常见的有8位和9位两种。
停止位用于表示数据的结束,常用的有1位和2位两种。
校验位用于检测数据在传输过程中是否发生错误,常见的校验方式有奇偶校验和无校验。
总的来说,单片机串口通信原理是通过串口发送数据线和接收数据线进行数据的传输和接收,并通过一定的通信协议进行数据的解析和处理。
这种通信方式可以实现单片机与外部设备的数据交换,广泛应用于各种嵌入式系统和物联网设备中。
微机原理与接口技术中串口通信的特点
微机原理与接口技术中串口通信的特点
串口通信是一种通过串行接口进行数据传输的通信方式。
在微机原理与接口技术中,串口通信具有以下几个特点:
1. 低速传输:串口通信的传输速率相对较低,通常在几十到几百kbps之间。
与现代高速网络相比,串口通信的速度较慢。
这主要是因为串口通信使用的是串行传输方式,每次只能传输一个比特,而不像并行传输那样可以同时传输多个比特。
2. 长距离传输:串口通信可以实现较长距离的数据传输。
由于串口通信使用的是差分传输方式,信号幅度较大,因此能够在较长的距离上进行可靠的数据传输。
这使得串口通信在一些特殊环境下(如工业控制系统、远程监控等)得到广泛应用。
3. 硬件简单:串口通信的硬件结构相对简单,通常只需要一个串口芯片和几根信号线就可以实现。
这使得串口通信的成本较低,适用于一些对成本要求较高的应用场景。
4. 可靠性高:串口通信的差分传输方式可以有效地抑制干扰,提高通信的可靠性。
此外,串口通信还支持奇偶校验、停止位等机制,可以检测和纠正数据传输过程中的错误,进一步提高了通信的可靠性。
5. 支持点对点通信:串口通信是一种点对点的通信方式,即一对一的通信方式。
每个串口通信的设备都有一个唯一的地址,通信时只
需要指定目标设备的地址即可进行通信。
这种点对点的通信方式适用于一些需要直接与设备进行通信的应用场景。
总的来说,串口通信具有低速传输、长距离传输、硬件简单、可靠性高和支持点对点通信等特点。
在微机原理与接口技术中,学习串口通信的原理和接口技术,可以帮助我们理解和应用串口通信,实现与外部设备的数据交互。
串口通信的原理
串口通信的原理1. 什么是串口通信串口通信是计算机与外部设备之间进行数据传输的一种方式。
它通过串行传输数据,即一位接着一位地传输,与并行传输相对。
串口通信常用于连接计算机与外围设备,如打印机、调制解调器、传感器等。
2. 串口通信的基本原理串口通信的基本原理是通过发送和接收数据来实现信息的交流。
串口通信需要两个主要的组件:发送端和接收端。
发送端将要发送的数据转换为电信号,通过串口线传输给接收端,接收端将接收到的电信号转换为数据。
串口通信的基本原理包括以下几个方面:2.1 串口线串口通信使用的是串口线(Serial Cable),它是一根将发送端和接收端连接起来的线缆。
串口线中包含多个引脚,其中最常用的是发送引脚(TX)和接收引脚(RX),它们分别用于发送和接收数据。
2.2 串口通信协议串口通信需要使用一种协议来规定数据的传输格式和规则。
常见的串口通信协议有RS-232、RS-485等。
这些协议规定了数据的位数、校验方式、波特率等参数。
发送端和接收端必须使用相同的协议才能正常进行通信。
2.3 数据帧数据在串口通信中以数据帧的形式进行传输。
数据帧包括起始位、数据位、校验位和停止位等组成部分。
起始位用于标识数据帧的开始,停止位用于标识数据帧的结束,数据位用于存放传输的数据,校验位用于检测数据的正确性。
2.4 波特率波特率(Baud Rate)是衡量串口通信速度的单位,表示每秒传输的位数。
波特率越高,传输速度越快。
发送端和接收端必须使用相同的波特率才能正常进行通信。
3. 串口通信的工作流程串口通信的工作流程包括以下几个步骤:3.1 配置串口参数在进行串口通信之前,需要配置串口的参数,包括波特率、数据位、停止位、校验位等。
发送端和接收端必须使用相同的参数才能正常进行通信。
3.2 发送数据发送端将要发送的数据转换为电信号,通过串口线发送给接收端。
发送数据时,需要按照数据帧的格式进行封装,包括起始位、数据位、校验位和停止位。
串口通信rx和tx原理
串口通信rx和tx原理摘要:一、串口通信概述1.串口协议类型2.波特率设置二、串口通信原理1.串行通信与并行通信的区别2.串口通信的基本结构三、RX和TX在串口通信中的作用1.RX(接收)2.TX(发送)四、STM32串口通信实例1.硬件连接2.软件设置与调试五、常见问题及解决方案1.接收和发送LED不亮2.串口通信速率不足正文:一、串口通信概述串口通信是一种在单一传输线上将数据以比特位进行传输的通信方式,具有成本低、传输线简洁等优点。
串口通信协议有多种,如USB转TTL、RS232转TTL、RS485转TTL等。
这些协议在传输速度和距离方面有所不同,但都基于TTL逻辑电平。
在串口通信中,发送端和接收端需要遵循相同的格式(如起始位、停止位等)进行数据传输,并设置相同的波特率。
二、串口通信原理串口通信与并行通信相比,虽然传输速度较慢,但只需使用一对传输线即可完成数据传输。
串口通信的基本结构包括地线、TX(发送)和RX(接收)线。
由于串口通信是异步的,发送端和接收端可以在TX线上发送数据。
三、RX和TX在串口通信中的作用1.RX(接收):RX线用于接收来自发送端的数据。
在接收数据时,需要确保数据格式与发送端一致,以便正确解析数据。
2.TX(发送):TX线用于发送数据至接收端。
在发送数据时,同样需要遵循一定的数据格式,如起始位、数据位、停止位等。
四、STM32串口通信实例1.硬件连接:在使用STM32进行串口通信时,需要将两个STM32的TX 和RX引脚连接起来。
例如,将STM32_TX_1与STM32_RX_1相连,同时将STM32_TX_2与STM32_RX_2相连。
2.软件设置与调试:在STM32中,可以通过设置波特率、数据位、停止位等参数实现串口通信。
通常,波特率设置为9600,数据位为8位,停止位为1位。
在调试过程中,可以通过观察接收到的数据是否符合预期来验证通信是否正常。
五、常见问题及解决方案1.接收和发送LED不亮:如果接收和发送LED不亮,可能是由于未正确连接线路或波特率设置不匹配。
串口通讯原理
串口通讯原理串口通讯是一种常见的数据传输方式,它通过串行传输数据,将数据一位一位地发送和接收。
串口通讯常用于计算机与外部设备之间的数据传输,例如打印机、调制解调器、传感器等。
本文将介绍串口通讯的原理和工作方式。
一、串口通讯的基本原理串口通讯使用两根信号线进行数据传输,分别是发送线(TX)和接收线(RX)。
发送线用于将数据从发送端发送到接收端,接收线则用于将数据从接收端传输到发送端。
这两根信号线通过一对电缆连接在一起。
在串口通讯中,数据是按照一定的格式进行传输的。
常见的格式包括起始位、数据位、校验位和停止位。
起始位用于标识数据传输的开始,数据位用于传输实际的数据,校验位用于检测数据传输的准确性,停止位用于标译数据传输的结束。
二、串口通讯的工作方式串口通讯的工作方式可以分为同步和异步两种。
同步传输是指发送端和接收端的时钟信号保持同步,数据按照时钟信号的边沿进行传输。
异步传输则是指发送端和接收端的时钟信号不同步,数据通过起始位和停止位进行同步。
在同步传输中,发送端和接收端需要事先约定好时钟信号的频率和相位,以确保数据的准确传输。
而在异步传输中,发送端和接收端只需要约定好数据的格式,不需要同步时钟信号,因此更加灵活。
三、串口通讯的优缺点串口通讯具有以下优点:1. 简单易用:串口通讯的硬件接口简单,使用方便。
2. 跨平台性:串口通讯可以在不同的操作系统和设备之间进行数据传输。
3. 可靠性高:串口通讯的传输稳定可靠,不容易出错。
然而,串口通讯也存在一些缺点:1. 传输速率较低:串口通讯的传输速率相对较低,无法满足高速数据传输的需求。
2. 连接距离有限:串口通讯的连接距离较短,一般不超过几十米。
3. 线路复杂:串口通讯需要使用专用的串口线缆,线路较为复杂。
四、串口通讯的应用领域串口通讯广泛应用于各个领域,包括工业自动化、通信设备、医疗设备等。
例如,在工业自动化领域,串口通讯常用于PLC(可编程逻辑控制器)和外部设备之间的数据传输;在通信设备领域,串口通讯常用于调制解调器和计算机之间的数据传输。
串口通信 参数
串口通信参数
串口通信是一种在计算机之间或是计算机与外部设备之间进行数据传输的方式。
串口通信可以实现数据的稳定的传输,但是在使用串口通信时需要设置参数,以保证数据传输的稳定和正确。
串口通信参数主要包括波特率、数据位、停止位和奇偶校验位。
这些参数直接影响了数据传输的速率、准确性和稳定性,正确设置这些参数可以提高串口通信的可靠性。
1. 波特率
波特率是指在单位时间内传输的数据位数,常见的波特率有9600、115200等。
当波特率设置过高时,数据传输的准确性可能会降低,而设置过低则会影响数据传输的速率。
通常情况下,选择一个适当的波特率可以保证串口通信的稳定和准确。
2. 数据位
数据位是指每个字符传输的位数,通常为5、6、7或8位。
数据位设置过低会影响数据传输的准确性,而设置过高则会浪费传输带宽。
一般来说,数据位应当和打印机、调制解调器等设备的设置保持一致。
3. 停止位
停止位是指字符传输完毕后等待一段时间后再停止传输的方式。
常用的停止位有1位和2位,需要根据具体的设备要求进行设置。
4. 奇偶校验位
奇偶校验位可以用来检测并纠正数据传输中的错误。
通常有奇校验和偶校验两种,需要根据具体设备的要求进行设置。
总之,正确设置串口通信参数可以保证数据传输的稳定和正确,提高串口通信的可靠性。
在进行串口通信时,需要根据具体的设备要求设置相应的参数,以保证数据的准确传输。
串口通讯方法的三种实现
串口基本信息用一台电脑实验串口自发自收,实验前要将串口(以9针为例)的发送引脚(2脚)和接受引脚(3脚)短接。
三线连接:适用于计算机之间尤其是PC机和单片机之间的数据通信。
其连接信号对为(TxD,RxD)、(RxD,TxD)、(SG,SG)。
即发送数据TxD端和接受数据RxD端交叉连接,信号地SG对应连接。
七线交叉连接:适用于同型号的计算机之间的连接,如PC机间的数据通信。
其连接信号对为:(TxD,RxD)、(RxD,TxD)、(SG,SG)、(RTS,CTS)、(CTS,RTS)、(DSR.DTR)、(DTR,DSR)。
其中,TxD、RxD、SG与前面信号的含义相同,RTS为请求发送,CTS为准许发送,DSR为数据装置准备好,DTR为数据终端准备好。
在本地连接的微机系统中,RTS、CTS、DTR、DSR用作硬件联络控制信号。
目前使用的串口连接线有DB9和DB25两种连接器,用户可以国家使用的具体机器选择相应的连接器。
一个串口通讯类在/network/serialport.shtml。
PC机的RS-232接口的电平标准是-12V标示“1”,和+12V表示“0”,有些单片机的信号电平时TTL 型,即大于2.4v表示“1”,小于0.5v表示“0”,因此采用RS-232总线进行异步通信是,发送端和接受端要有一个电平转换接口。
串口通讯方法的三种实现串口是计算机上一种非常通用的设备通信协议。
大多数计算机包含两个基于RS232的串口。
串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS一232口。
同时,串口通信协议也可以用于获取远程采集设备的数据。
串口通信(Serial Communication),是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。
串口通信方便易行,应用广泛。
在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。
第7章串口通信
收)。特点:传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,
但数据的传送控制比并行通信复杂。
第7章串口通信
7.1.1 串行通信的基本概念
一、异步通信与同步通信
1、异步通信 异步通信是指通信的发送与接收设备使用各自的时钟
控制数据的发送和接收过程。 以帧作为传送单位,每一 帧由起始位、数据位、校验位和停止位组成,结构如图。
第7章串口通信
三、方式2和方式3
方式2或方式3时为11位数据的异步通信口。TXD为数据发
送引脚,RXD为数据接收引脚 。
方式2和方式3时起始位1位,数据9位(含1位附加的第9位, 发送时为SCON中的TB8,接收时为RB8),停止位1位,一 帧数据为11位。方式2的波特率固定为晶振频率的1/64或1/32, 方式3的波特率由定时器T1的溢出率决定。
第7章串口通信
二、方式1 :8位异步通信接口
方式1是10位数据的异步通信口。TXD为数据发送引脚, RXD为数据接收引脚,传送一帧数据的格式如图所示。其中1 位起始位,8位数据位(低位在前),1位停止位。
1、方式1输出
第7章串口通信
2、方式1输入
第7章串口通信
(1)发送: CPU向发送缓冲器SBUF写入一个数据后,便启动串行 口在TXD端输出帧信息,先发送起始位“0”,接着从低位开始 依次输出8位数据,最后输出停止位。发送完一帧信息后,发 送中断标志TI置“1”,向CPU请求中断。
•(1)发送:当CPU向发送缓冲器SBUF写入一个数据后,便立即启动发送器发送。先发
送起始位“0”,接着从低位开始依次输出8位数据,再发送SCON中的TB8,最后输出停止 位。发送完一帧信息后,发送中断标志TI置“1”,向CPU请求中断。
串口通信原理及操作流程
串口通信原理及操作流程串口通信是计算机与外部设备之间进行数据传输的一种通信方式。
串口通信有很多应用领域,比如打印机、调制解调器、传感器、嵌入式系统等等。
本文将介绍串口通信的原理及操作流程。
一、串口通信原理串口通信是通过串行传输来传送数据的。
串行传输是指将数据位按序列发送,每个数据位连续的传输。
串口通信涉及两个主要部分,即发送端和接收端。
发送端将原始数据转换为串行数据流进行发送,接收端则接受数据流并将其转换为原始数据。
串口通信需要两根线缆来进行传输,分别是数据线和控制线。
数据线用于传输数据位,而控制线用于传输控制信号。
串口通信使用的数据传输格式通常是异步串行传输。
异步传输是指数据位之间没有时间关系,每个数据位之间通过起始位和停止位来进行区分。
起始位用于表示数据传输的开始,而停止位则表示数据传输的结束。
此外,数据位的长度和奇偶校验位的设置也是串口通信中需要注意的参数。
二、串口通信操作流程串口通信的操作流程可以分为以下几步:1.打开串口用户需要先打开串口才能进行通信。
打开串口的过程可能需要设置串口的参数,比如波特率、数据位长度、奇偶校验位等等。
2.发送数据一旦串口打开,用户可以通过向串口写入数据来进行发送。
数据可以是任何形式的,比如字符串、二进制数据等等。
3.接收数据接收数据的过程与发送数据的过程相反,用户可以从串口读取数据。
读取到的数据可以进一步处理或者显示。
4.关闭串口通信结束后,用户需要关闭串口以释放相关资源。
以上是串口通信的基本操作流程。
在实际应用中,可能还需要进行更多的操作,比如设置超时时间、错误处理等等。
三、串口通信的注意事项在进行串口通信时1.波特率的设置需要与外部设备保持一致,否则可能无法正常通信。
2.数据位长度、奇偶校验位以及停止位的设置也需要与外部设备保持一致。
3.在进行数据传输之前,最好先进行握手协议以确保通信的可靠性。
4.在进行数据传输时,需要保证发送端和接收端的数据格式是一致的,否则可能会引发数据解析错误。
串口通信 标准
串口通信标准串口通信(Serial Communication)是一种常用的数据传输方式,它通过串行方式逐位传输数据。
在串口通信中,数据在两个设备之间逐位传输,每个设备都有发送和接收数据的能力。
以下是串口通信的一些标准:1. RS-232:RS-232是一种常用的串口通信标准,由美国电子工业协会(EIA)制定。
它定义了数据传输的电压和信号线配置,以及数据传输速率等参数。
RS-232标准使用负逻辑,即逻辑0表示-5V至-15V 的电压,而逻辑1表示+5V至+15V的电压。
2. RS-485:RS-485是另一种常见的串口通信标准,它扩展了RS-232的功能,支持多点通信,即多个设备可以通过一个总线上进行通信。
RS-485使用差分信号传输方式,提高了信号的抗干扰能力。
3. USB:USB(Universal Serial Bus)虽然是一种总线标准,但它也可以用于串口通信。
USB是一种常用的接口标准,它支持热插拔和即插即用,并且可以传输数据和电力。
通过USB转串口适配器,可以将USB转换为串口通信。
4. I2C:I2C(Inter-Integrated Circuit)是一种用于连接低速设备的总线标准,它通过两根信号线(SDA和SCL)进行串行通信。
I2C总线可以挂载多个设备,并且设备之间可以进行通信。
5. SPI:SPI(Serial Peripheral Interface)是一种同步串行通信协议,它定义了主设备和从设备之间的通信方式。
SPI使用四根信号线(SCK、MOSI、MISO和NSS),支持高速数据传输。
这些是常见的串口通信标准,每种标准都有其特点和适用范围。
选择合适的串口通信标准取决于具体的应用需求和硬件配置。
串口通信rx和tx原理
串口通信rx和tx原理
摘要:
1.串口通信简介
2.串口通信的RX 和TX 原理
3.串口通信的应用领域
正文:
串口通信是一种异步通信方式,它在通信过程中只需要使用一对传输线,即RX(接收)和TX(发送)。
这种通信方式在电子设备之间传输数据时被广泛采用,因为它具有简单、成本低、传输距离远等优点。
串口通信的RX 和TX 原理是利用不同的电平来表示数据。
在发送端,TX 线上的电平根据数据信号进行变化,从而将数据传输到接收端。
而在接收端,RX 线上的电平变化被识别为对应的数据信号。
在数据传输过程中,发送端和接收端都需要设置相同的波特率,以确保数据传输的准确性。
串口通信的应用领域非常广泛,包括但不限于以下几个方面:
1.计算机外设:如鼠标、键盘、打印机等设备,它们通常使用串口通信与计算机进行数据交换。
2.通信设备:如电话、modem 等,它们利用串口通信进行数据传输。
3.嵌入式系统:如单片机、微控制器等,它们通常使用串口通信与其他设备或上位机进行数据交互。
4.物联网:在物联网应用中,串口通信被广泛应用于各种传感器、执行器等设备之间的数据传输。
总之,串口通信作为一种基本的通信方式,在电子设备之间传输数据时发挥着重要作用。
使用串口通信的注意事项
使用串口通信的注意事项串口通信是一种常见的数据传输方式,通常用于连接计算机和外部设备,或者连接嵌入式系统和外围设备。
在使用串口通信时,有一些注意事项需要考虑,包括以下几点:1. 波特率设置,在进行串口通信时,发送和接收数据的设备必须使用相同的波特率。
波特率是指每秒钟传输的比特数,常见的波特率包括9600、115200等。
确保发送和接收设备的波特率设置一致,否则会导致数据传输错误。
2. 数据位、停止位和校验位设置,除了波特率外,还需要设置数据位、停止位和校验位。
这些参数也需要发送和接收设备保持一致,以确保数据的正确传输。
3. 数据格式,在进行串口通信时,需要确定所传输数据的格式,包括数据的起始标志、结束标志以及数据的编码方式。
这些格式需要发送方和接收方进行协商并保持一致。
4. 数据流控制,在高速传输或长距离传输时,可能需要使用数据流控制来确保数据的可靠传输。
常见的数据流控制方式包括硬件流控和软件流控,需要根据实际情况进行选择和配置。
5. 错误处理,在串口通信过程中,可能会出现数据传输错误或丢失的情况。
需要在设计通信协议时考虑错误处理机制,以确保数据传输的可靠性和稳定性。
6. 线缆连接,正确连接串口通信的线缆也是非常重要的。
需要确保使用合适的串口线缆,并正确连接发送和接收设备的串口接口。
总的来说,串口通信时需要注意波特率、数据位、停止位、校验位的设置,确定数据格式和流控制方式,设计合理的错误处理机制,并确保正确连接线缆。
只有在这些方面都做到位,才能保证串口通信的稳定和可靠。
串口主从机通信的原理
串口主从机通信的基本原理1. 什么是串口通信?串口通信是一种利用串行接口进行数据传输的通信方式。
在计算机和其他外部设备之间,通过串行接口(也称为串口)进行数据的发送和接收。
在串口通信中,存在两个角色:主机和从机。
主机负责发送数据,从机负责接收数据。
通过串口连接,主机可以控制从机,并与其进行数据交互。
2. 串口通信的基本原理2.1. 串口硬件连接串口通信使用的是RS-232标准或RS-485标准的物理接口。
这些标准规定了连接线路、电气特性等方面的要求。
常见的物理连接方式有两种:DB9和DB25。
DB9是一种9针连接器,适用于较小规模的通信;DB25是一种25针连接器,适用于较大规模或需要更多控制信号的通信。
2.2. 数据传输方式在串口通信中,数据是按照位(bit)进行传输的。
每个字节由8个位组成。
传输一个字节时,首先发送起始位(Start Bit),一般为低电平;然后发送8个数据位(Data Bits),由低位到高位依次发送;最后发送停止位(Stop Bit),一般为高电平。
起始位和停止位的作用是标志一个字节的开始和结束,使接收端可以正确识别数据的边界。
2.3. 通信协议串口通信需要使用一种协议来规定数据的格式、传输方式等。
常见的通信协议有UART、SPI和I2C等。
UART(Universal Asynchronous Receiver/Transmitter)是最常用的串口通信协议。
它采用异步传输方式,不需要时钟信号,只需发送方和接收方约定好波特率(Baud Rate)即可。
SPI(Serial Peripheral Interface)是一种同步串行通信协议,适用于在主机和多个从机之间进行高速数据传输。
I2C(Inter-Integrated Circuit)是一种双线制串行总线,适用于连接多个从机到同一个主机,并且可以灵活地扩展从机数量。
2.4. 数据帧在串口通信中,数据被划分为多个帧进行传输。
串口通信实验报告
一、实验目的1. 了解串口通信的基本原理和作用。
2. 掌握单片机串口通信的编程方法。
3. 通过实验验证串口通信的可靠性和稳定性。
二、实验原理串口通信是指通过串行通信接口进行的数据传输方式。
串口通信具有传输速率较低、通信距离较近等特点,但具有简单、可靠、易于实现等优点。
在单片机应用中,串口通信广泛应用于数据采集、设备控制、远程通信等领域。
单片机串口通信的基本原理是:通过单片机的串行通信接口(如UART、USART等)发送和接收数据。
串口通信的数据格式通常包括起始位、数据位、奇偶校验位和停止位。
三、实验设备1. 单片机开发板(如STC89C52、STM32等)2. 串口调试助手(如PuTTY、串口调试助手等)3. 仿真软件(如Proteus、Keil等)四、实验内容1. 串口通信硬件连接2. 串口通信软件编程3. 串口通信调试与验证五、实验步骤1. 硬件连接(1)将单片机的TXD、RXD、GND等引脚与计算机的串口通信线相连。
(2)将计算机的串口通信线与串口调试助手相连。
2. 软件编程(1)在仿真软件中编写单片机程序,实现数据的发送和接收。
(2)在串口调试助手中编写程序,实现数据的发送和接收。
3. 调试与验证(1)在仿真软件中运行单片机程序,观察串口调试助手中的数据是否正确接收。
(2)修改单片机程序,改变发送和接收的数据,验证串口通信的可靠性。
六、实验结果与分析1. 实验结果通过实验,成功实现了单片机与计算机之间的串口通信。
在串口调试助手中,可以观察到单片机发送的数据被正确接收,同时也可以向单片机发送数据。
2. 实验分析(1)实验验证了单片机串口通信的可靠性和稳定性。
(2)实验过程中,需要注意波特率、数据位、停止位等参数的设置,以保证通信的准确性。
(3)实验过程中,可以尝试不同的通信协议,如ASCII码、十六进制等,以适应不同的应用场景。
七、实验心得1. 串口通信是一种简单、可靠的数据传输方式,在单片机应用中具有广泛的应用前景。
串口通信机制
串口通信机制串口通信是一种通过串行接口进行数据传输的通信方式。
在串口通信中,数据位按照一定的顺序通过单个通信通道进行传输,通常使用串行通信协议来确保数据的正确传输。
以下是串口通信的一般机制:1.串口通信硬件:o串口接口:串口通信通常使用RS-232、RS-485、USB等串口接口标准。
RS-232是一种常见的串口标准,用于连接计算机和外部设备。
o数据线:串口通信使用多条数据线,包括发送数据线(TX)、接收数据线(RX)、地线(GND),可能还有其他信号线,如数据位、停止位、奇偶校验位等。
2.波特率:o通信双方必须设置相同的波特率,即数据传输的速率。
波特率表示每秒传输的比特数,常见的波特率有9600、115200等。
3.数据帧格式:o数据通过数据帧的形式进行传输。
数据帧包括起始位、数据位、奇偶校验位、停止位等。
通信双方必须设置相同的数据帧格式。
4.起始位和停止位:o起始位表示数据的传输开始,停止位表示数据的传输结束。
它们之间的数据位是实际的数据。
5.奇偶校验位:o奇偶校验位用于检测数据传输过程中是否发生错误。
奇偶校验位的设置可以是奇校验、偶校验或无校验。
6.数据传输流程:o发送端:数据按照数据帧格式发送到串口,包括起始位、数据位、奇偶校验位、停止位。
o传输线:数据通过串口通信线路传输到接收端。
o接收端:接收端解析接收到的数据帧,根据数据帧格式提取数据。
7.软件控制:o串口通信可以通过计算机的串口接口硬件控制,也可以通过软件进行控制。
操作系统提供相应的串口通信API,应用程序可以通过API进行串口通信。
串口通信广泛应用于嵌入式系统、传感器网络、计算机外设等领域。
不同的应用场景和设备可能使用不同的串口标准和通信参数。
UART串口通信实验报告
实验四UART串口通信学院:研究生院学号:1400030034姓名:张秋明一、实验目得及要求设计一个UART串口通信协议,实现“串<-->并”转换功能得电路,也就就是“通用异步收发器”。
二、实验原理UART就是一种通用串行数据总线,用于异步通信。
该总线双向通信,可以实现全双工传输与接收。
在嵌入式设计中,UART用来主机与辅助设备通信,如汽车音响与外接AP之间得通信,与PC机通信包括与监控调试器与其它器件,如EEPROM通信。
UART作为异步串口通信协议得一种,工作原理就是将传输数据得每个字符一位接一位地传输。
其中各位得意义如下:起始位:先发出一个逻辑”0”得信号,表示传输字符得开始。
资料位:紧接着起始位之后。
资料位得个数可以就是4.5.6.7、8等,构成一个字符。
通常采用ASCII码。
从最低位开始传送,靠时钟定位。
奇偶校验位:资料位加上这一位后,使得“1”得位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送得正确性。
停止位:它就是一个字符数据得结束标志。
可以就是1位、1.5位、2位得高电平。
由于数据就是在传输线上定时得,并且每一个设备有其自己得时钟,很可能在通信中两台设备间出现了小小得不同步。
因此停止位不仅仅就是表示传输得结束,并且提供计算机校正时钟同步得机会。
适用于停止位得位数越多,不同时钟同步得容忍程度越大,但就是数据传输率同时也越慢。
空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。
波特率:就是衡量资料传送速率得指标。
表示每秒钟传送得符号数(symbol)。
一个符号代表得信息量(比特数)与符号得阶数有关。
例如资料传送速率为120字符/秒,传输使用256阶符号,每个符号代表8bit,则波特率就就是120baud,比特率就是120*8=960bit/s。
这两者得概念很容易搞错。
三、实现程序library ieee;use ieee、std_logic_1164.all;use ieee、std_logic_arith、all;use ieee、std_logic_unsigned、all;entity uart isport(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号rs232_rx: in std_logic; --RS232接收数据信号;rs232_tx: out std_logic --RS232发送数据信号;); end uart;architecture behav of uart isponent uart_rx port(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号rs232_rx: in std_logic; --RS232接收数据信号clk_bps: in std_logic; --此时clk_bps得高电平为接收数据得采样点bps_start:out std_logic; --接收到数据后,波特率时钟启动置位rx_data: out std_logic_vector(7 downto 0); --接收数据寄存器,保存直至下一个数据来到rx_int: out std_logic --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送);end ponent;ponent speed_select port(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号clk_bps: out std_logic; --此时clk_bps 得高电平为接收或者发送数据位得中间采样点bps_start:in std_logic --接收数据后,波特率时钟启动信号置位);end ponent;ponent uart_tx port(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号rs232_tx: out std_logic; --RS232接收数据信号clk_bps: in std_logic; --此时clk_bps 得高电平为接收数据得采样点bps_start:out std_logic; --接收到数据后,波特率时钟启动置位rx_data: in std_logic_vector(7 downto 0); --接收数据寄存器,保存直至下一个数据来到rx_int: in std_logic --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送模块,使得串口正在进行接收数据得时候,发送模块不工作,避免了一个完整得数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块就已经将不正确得数据传输出去);end ponent;signal bps_start_1:std_logic;signal bps_start_2:std_logic;signal clk_bps_1:std_logic;signal clk_bps_2:std_logic;signal rx_data:std_logic_vector(7 downto 0);signal rx_int:std_logic;beginRX_TOP: uart_rx port map(clk=>clk,rst_n=>rst_n,rs232_rx=>rs232_rx,clk_bps=>clk_bps_1,bps_start=>bps_start_1,rx_data=>rx_data,rx_int=>rx_int);SPEED_TOP_RX: speed_select port map(clk=>clk,rst_n=>rst_n,clk_bps=>clk_bps_1,bps_start=>bps_start_1);TX_TOP:uart_tx port map(clk=>clk, --系统时钟rst_n=>rst_n, --复位信号rs232_tx=>rs232_tx, --RS232发送数据信号clk_bps=>clk_bps_2, --此时clk_bps 得高电平为发送数据得采样点bps_start=>bps_start_2, --接收到数据后,波特率时钟启动置位rx_data=>rx_data, --接收数据寄存器,保存直至下一个数据来到rx_int=>rx_int --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送模块,使得串口正在进行接收数据得时候,发送模块不工作,避免了一个完整得数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块就已经将不正确得数据传输出去);SPEED_TOP_TX: speed_select port map(clk=>clk,rst_n=>rst_n,clk_bps=>clk_bps_2,bps_start=>bps_start_2);end behav;-----------------------------------------------------------------------------------------------------------------------3个子模块------------------------------------------------------------------------------异步接收模块-------------------------------------------library ieee;use ieee、std_logic_1164.all;use ieee、std_logic_unsigned、all;entity uart_rx isport(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号rs232_rx: in std_logic; --RS232接收数据信号clk_bps: in std_logic; --此时clk_bps得高电平为接收数据得采样点bps_start:out std_logic; --接收到数据后,波特率时钟启动置位rx_data: out std_logic_vector(7 downto 0); --接收数据寄存器,保存直至下一个数据来到rx_int: out std_logic --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送模块,使得串口正在进行接收数据得时候,发送模块不工作,避免了一个完整得数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块就已经将不正确得数据传输出去);end uart_rx;architecture behav of uart_rx issignal rs232_rx0: std_logic;signal rs232_rx1: std_logic;signal rs232_rx2: std_logic;signal rs232_rx3: std_logic;signal neg_rs232_rx:std_logic;signal bps_start_r:std_logic;signal num:integer;signal rx_data_r:std_logic_vector(7 downto 0); --串口接收数据寄存器,保存直至下一个数据到来beginprocess(clk,rst_n)beginif (rst_n='0')thenrs232_rx0<='0';rs232_rx1<='0';rs232_rx2<='0';rs232_rx3<='0';elseif (rising_edge(clk)) thenrs232_rx0<=rs232_rx;rs232_rx1<=rs232_rx0;rs232_rx2<=rs232_rx1;rs232_rx3<=rs232_rx2;end if;end if;neg_rs232_rx <=rs232_rx3 and rs232_rx2 and not(rs232_rx1)and not(rs232_rx0);end process;process(clk,rst_n)beginif (rst_n='0')thenbps_start_r<='0';rx_int<='0';elseif (rising_edge(clk)) thenif(neg_rs232_rx='1') then --接收到串口数据线rs232_rx 得下降沿标志信号bps_start_r<='1'; --启动串口准备数据接收rx_int<='1'; --接收数据中断信号使能else if((num= 15) and (clk_bps='1')) then --接收完有用数据信息bps_start_r<='0'; --数据接收完毕,释放波特率启动信号rx_int<='0'; --接收数据中断信号关闭end if;end if;end if;end if;bps_start<=bps_start_r;end process;process(clk,rst_n)beginif (rst_n='0')thenrx_data_r<="00000000";rx_data<="00000000";num<=0;elseif (rising_edge(clk)) thenif(clk_bps='1')thennum<=num+1;case num iswhen 1=>rx_data_r(0)<=rs232_rx;--锁存第0bitwhen 2=>rx_data_r(1)<=rs232_rx;--锁存第0bitwhen 3=>rx_data_r(2)<=rs232_rx;--锁存第0bitwhen 4=>rx_data_r(3)<=rs232_rx;--锁存第0bitwhen 5=>rx_data_r(4)<=rs232_rx;--锁存第0bitwhen 6=>rx_data_r(5)<=rs232_rx;--锁存第0bitwhen 7=>rx_data_r(6)<=rs232_rx;--锁存第0bitwhen 8=>rx_data_r(7)<=rs232_rx;--锁存第0bitwhen 10=>rx_data<=rx_data_r;when 11=>num<=15;when others=>null;end case;if(num=15) thennum<=0;end if;end if;end if;end if;end process;end behav;---------------------------------波特率控制模块-----------------------------------------library ieee;use ieee、std_logic_1164.all;use ieee、std_logic_arith、all;use ieee、std_logic_unsigned、all;entity speed_select isport(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号clk_bps: out std_logic; --此时clk_bps得高电平为接收或者发送数据位得中间采样点bps_start:in std_logic --接收数据后,波特率时钟启动信号置位或者开始发送数据时,波特率时钟启动信号置位);end speed_select;architecture behav of speed_select issignal cnt:std_logic_vector(12 downto 0);signal clk_bps_r:std_logic;constant BPS_PARA:integer:=5207;constant BPS_PARA_2:integer:=2603;beginprocess(clk,rst_n)beginif (rst_n='0')thencnt<="00";elseif (rising_edge(clk)) thenif((cnt=BPS_PARA)or(bps_start='0')) thencnt<="00"; --波特率计数器清零elsecnt<=cnt+'1'; --波特率时钟计数启动end if;end if;end if;end process;process(clk,rst_n)beginif (rst_n='0')thenclk_bps_r<='0';elseif (rising_edge(clk)) thenif(cnt=BPS_PARA_2) thenclk_bps_r<='1'; --clk_bps_r高电平为接收数据位得中间采样点,同时也作为发送数据得数据改变点elseclk_bps_r<='0'; --波特率计数器清零end if;end if;end if;clk_bps<=clk_bps_r;end process;end behav;---------------------------------异步发送模块------------------------------------------- library ieee;use ieee、std_logic_1164.all;use ieee、std_logic_unsigned、all;entity uart_tx isport(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号rs232_tx: out std_logic; --RS232接收数据信号clk_bps: in std_logic; --此时clk_bps得高电平为接收数据得采样点bps_start:out std_logic; --接收到数据后,波特率时钟启动置位rx_data: in std_logic_vector(7 downto 0); --接收数据寄存器,保存直至下一个数据来到rx_int: in std_logic --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送模块,使得串口正在进行接收数据得时候,发送模块不工作,避免了一个完整得数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块就已经将不正确得数据传输出去);end uart_tx;architecture behav of uart_tx issignal rx_int0: std_logic;signal rx_int1: std_logic;signal rx_int2: std_logic;signal neg_rx_int:std_logic;signal bps_start_r:std_logic;signal num:integer;signal tx_data:std_logic_vector(7 downto 0); --串口接收数据寄存器,保存直至下一个数据到来beginprocess(clk,rst_n)beginif (rst_n='0')thenrx_int0<='0';rx_int1<='0';rx_int2<='0';elseif (rising_edge(clk)) thenrx_int0<=rx_int;rx_int1<=rx_int0;rx_int2<=rx_int1;end if;end if;neg_rx_int <=not(rx_int1)and (rx_int2);end process;process(clk,rst_n)beginif (rst_n='0')thenbps_start_r<='0';tx_data<="00000000";elseif (rising_edge(clk)) thenif(neg_rx_int='1') then --接收到串口数据线rs232_rx得下降沿标志信号bps_start_r<='1'; --启动串口准备数据接收tx_data<=rx_data; --接收数据中断信号使能else if((num= 15) and (clk_bps='1')) then --接收完有用数据信息bps_start_r<='0'; --数据接收完毕,释放波特率启动信号end if;end if;end if;end if;bps_start<=bps_start_r;end process;process(clk,rst_n)beginif (rst_n='0')thenrs232_tx<='1';num<=0;elseif (rising_edge(clk)) thenif(clk_bps='1')thennum<=num+1;case num iswhen 1=>rs232_tx<='0';when 2=>rs232_tx<=tx_data(0);--发送第1bitwhen 3=>rs232_tx<=tx_data(1);--发送第2bitwhen 4=>rs232_tx<=tx_data(2);--发送第3bitwhen 5=>rs232_tx<=tx_data(3);--发送第4bitwhen 6=>rs232_tx<=tx_data(4);--发送第5bitwhen 7=>rs232_tx<=tx_data(5);--发送第6bitwhen 8=>rs232_tx<=tx_data(6);--发送第7bitwhen 9=>rs232_tx<=tx_data(7);--发送第8bitwhen 10=>rs232_tx<='1';when 11=>num<=15;when others=>null;end case;if(num=15) thennum<=0;end if;end if;end if;end if;end process;end behav;四、实验步骤1.建立新工程UART,选择芯片,型号为cyclone ii EP2C35F484C8。
串口通信知识点详解
串⼝通信知识点详解串⼝通信的基本概念:1.在计算机上进⾏数据的通信有两种⽅式。
串⾏⽅式和并⾏⽅式。
也就是串⼝通信和并⾏通信。
即串⼝通信是计算机传输数据的⼀种通信⽅式。
2.并⾏通信以字节为但是进⾏传输数据,相⽐于串⼝通信,他的速度快,传输距离近。
串⼝通信以⽐特位传输数据,相⽐于并⾏通信,他的传输速度慢,但是传输距离远。
并且串⼝通信是异步通信,因此,端⼝可以在⼀根线上发送数据的同时在另⼀根线上接收数据3.串⼝通信最重要的参数是波特率、数据位、停⽌位和奇偶校验。
对于两个进⾏通信的端⼝,这些参数必须匹配。
(1)波特率:传输速率。
如每秒钟传送240个字符,⽽每个字符格式包含10位(1个起始位,1个停⽌位,8个数据位),这时的波特率为240Bd,⽐特率为10位*240个/秒=2400bps。
(2)数据位:数据包中发送端想要发送的数据(3)停⽌位:⽤于表⽰单个包的最后⼀位,结束标志以及校正时钟同步(4)奇偶校验:检错⽅式。
⼀共有四种检错⽅式:偶、奇、⾼和低。
4.串⼝通信的应⽤场景:串⼝通信是指外设和计算机间,通过数据线按位进⾏传输数据的⼀种通讯⽅式。
这种通信⽅式使⽤的数据线少,在远距离通信中可以节约通信成本,但其传输速度⽐并⾏传输低。
⼤多数计算机(不包括笔记本)都包含两个RS-232串⼝。
串⼝通信也是仪表仪器设备常⽤的通信协议。
Windows下串⼝通信:1.在windows下,串⼝是作为⽂件进⾏处理。
2.串⼝通信分为四⼤步骤:打开串⼝,关闭串⼝,配置串⼝,读写串⼝(1)打开串⼝:使⽤CreateFile函数:HANDLE WINAPI CreateFile(_In_ LPCTSTR lpFileName,//要打开或创建的⽂件名_In_ DWORD dwDesiredAccess,//访问类型_In_ DWORD dwShareMode,//共享⽅式_In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,//安全属性_In_ DWORD dwCreationDisposition,//指定要打开的⽂件已存在或不存在的动作_In_ DWORD dwFlagsAndAttributes,//⽂件属性和标志_In_opt_ HANDLE hTemplateFile//⼀个指向模板⽂件的句柄);参数说明:1).lpFileName:要打开或创建的⽂件名2).dwDesiredAccess:访问类型。
串口通信步骤
串口通信步骤嘿,朋友们!今天咱就来讲讲串口通信那些事儿。
你想啊,串口通信就好比两个人聊天。
一个人发送信息,就像你跟朋友说话,把你的想法一股脑儿倒出来;另一个人接收信息,就如同朋友在认真听你讲。
那怎么开始这个“聊天”过程呢?首先得有合适的工具呀,就像你聊天得有手机或者嘴巴一样。
对于串口通信来说,就是要有串口线啦,这可是关键的连接纽带呢!然后呢,得设置好通信的参数,这就好比你和朋友约定好,用什么样的语言、什么样的语速来交流。
波特率、数据位、停止位这些参数都得设置对咯,不然就会像鸡同鸭讲,谁也听不懂谁。
接下来就是发送和接收数据啦!发送方把要表达的内容转化成数字信号,通过串口线传出去。
这就好像你把心里的话组织好,说出来给朋友听。
接收方呢,就静静地等着,一旦收到信号,就赶紧解读出来。
这里面可有意思啦!你想想,要是发送方说得太快,接收方会不会跟不上呀?就像你朋友说话像机关枪一样,你都来不及反应。
所以啊,这节奏得把握好。
还有啊,要是传输过程中出了点差错,那可咋办呢?就像你说话被风吹走了几个字,朋友没听清。
这时候就得有一些纠错机制啦,来确保信息的准确传达。
在实际应用中,串口通信可重要了呢!好多设备之间的交流都靠它。
比如说那些智能小玩意儿,它们之间要互相沟通,传递信息,就得靠串口通信这个小能手。
你说,这串口通信是不是很神奇?就像一个隐形的桥梁,连接着各种设备,让它们能协同工作。
反正啊,我觉得串口通信就像是一个神奇的魔法,让不同的设备能听懂彼此的语言,一起完成各种奇妙的任务。
咱可得好好了解它,掌握它,让它为我们服务呀!这就是我对串口通信的理解,你们觉得呢?。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机串行通信基础
▪随着多微机系统的广泛应用和计算机网络技术的普及,计算机的通信功能愈来愈显得重要。
计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。
▪通信有并行通信和串行通信两种方式。
在多微机系统以及现代测控系统中信息的交换多采用串行通信方式计算机串行通信基础
▪计算机通信是将计算机技术和通信技术的相结合,完成计算机与外部设备或计算机与计算机之间的信息交换。
可以分为两大类:并行通信与串行通信。
▪并行通信通常是将数据字节的各位用多条数据线同时进行传送
并行通信控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难。
串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送。
串行通信的特点:传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂。
串行通信的基本概念
一、异步通信与同步通信
1、异步通信
异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。
为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。
异步通信的数据格式:
异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个字符要附加2~3位用于起止位,各帧之间还有间隔,因此传输效率不高。
2、同步通信
同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。
此时,传输数据的位之间的距离均为“位间隔”的整数倍,同时传送的字符间不留间隙,即保持位同步关系,也保持字符同步关系。
发送方对接收方的同步可以通过两种方法实现。
面向字符的同步格式 :
面向位的同步格式 :
同步通信的特点是以特定的位组合“01111110”作为帧的开始和结束标志,所传输的一帧数据可以是任意位。
所以传输的效率较高,但实现的硬件设备比异步通信复杂。
1、传输速率
比特率是每秒钟传输二进制代码的位数,单位是:位/秒(bps )。
如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位、1个停止位、8个数据位),这时的比特率为: 10位×240个/秒 = 2400 bps 6.1.2 串行通信接口标准 一、RS-232C 接口
RS-232C 是EIA (美国电子工业协会)1969年修订RS-232C 标准。
RS-232C 定义了数据终端设备(DTE )与数据通信设备(DCE )之间的物理接口标准。
1、机械特性
RS-232C 接口规定使用25针连接器,连接器的尺寸及每个插针的排列位置都有明确的定义。
(阳头)
8位8位8位8位
16位
≥0位二、串行通信的传输方向
1、单工 单工是指数据传输仅能沿一个方向,不能实现反向传输。
2、半双工 半双工是指数据传输可以沿两个方向,但需要分时进行。
3、全双工 全双工是指数据可以同时进行双向传输。
近程通信连接
80C51的串行口
有两个物理上独立的接收、发送缓冲器SBUF ,它们占用同一地址99H ;接收器是双缓冲结构 ;发送缓冲器,因为发送时CPU 是主动的,不会产生重叠错误。
80C51串行口的控制寄存器
SCON 是一个特殊功能寄存器,用以设定串行口的工作方式、接收/发送控制以及设置状态标志:
SM0和SM1为工作方式选择位,可选择四种工作方式
PCON 中只有一位SMOD 与串行口工作有关
SMOD (PCON.7) 波特率倍增位。
在串行口方式1、方式2、方式3时,波特率与SMOD 有关,当SMOD=1时,波特率提高一倍。
复位时,SMOD=0。
方式1
方式1是10位数据的异步通信口。
TXD 为数据发送引脚,RXD 为数据接收引脚,传送一帧数据的格式如图所示。
其中1位起始位,8位数据位,1位停止位。
●SM2,多机通信控制位,主要用于方式2和方式3。
当接收机的SM2=1时可以利用收到的RB8来控制是否激活RI (RB8=0时不激活RI ,收到的信息丢弃;RB8=1时收到的数据进入SBUF ,并激活RI ,进而在中断服务中将数据从SBUF 读走)。
当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF ,并激活RI (即此时RB8不具有控制RI 激活的功能)。
通过控制SM2,可以实现多机通信。
在方式0时,SM2必须是0。
在方式1时,若SM2=1,则只有接收到有效停止位时,RI 才置1。
●REN ,允许串行接收位。
由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。
●TB8,在方式2或方式3中,是发送数据的第九位,可以用软件规定其作用。
可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。
在方式0和方式1中,该位未用。
●RB8,在方式2或方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧/数据帧的标志位。
在方式1时,若SM2=0,则RB8是接收到的停止位。
●TI ,发送中断标志位。
在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI 置1,向CPU 发中断申请。
在中断服务程序中,必须用软件将其清0,取消此中断申请。
●RI ,接收中断标志位。
在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI 置1,向CPU 发中断申请。
也必须在中断服务程序中,用软件将其清0,取消此中断申请。
1、方式1输出
2、方式1输入
用软件置REN 为1时,接收器以所选择波特率的16倍速率采样RXD 引脚电平,检测到RXD 引脚输入电平发生负跳变时,则说明起始位有效,将其移入输入移位寄存器,并开始接收这一帧信息的其余位。
接收过程中,数据从输入移位寄存器右边移入,起始位移至输入移位寄存器最左边时,控制电路进行最后一次移位。
当RI=0,且SM2=0(或接收到的停止位为1)时,将接收到的9位数据的前8位数据装入接收SBUF ,第9位(停止位)进入RB8,并置RI=1,向CPU 请求中断。
四、波特率的计算
在串行通信中,收发双方对发送或接收数据的速率要有约定。
通过软件可对单片机串行口编程为四种工作方式,其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定。
串行口的四种工作方式对应三种波特率。
由于输入的移位时钟的来源不同,所以,各种方式的波特率计算公式也不相同。
方式0的波特率 = fosc/12
方式2的波特率 =(2SMOD /64)· fosc 方式1的波特率 =(2SMOD /32)·(T1溢出率) 方式3的波特率 =(2SMOD /32)·(T1溢出率)
当T1作为波特率发生器时,最典型的用法是使T1工作在自动再装入的8位定时器方式(即方式2,且TCON 的TR1=1,以启动定时器)。
这时溢出率取决于TH1中的计数值。
T1 溢出率 = fosc /{12×[256 -(TH1)]}
在单片机的应用中,常用的晶振频率为:12MHz 和11.0592MHz 。
所以,选用的波特率也相对固定。
常用的串行口波特率以及各参数的关系如表所示。
D0 D1 D2 D3 D4 D5 D6 D7写入SBUF
停止位
TXD TI(中断标志)起始D0 D1 D2 D3 D4 D5 D6 D7停止位RXD RI(中断标志)
起始位采样脉冲
串行口工作之前,应对其进行初始化,主要是设置产生波特率的定时器1、串行口控制和中断控制。
具体步骤如下:
▪确定T1的工作方式(编程TMOD寄存器);
▪计算T1的初值,装载TH1、TL1;
▪启动T1(编程TCON中的TR1位);
▪确定串行口控制(编程SCON寄存器);
▪串行口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。
测试程序
#include <reg51.h>
main()
{
unsigned int test;
test=53;
//*****以下修改的***** TMOD=0x20; //定时器模式TL1=0xfd; //波特率9600 TH1=0xfd;
SCON=0xd8;
PCON=0x00;
TR1=1;
while(1)
{
//***以下修改的**
while(TI!=0); //等待发送允许SBUF=test;
while(TI!=1); //等待发送完毕TI=0; //标志复位
}
}。