串口通信测试方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
串口通信测试方法
1关于串口通信的一些知识:
RS-232C 是目前最常用的串行接口标准,用来实现计算机和计算机之间、计算 机和外设之间的数据通信。
在PC 机系统中都装有异步通信适配器,利用它可以实现异步串行通信。而且
MCS-51单片机本身具有一个全双工的串行接口,因此只要配以电平转换的驱动 电路、隔离电路就可以组成一个简单可行的通信接口。
由于MCS-51单片机的输入和输出电平为 TTL 电平,而PC 机配置的是RS-232C 标准串行接口,二者电气规范不一致,因此要完成 PC 机与单片机的数据通信, 必须进行电平转换。
注明:3)RS-232C 上传送的数字量采用负逻辑,且与地对称
逻辑1: -3〜-15V
逻辑0: +3〜+15V
所以与单片机连接时常常需要加入电平转换芯片:
2实现串口通信的三个步骤:
(1)硬件连接
51单片机有一个全双工的串行通讯口, 所以单片机和计算机之间可以方便 地进行串口通讯。进行串行通讯时要满足一定的条件,比如计算机的串口是 RS232电平的,而单片机的串口是 TTL 电平的,两者之间必须有一个电平转换电 路,我们采用了专用芯片 MAX232S 行转换。我们采用了三线制连接串口,也就 是说和计算机的9针串口只连接其中的3根线:第5脚的GND 第2脚的RXD 第3脚的TXD 电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9 脚和单片机的10脚连接,第15脚和单片机的20脚连接。
使用MAX23舉口通信电路图(9孔串口接头)
(2)串行通信程序设计
① 通信协议的使用
通信协议是通信设备在通信前的约定。单片机、计算机有了协议这种约定,
通信双方才能明白对方的意图,以进行下一步动作。假定我们需要在 PC 机与单 f : MH v 广 CAP ・ C A? •
CAP 2* CAP 1*
CAP 2- CAP h
RT^OUTL Tim
R-OUT1 *"2 R-0UT2
€601 IOvF C 机H 印—— MAX232 16 VCC
10 PC 血
片机之间进行通信,在设计过程中,有如下约定:
0x31: PC机发送0x31,单片机回送0x01,表示选择本单片机;
Ox** : PC机发送0x**,单片机回送0x**,表示选择单片机后发送数据通信正常;
在系统工作过程中,单片机接收到PC机数据信息后,便查找协议,完成相应的操作。
②串行通信程序设计主要有微机发送接收程序和单片机发送接收程序,微机上的发送和接收程序主要采用计算机高级语言编写,如C语言,因为了能够在计算机
端看到单片机发出的数据,我们必须借助一个WINDOWS件进行观察,这里利用如下图标的一个免费计算机串口调试软件,故而这一块计算机通信的程序可不写!
在单片机上主要用汇编或C编写,在使用串口之前,必须先对串口进行初始
化,主要是设置产生波特率的定时器1、串口控制和中断控制。具体步骤如下:
(1)确定定时器1的工作方式一一编程TMO寄存器(设置波特率);
(2)确定串口的控制——编程SCON
(3)串口的中断方式,必须开CPU和源中断一一编写IE寄存器;
(4)计算定时器 1 的初值——装载TH1,TL1;
(5)启动定时器1——编程TCON中的TR1位。为何串行口的工作方式选择方式1,这是针对于我们平常最常用的,单纯一块板对应于我们的私人电脑,所以就无须考虑是哪一块板发来的信息,即无须分清是数据帧还是地址帧。因为此时属于直通方式,所以无须考虑的。
方式 1 为波特率可变的10位异步通讯接口方式,发送或接收一帧信息,包括 1 个起始位0,8个数据位和一个停止位1,。其中的起始位和停止位在发送时自动插入的。输出:当单片机执行一条指令将数据写入发送缓冲SBUF且TI=0时,就启动发送。串行数据从TXD引脚输出,发送完一帧数据后,就有硬件置位TI。
输入:在(REN =1时,串行口采样RXD引脚,当采样到1到0的跳变时,确认是串行发送来的一帧数据的开始位0,从而开始接收一帧数据。在接收到附加的第9位数据后,当满足(1)RI=0(2)SM2=0或接收到的第9位数据为1时,第9 位数据(停止位)才进入RB8,8 位数据才能进入接收寄存器,并由硬件置位中断标志RI. 否则信息丢失。所以在方式 1 接收时,应先用软件清零RI 和SM2 标志。通常串行接口以方式1工作时,SM2置为0.
而我们现实中需要的是一个机器中多块板进行显示和读取数据,所以这里不得不采取SM2=1的多机通信,而且我们一般采取的方式为方式3, TB8发送数据位,在模式2和3是要发送的第9位。该位可以用软件根据需要置位或清除,通常这位在通信协议中做奇偶位,在多处理机通信中这一位则用于表示是地址帧还是数据帧。这里就可以根据地址判断出我们需要选取的板是不是方位监测板。
注明:如果用C语言来写的话,无论你是先发地址帧,然后数据帧,还是只发数据帧,最后显示的都是一样的内容,而汇编语言是不行的。
SM2多机通信控制位,仅用于方式2和方式3.
接收状态时,当串行口工作于方式2或3时,以及SM2=1时,只有当接收到的第九位数据为1时,才把接收到的前8位数据送入SBUF且置位RI发出中断申请,否则会将接收到的数据丢弃。而当SM2=0时,就不管接收到的第九位数据为多少,直接
送入并申请中断,因为这个时候是直通方式。
注明:这里如果在SM2=1的时候,发来的是数据而不是地址,则不会发出中断请求,不会进入中断服务程序。(就像我一直以为要判断数据是第一次发来的还是SM2=(后发来的,其实不需要)
如不需要MOV A,SCON; ; 判断是不是第二次中断后发来的数据
CJNE A,#9(H,WAIT
发来的如果是数据,能够进入中断服务程序的一定是SM2青零后的数据。
方式2为固定波特率的11位UART方式,它比方式1增加了一位可程控为1或0 的第9 位数据。
输出:发送的串行数据由TXD端输出一帧信息为11位,附加的第9位来自SCON 寄存器的TB8位,用软件置位或复位。它可作为多机通信中地址、数据信息的标志位;也可以作为数据的奇偶校验位。当单片机执行一条数据写入SUBF勺指令
且TI=0 时,就启动发送器发送。发送一帧信息后,置位中断标志TI ,发送完一个之后,如果TI 不清零的话,则会一直发送在发送缓冲器里的数据
JNB TI,$
CLR TI。
输入:在(REN =1时,串行口采样RXD引脚,当采样到1到0的跳变时,确认是串行发送来的一帧数据的开始位0,从而开始接收一帧数据。在接收到附加的第9位数据后,当满足(1)RI=0 (2)SM2=(或接收到的第9位数据为1时,第9 位数据(地址位或者数据位)才进入RB8,8 位数据才能进入接收寄存器,并由硬件置位中断标志RI,此时申请中断,进入中断服务程序•
RB8=1标志此时是一个地址帧,SM2=1时,将地址转入SBUF置位RI,发出中断请求,,若相符,则将从机的SM2清零,变成直通方式,准备接受其后传送来的数据。
RB8=0数据帧,对SM2=1 RB8=0的从机接收到直接丢弃,而对SM2=0的从机,直通方式,不论RB8是0还是1,都将接受并将置位,发出中断请求。
注明:多机处理通信方式,首先保证每一台从机在系统中的编号是唯一
的。
系统初始化时,将所有从机中的SM2均置1,并处于允许串行口中断接收状态。
主机欲与某从机通信时,先向所有从机发出从机的地址,然后才接着发命令或者数据。在主机发地址时,置第9位数据(TB8为1),表示主机发送的是地址帧,然后才将第9位数据(TB8)清0,发送命令或数据。
3观察结果:
下面列举一个使用的串口通信测试软件,其功能为,将PC机键盘的输入发送给单片机,单片机收到PC机发来的数据后,回送同一数据给PC机,并在屏幕上显示出来,只要两者相同,则说明两者之间的通信正常。
在PC上打开软件串口调试器.exe,设置端口号COM1波特率4800,数据