资讯详情

串口通信笔记

概念

串口通信(Serial Communications)概念很简单,串口按位(bit)发送和接收字节。与串行通信相对的是并行通信。数据传输一般以字节传输,一个字节有8个位置。以并行通信为例,即会有8条线,每条线代表一个位置。一个字节可以通过一次传输传输,串口通信意味着数据只能通过一条线传输,一次只能通过一个位置传输。如果你想传输一个字节,你需要传输8次。就像小虎队的歌,把你的心,我的心,串起来,再烤一次。。串口通信是在线传输数据,所以称为串口。

通信方式

一般来说,设备之间的通信方式可分为并行通信和串行通信。它们之间的区别是:

串行通信分类

1、按数据传输方向分为:

单工:数据传输只支持数据在一个方向上传输;

半双工:允许数据在两个方向上传输。然而,在某个时刻,只允许数据在一个方向上传输,这实际上是一个单工通信的转换方向;它不需要独立的接收端和发送端,两者可以一起使用端口。

全双工:允许数据同时向两个方向传输。因此,全双工通信是两种单工通信方式的结合,需要独立的接收端和发送端。

2.按通信方式分为:

同步通信:带时钟同步信号传输。SPI,IIC通信接口。

异步通信:无时钟同步信号。UART单总线(通用异步收发器)。

异步通信的两个关键点:

一是数据单元-帧,是双方约定的数据格式;

第二,波特率决定了‘帧’中每个人的时间长度。

异步通信的特点:不要求收发时钟严格一致,容易实现,设备成本小,但每个字符应增加2~3位,帧间隔,传输效率低。

在同步通信中,在时钟信号的驱动下,双方将在收发设备上方使用信号线传输信号进行协调和同步数据。例如,在通信中,双方通常规定在时钟信号的上下沿采样数据线。

时钟信号不用于异步通信中的数据同步。它们直接穿插一些用于同步的信号位置,或包装主题数据,以数据帧的形式传输数据。通信还需要双方规定数据的传输速率(即波特率),以便更好地同步。常用的波特率是4800bps、9600bps、115200bps等。

在同步通信中,数据信号传输的大部分内容是有效数据,而异步通信将包含各种数据帧标识符,因此同步通信效率高,但同步通信时钟允许误差小,一点时钟错误可能导致数据混乱,异步通信时钟允许误差大。

串口通信的数据格式

一个字符一个字符传输,每个字符一个接一个地传输,当传输一个字符时,总是从开始开始,以停止结束,字符之间没有固定的时间间隔要求。 每个字符前面都有一个起始位置(低电平),字符本身由7位数据位组成,然后字符后面是一个验证位置(验证位置可以是奇怪的验证、偶尔验证或无验证位置),最后是一个或一个半或两个停止位置,停止位置后面是长空闲位置,停止位置和空闲位置规定为高电平。在实际传输过程中,每个人的信号宽度都与波特率有关。波特率越高,宽度越小。在传输之前,双方必须使用相同的波特率设置。

在标准ASCII码中,其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传输过程中用查是否有错误的方法,一般分奇校验和偶校验。奇数验证规定:正确的代码字节中1的数量必须是奇数,如果不是奇数,则在最高水平b7加1;偶校验规定,正确代码字节中1的数量必须是偶数,如果不是偶数,则在最高位置b7添1。

停止位按长度计算。串行异步通信从计时开始,以单位时间为间隔(单位时间为波特率倒数),接受规定的数据位和奇偶校准位,并组装成字符并行字节;然后接收规定长度的停止位1。所以停止位是1,1.5是它的长度,即停止高电平保持1.五个单位的时间长度。一般来讲,停止位有1,1.5.两个单位的三个长度

尽管比较字节(byte)并行通信缓慢,但串口可以用另一根线接收数据,同时使用一根线发送数据。实现远距离通信非常简单。比如IEEE488定义并行通行状态时,规定设备线总长度不得超过20米,任何两个设备之间长度不得超过2米;串口长度可达1200米。串口用于典型ASCII传输代码字符。通信由地线、发送和接收三条线完成。由于串口通信是异步的,端口可以在另一条线上发送数据并接收数据。握手用其他线,但不必要。波特率、数据位、停止位和奇偶校验是串口通信最重要的参数。对于两个进行通信的端口,这些参数必须匹配。

