串口通信 文档整理

串口通信概念

        串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。

串口通信原理

        通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配:   

  a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。   

  b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。   

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

       d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位为1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。

串口通信原理--通信前的准备工作

        在具体操作串口之前需要对单片机的一些与串口有关的特殊功能寄存器进行初始化设置,主要是设置产生波特率的定时器1、串行口控制和中断控制。具体步骤如下:

  1.确定T1的工作方式(编程TMOD寄存器)

  2.计算T1的初值,载入TH1、TL1

  3.启动T1(编程TCON中的TR1位)

  4.确定串行口工作方式(编程SCON寄存器)

       5.串行口工作在中断方式时,要进行中断设置(编程IE,IP)

串行数据的发送实际上就是靠改变IO口电平来实现的,IO口在同一时间就只能表示两种状态:高低电平,对应数据位0或1。串口第次发送8位数据就是让IO口在发送时间内变化8次。

为什么是8位,因为串口在方式1是以字节为单位发送的。而为什么串口在方式1要以字节为单位呢? 这是在硬件设计之初就确定好的,是串口标准。你我是不能改变的。
发送时间是由波特率决定的,波特率就是指每秒钟发送多少个bit位。
串口标准中:要发送一个数据,还得加上一些其它的东西,比如起始位、停止位等。
a=01;SUBF=a;单片机执行后,就会将a中的8个位送到SUBF缓冲器中,SUBF也是一个字节。 然后单片机将会按设置好的参数启动串口,将SUBF中的数据一位一位的送到IO口上,即TXD引脚上,至于起始位、停止位些是由串口自动实现的,只要设置好后,不需去理会。时间当然也是由波特率决定的。
综上所述,在使用单片机串口时,波特率的设置是必不可少的。两个设备要通信,他们的波特率、停止位、数据位都是必不可少的。

你可能感兴趣的:(其他,嵌入式硬件,硬件工程)