PC机与单片机串行通信的实现(1)

时间:12-03-03 栏目:单片机 作者:JH单片机 评论:0 点击: 5,234 次



PC机与单片机之间的通信,大部分采用串行通信(RS232)接口来实现。有些人说是计算机控制单片机或者说单片机控制计算机,那都是肤浅的叫法,一般来说计算机功能较为强大,与单片机进行通信的时候,称为上位机,也叫主机。而单片机就充当下位机,也就是从机。这很好理解,从机必须听从主机的命令,完成相应任务,然后给主机“应答”。

对于PC机与单片机进行串口通信,其实就是了解双机、多机串行通信原理,实现双机、多机之间串行通信数据的收发。这也是一个比较完整的一套系统,必须熟悉硬件的情况下,再进行软件通信的编写。

简单来说,硬件电路原理包括通信之间电平的转换,接口电路的接法。软件包括单片机程序编写、上位机(PC机)软件的编写,自定义通信数据格式等等。

首先来了解一下串行通信的基本原理,很多读者看到大篇文字就不耐烦了。其实这样是学不好电子的。一个理工科男生,要做一个技术“宅男”,就要耐得住“寂寞”,好好把我下面写的内容都看完。

RS232接口标准就是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”大概了解一下就可以了。

接口定义:

RS232(DB9)
1 DCD 载波检测
2 RXD 接收数据
3 TXD 发送数据
4 DTR 数据终端准备好
5 SG 信号地
6 DSR 数据准备好
7 RTS 请求发送
8 CTS 允许发送
9 RI 振铃提示

一般来说计算机跟单片机来说,只用到了2、3、5三根线,分别是RXD、TXD和SG(GND)线。

好了,你前进了一大步了。接下来是计算机与单片机接口的连接。也就是说电平之间的转换。一般采用MAX232芯片来做转换。

RS232信号电平为:
逻辑1(MARK)=-3V~-15V
逻辑0(SPACE)=+3~+15V

而单片机串口信号电平为TTL电平:
逻辑1为大于3.6V
逻辑0为小于0.3V

因此之间必须采用电平转换芯片进行信号电平转换,方能保证通信。常用的有MAX232,配接4个1μF电解电容即可完成RS232电平与TTL电平之间的转换。其原理图如下图所示。转换完毕的串口信号TXD,RXD直接和 80C31的串行口连接。


接下来是重点。通信协议,这个建议看书,主要涉及到通信方式,波特率和数据帧格式。这里简单讲讲。

通信协议:

通信协议是指通信双方的一种约定。在PC机与单片机通信中,PC机承担主控任务,负责控制参数的设定,单片机接收PC机指令,并根据指令信息来上传数据或控制被控对象。通信协议如下:

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

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

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

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

数据帧格式:

至于,通信之间的方式,有同步和异步通信方式。而单片机与计算机之间的通信多采用异步通信。

传送一个字符总是从传送一位起始位(0)开始,接着传输字符本身(5~8位),传送字符从最低位开始,逐位传送,直至到传送最高位,接着传送奇/偶校验位,最后传送1位或1个半位或2位停止位(1)。从起始位开始到停止位结束,构成一帧信息。一帧信息传送完毕后,可传送不定长度的空闲位(1),作为帧与相邻帧之间的间隔,也可以没有空闲位间隔。

在串行通信中,还有一个概念,就是数据之间传送方向又分为:单工、半双工和全双工。而单片机的串口多为准双工的。

串行通信在两个站(或设备)A和B之间传送,有单工、半双功、全双工三种形式。

①单工
仅能进行一个方向的传送,即A只能作为发送器,B只能作为接收器;

②半双工
能交替地进行双向数据传送,但两设备之间只有一根传输线,因此两个方向的数据传送不能同时进行;

③全双工
A、B之间有两条传输线,能在两个方向上同时进行数据传送。

 

好了,大概就先写这么多。主要是对单片机与计算机串口通信原理有一个大概的认识,具体还要看多些书。了解一些细节上的问题。下节,再说单片机内部串口相关寄存器的配置,以及波特率发生的实现。

 
关于本文作者

爱数电,爱模电;爱单片机,爱嵌入式;爱EDA,也爱DSP; 爱Altium Designer,也爱PCB;爱生活,同时也爱微博…… 一个自动化专业的学生,与志同道合者学习交流!!!

QQ 号码:594420349
腾讯微博:http://t.qq.com/kevin_753

项目合作