参数介绍:

a,波特率:这是衡量符号传输速率的参数。指信号调制后单位时间内的变化,即单位时间内载波参数的变化次数,如每秒传输240个字符,每个字符格式包含10个(1个起始位、1个停止位、8个数据位),波特率为240Bd,比特率为10位*240个/秒=2400bps。一般调制速率大于波特率,如曼彻斯特编码)。电话线的波特率一般为14400、28800和36600。波特率可以远远大于这些值,但波特率与距离成反比。高波特率常用于放置在非常近的仪器之间的通信。典型的例子是GPIB设备通信。

b,数据位:这是衡量通信中实际数据位的参数。当计算机发送信息包时,实际数据往往不是8,标准值是6、7和8。如何设置取决于您想要传输的信息。例如,标准ASCII代码为0~127(7位)。扩展的ASCII代码为0~255(8位)。如果数据使用简单的文本(标准) ASCII然后每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位、数据位和奇偶校准位。由于实际数据位取决于通信协议的选择,术语包是指任何通信。

c,停止:用来表示单个包的最后一个。典型值为1,1.5和2位。由于数据定期在传输线上,每个设备都有自己的时钟,通信中两个设备之间很可能会有小的不同步。因此,停止不仅是传输的结束,也是计算机校正时钟同步的机会。停止位数越多,对不同时钟同步的容忍度越大,但数据传输率也越慢。

d,奇偶校准位置:串口通信中检错的简单方法。偶、奇、高、低有四种检错方法。当然没有校验位也是可以的。对于偶和奇校验,串口将设置校验位(数据位后面的一个),以确保传输的数据具有偶或奇逻辑高。例如,如果数据为011,则对于偶校验,校验位为0,确保高逻辑位数为偶数。若为奇校验,校验位为1,则有3个逻辑高位。高低不真实的检查数据,简单的位置逻辑高或低逻辑验证。这样,接收设备就可以知道一个位置的状态,并有机会判断是否有噪音干扰通信或传输和接收数据是否不同步。

串口通信是指通过数据信号线的外设和计算机间 、地线、控制线等,一种按位传输数据的通信方式。这种通信方式使用的数据线较少,可以节省远程通信的通信成本,但其传输速度低于平行传输。

串口是计算机上非常常见的设备通信协议。大多数计算机(不包括笔记本电脑)基于两个RS-232串口。串口也是仪器设备的通信协议;许多GPIB还带有兼容设备RS-232口。串口通信协议也可用于获取远程采集设备的数据。

RS-232(ANSI/EIA-232标准)是IBM-PC以及兼容机上的串行连接标准。可用于连接鼠标、打印机或Modem,工业仪器仪表也可以同时连接。在实际应用中,用于改进驱动和连接RS-传输长度或速度通常超过标准值。RS-232只限于PC串口与设备间点对点通信。RS-232串口通信离为50英尺。

串口通信协议

串口通信中常用的协议包括RS-232、RS-422和RS-485。

RS-232(ANSI/EIA-232标准)是IBM-PC以及兼容机上的串行连接标准。可用于连接鼠标、打印机或Modem,工业仪器仪表也可以同时连接。在实际应用中,用于改进驱动和连接RS-传输长度或速度通常超过标准值。RS-232只限于PC串口与设备间点对点通信。RS-232串口通信离为50英尺。

在我们的电脑上,通常有一个9针串行接口,称为RS232接口,它和UART通信有关联,但是由于现在笔记本电脑不带9针串口,所以和单片机通信越来越趋于使用USB虚拟串口。全双工工作,需要地线、发送线和接收线三条线。RS232只能实现点对点通信。

九针串口分工头和母头:

公头5下4,上5从左到右.2.3.4.5.下4从左到右6.7.8.9;

母头5下4,上5从左到右.4.3.2.1.下4从左到右9.8.7.6;

DB-9针连接头(常见)RS232串口)

RS-232针脚功能:

数据:

TXD(pin 三、串口数据输出(Transmit Data)

RXD(pin 二、串口数据输入(Receive Data)

握手:

RTS(pin 7):发送数据请求(Request to Send)

CTS(pin 8):清除发送(Clear to Send)

DSR(pin 6):数据发送就绪(Data Send Ready)

DCD(pin 1):数据载波检测(Data Carrier Detect)

DTR(pin 4):数据终端就绪(Data Terminal Ready)

地线:

GND(pin 5):地线

其它

RI(pin 9):铃声指示

RS232串口缺点

  1. 接口信号电平值高,接口电路芯片易损坏。
  2. 最高波特率为19200bps。
  3. 抗干扰能力差。
  4. 传输距离有限,一般为15m以内。
  5. 点对点通信只能实现。

RS-422(EIA RS-422-AStandard)是Apple的Maintosh计算机的串口连接标准。RS-422使用差分信号,RS-232使用非平衡参考地的信号。差分传输使用两根线发送和接收信号,对比RS-232,它能更好的抗噪声和有更远的传输距离。在工业环境中更好的抗噪性和更远的传输距离是一个很大的优点。

RS-485(EIA-485标准)是RS-422的改进,因为它增加了设备的个数,从10个增加到32个,同时定义了在最大设备个数情况下的电气特性,以保证足够的信号电压。有了多个设备的能力,你可以使用一个单个RS-485口建立设备网络。出色抗噪和多设备能力,在工业应用中建立连向PC机的分布式设备网络、其他数据收集控制器、HMI或者其他操作时,串行连接会选择RS-485。RS-485是RS-422的超集,因此所有的RS-422设备可以被RS-485控制。RS-485可以用超过4000英尺的线进行串行通行。

图6-1 485抑制共模干扰示意图

RS485串口接口定义:

A或Data+(D+)或+:信号正 B或Data-(D-)或-:信号负

计算机与RS485仪表通讯 计算机自带的串口只有RS232,没有RS485,如果计算机要与RS485串口的仪表进行通讯,必须使用串口转换器或装上RS485串口转换卡后才能进行通讯。

RS485串口的终端电阻

  1. 一般情况下不需要增加终端电阻,只有在RS485通信距离超过100米的情况下,要在RS485通讯的开始端和结束端增加终端电阻,RS485典型终端电阻是120欧。
  2. 终端电阻是为了消除在通信电缆中的信号反射在通信过程中,有两种信号因导致信号反射:阻抗不连续和阻抗不匹配。
  3. 阻抗不连续,信号在传输线末端突然遇到电缆阻抗很小甚至没有,信号在这个地方就会引起反射。消除这种反射的方法,就必须在电缆的末端跨接一个与电缆的特性阻抗同样大小的终端电阻,使电缆的阻抗连续。由于信号在电缆上的传输是双向的,因此,在通讯电缆的另一端可跨接一个同样大小的终端电阻。
  4. 引起信号反射的另一原因是数据收发器与传输电缆之间的阻抗不匹配。这种原因引起的反射,主要表现在通讯线路处在空闲方式时,整个网络数据混乱。要减弱反射信号对通讯线路的影响,通常采用噪声抑制和加偏置电阻的方法。在实际应用中,对于比较小的反射信号,为简单方便,经常采用加偏置电阻的方法。

随着技术的发展,工业上还有RS232串口通信的大量使用,但是商业技术的应用上,已经慢慢的使用USB转UART技术取代了RS232串口,绝大多数笔记本电脑已经没有串口这个东西了,那我们要实现单片机和电脑之间的通信该怎么办呢?

们只需要在电路上添加一个USB转串口芯片,就可以成功实现USB通信协议和标准UART串行通信协议的转换,在我们的开发板上,我们使用的是CH340T这个芯片

我们需要用跳线帽把中间和下边的针短接在一起。右侧的CH340T这个电路很简单,把电源、晶振接好后,6脚和7脚的DP和DM分别接USB口的2个数据引脚上去,3脚和4脚通过跳线接到了我们单片机的TXD和RXD上去。

CH340T的电路里3脚位置加了个4148的二极管,是一个小技巧。因为STC89C52这个单片机下载程序时需要冷启动,就是先点下载后上电,上电瞬间单片机会先检测需要不需要下载程序。虽然单片机的VCC是由开关来控制,但是由于CH340T的3脚是输出引脚,如果没有此二极管,开关后级单片机在断电的情况下,CH340T的3脚和单片机的P3.0(即RXD)引脚连在一起,有电流会通过这个引脚流入后级电路并且给后级的电容充电,造成后级有一定幅度的电压,这个电压值虽然只有两三伏左右,但是可能会影响到正常的冷启动。加了二极管后,一方面不影响通信,另外一个方面还可以消除这种不良影响。这个地方可以暂时作为了解,大家如果自己做这类电路,可以参考一下。

UART串口波特率,常用的值是300、600、1200、2400、4800、9600、14400、19200、28800、38400、57600、115200等速率。IO口模拟UART串行通信程序是一个简单的演示程序,我们使用串口调试助手下发一个数据,数据加1后,再自动返回。

串口调试助手,这里我们直接使用STC-ISP软件自带的串口调试助手,先把串口调试助手的使用给大家说一下,如图11-6所示。第一步要选择串口助手菜单,第二步选择十六进制显示,第三步选择十六进制发送,第四步选择COM口,这个COM口要和自己电脑设备管理器里的那个COM口一致,波特率按我们程序设定好的选择,我们程序中让一个数据位持续时间是1/9600秒,那这个地方选择波特率就是选9600,校验位选N,数据位8,停止位1。

串口调试助手的实质就是利用电脑上的UART通信接口,发送数据给我们的单片机,也可以把我们的单片机发送的数据接收到这个调试助手界面上。

因为初次接触通信方面的技术,所以我把后面的IO模拟串口通信程序进行一下解释,大家可以边看我的解释边看程序,把底层原理先彻底弄懂。

变量定义部分就不用说了,直接看main主函数。首先是对通信的波特率的设定,在这里我们配置的波特率是9600,那么串口调试助手也得是9600。配置波特率的时候,我们用的是定时器T0的模式2。模式2中,不再是TH0代表高8位,TL0代表低8位了,而只有TL0在进行计数,当TL0溢出后,不仅仅会让TF0变1,而且还会将TH0中的内容重新自动装到TL0中。这样有一个好处,就是我们可以把想要的定时器初值提前存在TH0中,当TL0溢出后,TH0自动把初值就重新送入TL0了,全自动的,不需要程序中再给TL0重新赋值了,配置方式很简单,大家可以自己看下程序并且计算一下初值。

波特率设置好以后,打开中断,然后等待接收串口调试助手下发的数据。接收数据的时候,首先要进行低电平检测while(PIN_RXD),若没有低电平则说明没有数据,一旦检测到低电平,就进入启动接收函数StartRXD()。接收函数最开始启动半个波特率周期,初学可能这里不是很明白。大家回头看一下我们的图11-2里边的串口数据示意图,如果在数据位电平变化的时候去读取,因为时序上的误差以及信号稳定性的问题很容易读错数据,所以我们希望在信号最稳定的时候去读数据。除了信号变化的那个沿的位置外,其它位置都很稳定,那么我们现在就约定在信号中间位置去读取电平状态,这样能够保证我们读的一定是正确的。

一旦读到了起始信号,我们就把当前状态设定成接收状态,并且打开定时器中断,第一次是半个周期进入中断后,对起始位进行二次判断一下,确认一下起始位是低电平,而不是一个干扰信号。以后每经过1/9600秒进入一次中断,并且把这个引脚的状态读到RxdBuf里边。等待接收完毕之后,我们再把这个RxdBuf加1,再通过TXD引脚发送出去,同样需要先发一位起始位,然后发8个数据位,再发结束位,发送完毕后,程序运行到while(PIN_RXD),等待第二轮信号接收的开始。

RS-232通信方式允许简单连接三线:Tx、Rx和地线。但是对于数据传输,双方必须对数据定时采用使用相同的波特率。尽管这种方法对于大多数应用已经足够,但是对于接收方过载的情况这种使用受到限制。这时需要串口的握手功能。在这一部分,我们讨论三种最常用的RS-232握手形式:软件握手、硬件握手和Xmodem。

a,软件握手:我们讨论的第一种握手是软件握手。通常用在实际数据是控制字符的情况,类似于GPIB使用命令字符串的方式。必须的线仍然是三根:Tx,Rx和地线,因为控制字符在传输线上和普通字符没有区别,函数SetXModem允许用户使用或者禁止用户使用两个控制字符XON和XOFF。这些字符在通信中由接收方发送,使发送方暂停。

例如:假设发送方以高波特率发送数据。在传输中,接收方发现由于CPU忙于其他工作,输入buffer已经满了。为了暂时停止传输,接收方发送XOFF,典型的值是十进制19,即十六进制13,直到输入buffer空了。一旦接收方准备好接收,它发送XON,典型的值是十进制17,即十六进制11,继续通信。输入buffer半满时,LabWindows发送XOFF。此外,如果XOFF传输被打断,LabWindows会在buffer达到75%和90%时发送XOFF。显然,发送方必须遵循此守则以保证传输继续。

b,硬件握手:第二种是使用硬件线握手。和Tx和Rx线一样,RTS/CTS和DTR/DSR一起工作,一个作为输出,另一个作为输入。第一组线是RTS(Request to Send)和CTS(Clear toSend)。当接收方准备好接收数据,它置高RTS线表示它准备好了,如果发送方也就绪,它置高CTS,表示它即将发送数据。另一组线是DTR(DataTerminal Ready)和DSR(Data SetReady)。这些线主要用于Modem通信。使得串口和Modem通信他们的状态。例如:当Modem已经准备好接收来自PC的数据,它置高DTR线,表示和电话线的连接已经建立。读取DSR线置高,PC机开始发送数据。一个简单的规则是DTR/DSR用于表示系统通信就绪,而RTS/CTS用于单个数据包的传输。

在LabWindows,函数SetCTSMode使能或者禁止使用硬件握手。如果CTS模式使能,LabWindows使用如下规则:

当PC发送数据:

RS-232库必须检测CTS线高后才能发送数据。

当PC接收数据:

如果端口打开,且输入队列有空接收数据,库函数置高RTS和DTR。

如果输入队列90%满,库函数置低RTS,但使DTR维持高电平。

如果端口队列近乎空了,库函数置高RTS,但使DTR维持高电平。

如果端口关闭,库函数置低RTS和DTR。

c,XModem握手:最后讨论的握手叫做XModem文件传输协议。这个协议在Modem通信中非常通用。尽管它通常使用在Modem通信中,XModem协议能够直接在其他遵循这个协议的设备通信中使用。在LabWindows中,实际的XModem应用对用户隐藏了。只要PC和其他设备使用XModem协议,在文件传输中就使用LabWindows的XModem函数。函数是XModemConfig,XModemSend和XModemReceive。

XModem使用介于如下参数的协议:start_of_data、end_of_data、neg_ack、wait_delay、start_delay、max_tries、packet_size。这些参数需要通信双方认定,标准的XModem有一个标准的定义:然而,可以通过XModemConfig函数修改,以满足具体需要。这些参数的使用方法由接收方发送的字符neg_ack确定。这通知发送方其准备接收数据。它开始尝试发送,有一个超时参数start_delay;当超时的尝试超过max_ties次数,或者收到接收方发送的start_of_data,发送方停止尝试。如果从发送方收到start_of_data,接收方将读取后继信息数据包。包中含有包的数目、包数目的补码作为错误校验、packet_size字节大小的实际数据包,和进一步错误检查的求和校验值。在读取数据后,接收方会调用wait_delay,然后向发送方发送响应。如果发送方没有收到响应,它会重新发送数据包,直到收到响应或者超过重发次数的最大值max_tries。如果一直没有收到响应,发送方通知用户传输数据失败。

由于数据必须以pack_size个字节按包发送,当最后一个数据包发送时,如果数据不够放满一个数据包,后面会填充ASCII码NULL(0)字节。这导致接收的数据比原数据多。在XModem情况下一定不要使用XON/XOFF,因为XModem发送方发出包的数目很可能增加到XON/OFF控制字符的值,从而导致通信故障。

波特率表示每秒钟传送的码元符号的个数,是衡量数据传送速率的指标,它用单位时间内载波调制状态改变的次数来表示。

在信息传输通道中,携带数据信息的信号单元叫码元,每秒钟通过信道传输的码元数称为码元传输速率,简称波特率。波特率是传输通道频宽的指标。

中文名外文名其它名作用

波特率 Baud rat 码元速率 度量符号传输速率

波特率(Boud Rate)就是在串口通信中每秒能够发送的位数(bits/second)。MCS-51串行端口在四种工作模式下有不同的波特率计算方法。其中,模式0和模式2波特率计算很简单;模式1和模式3的波特率选择相同,故在此仅以工作模式1为例来说明串口通信波特率的选择。

在串行端口工作于模式1,其波特率将由计时/计数器1来产生,通常设置定时器工作于模式2(自动再加模式)。在此模式下波特率计算公式为:

波特率=(1+SMOD)晶振频率/(384(256-TH1))

其中,SMOD——寄存器PCON的第7位,称为波特率倍增位;

TH1——定时器的重载值。

在选择波特率的时候需要考虑两点:首先,系统需要的通信速率。这要根据系统的运作特点,确定通信的频率范围。然后考虑通信时钟误差。使用同一晶振频率在选择不同的通信速率时通信时钟误差会有很大差别。为了通信的稳定,我们应该尽量选择时钟误差最小的频率进行通信。

下面举例说明波特率选择过程:

假设系统要求的通信频率在20000bit/s以下,晶振频率为12MHz,设置SMOD=1(即波特率倍增)。则

TH1=256-62500/波特率

根据波特率取值表,我们知道可以选取的波特率有:1200,2400,4800,9600,19200。列计数器重载值,通信误差如下表:

因此,在通信中,最好选用波特率为1200,2400,4800中的一个。

单片机与matlab的串口通信

Matlab提供了对串口进行打开、关闭、以及串口参数设置等操作的一系列函数。利用这些函数可以选择串口号、 设置串口通信参数( 波特率、 数据位、停止位、 校验位等)、进行中断控制、流控制。从建立串口通信到结束串口通信的完整流程包括以下几个步骤:

1、创建串口对象,实现该功能的函数为:

obj=serial(port,‘PropertyName’,PropertyValue,…);

例如:obj= serial(com3,'BaudRate’4800)

或使用以下默认设置,创建串口对象,在命令串口输入以下代码,第二句是查看其obj默认状态

obj = serial(‘com3’);

obj

其中有两个重要设置项

BaudRate: 9600 % 波特率默认9600

Terminator: ‘LF’ %串口触发字符“换行符”

2、设置或者修改串口通信参数,实现该功能的函数为:

set(obj,‘PropertyName’,PropertyValue,);

例如:set(obj,'BaudRate’4800);

这样,我们就发现串口的一些基本设置,可以在创建串口时设置,也可以创建串口之后再进行设置。

3、打开串口,实现该功能的函数为:

fopen(obj);

obj即为前边创建的串口对象。

其中,步骤2和3顺序是完全可以颠倒的。

4、从串口读写数据,在前面三个步骤正常完成后, 即可以从串口读数据或者向串口写数据, 也就是接

收或者发送数据。

这里我介绍几个常用函数,读函数:fread,fscanf;写函数:fwrite,fprintf.

A = fread(obj,size); %从串口obj读取size字节长短的二进制数据,以数组形式存于A

str = fscanf(obj); %从串口obj读取字符或字符串(ASCII码)形式数据,以字符数组形式存于str

fwrite(obj,A); % 以二进制形式向obj写入数据A

fprintf( obj,str); %以字符(ASCII码)形式向串口写数据str(字符或字符串)

5、关闭串口以及释放串口对象占用的存储空间。

fclose(obj); % 关闭串口

delete(obj); % 释放串口对象占用的内存空间,

clear obj; % 释放串口对象在Matlab工作区中占用的存储空间

下一篇讲解着几个函数在实际的应用及不足。

实例1:在51单片机下载串口代码后,在matlab上执行如下代码:

[plain] view plain copysr3 = serial(‘COM3’); % 使用默认设置创建串口sr3

fopen(sr3); %打开串口

fprintf(sr3,‘xxx’); % 给串口写入数据

str = fscanf(sr3) %读取串口数据(无分号,可在Matlab工作区实时查看)

fclose(sr3); %关闭串口

delete(sr3);

clear sr3;

串口中断设置及中断处理函数

要实现自动收发数据,还需要定义串口中断处理函数以及触发串口中断的方式。定义触发串口中断的方式其目的是为了在串口检测到接收数据的时候,通知并启动串口数据接收函数进行数据接收操作; 在串口输出缓存为空的时候, 通知启动串口数据发送函数。

1、触发串口中断的方式。

Matlab检测到串口通信事件,从而触发串口中断。串口读写的事件包括: Bytes available,Outputempty。其中Bytes available事件有两种: 一种是接收到的字符数达到人工设定的数目时,则系统产生该事件; 另一种是当接收到指定字符时, 系统产生该事件。Output empty事件是在系统检测到输出缓存区为空时, 产生该事件。

2、中断方式设置

Bytes available 事件

set(obj,‘BytesAvailableFcnMode’,‘byte’);

set(obj,‘BytesAvailableFcnCount’, 240); %串口检测到输入缓存中到达了240个字符数据时,触发串口中断。或 :

set(obj,‘BytesAvailableFcnMode’,‘terminator’);

set(obj,‘terminator’,‘H’); %当串口检测到字符H时,则触发串口中断

Output empty事件

输出缓存为空事件的产生。该事件由系统自动检测产生,不需要用户特别设置。该事件一般在输出缓存中的最后一个字符发送完毕后产生。用户可以定义该事件引起的串口中断处理函数。

3、串口中断处理函数

串口中断处理函数是重点中的重点,我查阅过一些文档,串口通信时接收数据一般分两种方式,一种是查询方式,一种是中断处理方式,了解处理器工作的人知道,使用查询方式需不断查询,耗用内存,效率十分低。所以实际通信过程中都使用中断方式,这就需要设置中断触发方式,中断处理函数。

很多参考文档都是使用matlab自带回调函数,再添加自己的代码,在最开始我也尝试这种方法,但发现实在太麻烦,还是选择自己写,其实很简单,只要注意几个细节问题,就能得到正常运行的函数。

串口中断处理函数定义:

obj. BytesAvailableFcn=@ReceiveCallback;

再自行编写中断处理函数。

实例2:51单片机端依然使用串口代码,matlab执行如下函数:

  1. 485总线结构理论上传输距离达到1200米,一般是指通讯线材优质达标,波特率9600,只有一台485设备才能使得通讯距离达到1200米,而且能通讯并不代表每次通讯都正常,所以通常485总线实际的稳定通讯距离远远达不到1200米。负载485设备多,线材阻抗不同时,通讯距离更短。
  2. 仪表使用RS485通讯时,必要时,请接入终端电阻,以增强系统的抗干扰性,典型的终端电阻阻值是120欧。

主机与从机:在通讯系统中起主要作用、发布主要命令的称为主机,接受命令的称为从机。

  1. 连续方式:指主机不需要发布命令,从机就能自动地向主机发送数据。
  2. 指令方式:指主机向从机发布命令,从机根据指令执行动作,并将结果“应 答”给主机的模式。
  3. 输出数据类型:指在连续方式通讯时,从机输出给主机的数据类型。
  4. 通讯协议:指主机与从机通讯时,按哪一种编码规则来通讯。
  5. 波特率:主从机之间通讯的速度。
  6. 数据位:每次传输数据时,数据由几位组成。
  7. 校验位:数据传输错误检测,可以是奇校验、偶校验或无校验。
  8. 地址:每一台从机的编号。

主从机之间通讯设置要点

要点一:主/从RS232/485硬件有无设置正确,通讯线有无接对。有些通讯板卡是RS4与RS485共用的,依靠板上跳线来实现的,有些仪表RS232/485也需要通讯跳 线来实现。 要点二:主机上的通讯端口有无设置正确;超时(一般设置为2s)、通讯延时(一般置为5~20ms)、ACK信号延时(一般设置为0ms)有无设置正确。 要点三:主/从机通讯协议有无选择正确。 要点四:主/从机波特率有无选择正确。 要点五:主/从机数据位有无选择正确。数据位可以选择7位,8位。 要点六:主/从机校验位有无选择正确。校验位一般可选择偶校验、奇校验、无校验。 要点七:主/从机停止位有无选择正确。停止位可以选择1位、1.5位还是2位。 要点八:从机地址有无选择正确。 要点九:主/从机的通讯方式有无选择正确。

USB转串口通信

随着技术的发展,工业上还有RS232串口通信的大量使用,但是商业技术的应用上,已经慢慢的使用USB转UART技术取代了RS232串口,绝大多数笔记本电脑已经没有串口这个东西了,那我们要实现单片机和电脑之间的通信该如何办呢?

我们只需要在我们电路上添加一个USB转串口芯片,就可以成功实现USB通信协议和标准UART串行通信协议的转换,在我们的开发板上,我们使用的是CH340G这个芯片,如图11-1所示。

图11-1 USB转串口电路

CH340G这个电路很简单,把电源电路,晶振电路接好后,6脚和7脚的UD+和UD-分别接USB口的2个数据引脚上去,3脚和4脚接到了我们单片机的TXD和RXD上去。

CH340G的电路里2脚位置加了个4148的二极管,是一个小技巧。因为我们的STC89C52RC这个单片机下载程序需要冷启动,就是先点下载后上电,上电瞬间单片机会先检测需要不需要下载程序。虽然单片机的VCC是由开关来控制,但是由于CH340G的2脚是输出引脚,如果没有此二极管,开关后级单片机在断电的情况下,CH340G的2脚和单片机的P3.0(即RXD)引脚连在一起,有电流会通过这个引脚流入后级电路并且给后级的电容充电,造成后级有一定幅度的电压,这个电压值虽然只有两三伏左右,但是可能会影响到我们的冷启动。加了二极管后,一方面不影响通信,另外一个方面还可以消除这种问题。

软件协议

OSI协议和TCP/IP协议 (1)OSI协议

OSI七层参考模型不是通讯标准,它只给出一个不会由于技术发展而必须修改的稳定模型,使有关标准和协议能在模型定义的范围内开发和相互配合。

一般的通讯协议只符合OSI七层模型的某几层,如: EIA-RS-232-C:实现了物理层。 IBM的SDLC(同步数据链路控制规程):数据链路层。ANSI的ADCCP

(先进数据通讯规程):数据链路层。IBM的BSC(二进制同步通讯协议):数据链路层。应用层的电子邮件协议SMTP只负责寄信、POP3只负责收信。

(2)TCP/IP协议

实现了五层协议:

(1)物理层:对应OSI的物理层。

(2)网络接口层:类似于OSI的数据链路层。

(3)Internet层:OSI模型在Internet网使用前提出,未考虑网间连接。

(4)传输层:对应OSI的传输层。

(5)应用层:对应OSI的表示层和应用层。

本文作者:浅滩浅 本文链接:https://www.cnblogs.com/cstdio1/p/11175762.html 关于博主:评论和私信会在第一时间回复。或者直接私信我。 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处! 声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力! 不一样的烟火 分类: 大作业 好文要顶 关注我 收藏该文 浅滩浅 关注 - 1 粉丝 - 24 +加关注 20 « 上一篇: os期末复习 » 下一篇: 华为2019秋招笔试真题 posted @ 2019-07-12 14:10 浅滩浅 阅读(3570) 评论(0) 编辑 收藏 举报 发表评论 编辑 预览 支持 Markdown

自动补全 退出 订阅评论

[Ctrl+Enter快捷键提交]

编辑推荐: · 一个故事看懂 CPU 的 TLB · CSS 奇技淫巧 | 妙用混合模式实现文字镂空波浪效果 · 记一次 .NET 某上市工业智造 CPU+内存+挂死 三高分析 · 深入 xLua 实现原理之 C# 如何调用 Lua · 记一次 k8s pod 频繁重启的优化之旅 最新新闻: · 我并非看空B站,只是觉得它做不到4亿用户(2021-09-29 08:44) · 支付垄断“破防” 多巨头全面开放支付渠道(2021-09-29 08:34) · Facebook将公布关于Instagram对青少年影响的内部研究报告(2021-09-29 08:28) · 瑞幸咖啡逆袭后,仍面临两道难关(2021-09-29 08:26) · 吉利要做手机了!李书福刚刚签字:做高端,打全球市场(2021-09-29 08:22) » 更多新闻…

串口通信 发表于 2019-07-12 14:10阅读:3570评论:0推荐:2

大作业

This blog has running : 1070 d 1 h 45 m 53 sღゝ◡╹)ノ♡ Copyright © 2021 浅滩浅 Powered by .NET 6 on Kubernetes Theme version: v1.3.2 / Loading theme version: v1.3.2

标签: 型公头负载终端连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台