6论文

更新时间:2024-05-16 13:00:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

郑州华信学院

本科生毕业设计(论文)

题 目: PC机与单片机的串行通信设计 指导教师: 宋东亚 职称: 讲师 学生姓名: 李晓旭 学号: 1002120107 专 业: 电气工程及其自动化 院(系): 机电工程学院 答辩日期: 2014年6月17日

2014年6月15日

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

摘要

在实际工作中,计算机的CPU与外部设备之间常常要进行信息交换;一台计算机与外界的信息交换称为数据通信。数据通信的方式有两种,即并行数据通信和串行数据通信。在实际应用时,可根据数据通信的距离决定采用何种通信方式。

本文首先概述了PC机与MCS-51单片机之间进行串行口通信的基本原理,以及PC机与下位机之间的通信协议。其中,包含对串行通信总线标准、逻辑电平转换方式、抗干扰等问题的讨论。紧接着文中给出了实现PC机与单片机间串行通信的硬软件设计、通信代码和流程图。并主要完成了运用Protues软件平台,虚拟COM口等工具来仿真实现单片机与PC机串口通信系统。

关键字:数据通信 串行通信 串行通信总线标准 电平转换

I

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

Abstract

n the practical work, the computer CPU and often must carry on the information exchange between peripheral equipment; A computer is the exchange of information referred to as the data communication with the outside world. The data communication in one of two ways, namely, the parallel data communication and serial data communication. In practical application, according to the distance data communication decided to adopt what kind of communication mode.

This paper first Outlines the PC serial port communication between with MCS - 51 single chip microcomputer, the basic principles of and communication protocol between PC machine and lower machine. , include mode of serial communication bus standards, logic level conversion, anti-jamming and other issues of discussion. Then the paper gives a hard to implement the serial communication between PC and single chip

microcomputer software design, code and flow chart of communication. And mainly completed using Proteus software platform, virtual simulation tools such as the COM to realize MCU and PC serial port communication system.

Key words: data communication serial communication serial communication bus standard level conversion

II

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

目 录

1 绪论 ................................................................................................................................. 1

1.1 论文的研究意义和背景 ....................................................................................... 1 1.2 论文研究的主要内容及所做的工作 ................................................................... 1 1.3 个人工作内容 ....................................................................................................... 2 1.4 论文的内容安排 ................................................................................................... 2 2 相关理论和技术基础 ..................................................................................................... 3

2.1 串行通信工作原理 ............................................................................................... 3

2.1.1 串行通信分类 ............................................................................................... 3 2.1.2 串行通信总线标准 ....................................................................................... 6 2.1.3 数据校检 ....................................................................................................... 9 2.2 AT89C51 单片机的串口 .................................................................................... 10

2.2.1 MCS-51串行口的内部结构 .................................................................... 10 2.2.2 MCS-51串行口的工作方式 .................................................................... 13 2.2.3 MCS-51串行口的波特率 ........................................................................ 14 2.3 仿真设置 ............................................................................................................... 15

2.3.1 Keil uVision3软件简介 ............................................................................ 16 2.3.2 Protues 7 Professional简介 ...................................................................... 17 2.4 MSComm控件 ................................................................................................... 18

2.4.1 MSComm控件基础 ................................................................................. 18 2.4.2 MSComm控件的属性和事件 ................................................................. 18

3 系统硬软件设计 ........................................................................................................... 20

3.1 系统模型 ............................................................................................................. 21

3.1.1 系统的工作原理 ....................................................................................... 21 3.1.2 系统的总体设计 ....................................................................................... 21 3.2 硬件系统设计 ..................................................................................................... 22

3.2.1 AT89C51最小系统设计 ........................................................................... 22 3.2.2 串行口控制电路 ....................................................................................... 23 3.3 软件系统设计 ..................................................................................................... 25

3.3.1 算法设计 ................................................................................................... 25 3.3.2 程序设计 ................................................................................................... 26

4 基于MSComm控件的PC机串口通信 ...................................................................... 28

4.1 MSComm控件串口编程 ................................................................................... 28

III

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

4.1.1 编程过程 ................................................................................................... 28 4.2 基于MSComm控件的串口数据通信 .............................................................. 30

4.2.1 通信处理方法 ........................................................................................... 30 4.2.2 通信原理 ................................................................................................... 30

5 仿真调试 ....................................................................................................................... 32

5.1 虚拟串口的设置 ................................................................................................. 32 5.2 导入程序代码到单片机 ..................................................................................... 33 5.3 仿真效果 ............................................................................................................. 36 结论 ..................................................................................................................................... 38 致谢 ..................................................................................................................................... 39 参考文献 ............................................................................................................................. 40 附录 ..................................................................................................................................... 41

附录A .......................................................................................................................... 41 附录B .......................................................................................................................... 43

IV

1 绪论

1.1 论文的研究意义和背景

计算机控制系统逐步发展到检测、控制和管理为一体的集中分布式侧检系统。目前许多实时工业控制中,PC级常采用上机位,多个单片机常采用下位机的主从式地功能,由于主从机需要不段进行信息采集交换交流,通信变为最重要而基本的功能。而通信方式的选择,对工程成本,效率,稳定,可靠性的影响也越来越重要。 近两年,大家接触最多的就是串行传输,从技术发展的情况来看,串行通信传输方式大有取代并行传输方式的地位:比如USB取代 IEEE 1284,SATA取代PATA, PCI Express 取代PCI......。从原理上看,并行传输方式其实比并行传输方式有优点。简单来说,并行传输的通路犹如一条多车道的宽阔的大道,而串行传输则是仅能允许一辆汽车通过的乡村公路。以古老又典型的标准并行口(stand Parallel Port) 和串行口(俗称COM 口)为例,并行接口的位宽为8,数据传输率高;而串行接口只有一位,数据传输率速度地。在串行口中传送1位的时间内,并行口传送一个字节。当并行口完成单词“advancede”的传送任务时,串行口中仅传送了个这个单词的首字母“a”。那么现在的串行传输方式为何会更胜一筹呢?

电脑中的总线和接口是主机与外部设备间传送数据的“大动脉”,随着处理器速度的节节攀升,总线和接口的数据传输速度也需要逐步提高。我们先来看看总线的情况。1981年的第一台PC机中以ISA总线为标志的开放式体系结构,使用了ISA总线,数据总线为8位,工作频率为8.33Mhz,这在当时却已经算作“先进技(Advanced Technology)”了,所以ISA总线还要有另一个名字“AT总线”。到了286时代。ISA的位宽提高到了16位,为了保持与8位的ISA兼容,工作频率仍为8.33Mhz。ISA总线虽然只有16MBps的数据传输率,但直到386时代,都一直是主板与外部设备间最快的数据通道。到了486时代,同时出现了PCI和VESA两种更快的总线标准,他们具有相同的位宽(32位),但PCI总线总能处理与处理器异步运行,当处理器的频率增加时,PCI总线频率仍能保持不变,可以选择25MHz,30MHz和33MHz三种频率。而VESA总线与处理器同步工作,因而随着处理器频率的提高,VESA的总线类型的外围设备工作频率也提高,适应能力较差,因而很快失去了竞争力。并行数据传输技术向来是提高数据传输率的重要手段,但是进一步发展却遇到了障碍。首先,由于通过扩展信号的相同定时提供的并行传输方案中,所接收的信号具有相同的定时,时钟频率增加,也难以对时钟定时和数据传送步骤,布线长度稍有不同,在数据是在变速器的不同时钟定时,其次,提高时钟频率也容易造成相互干扰的信号之间从而引起传输错误。因此,实现高速化对于并行方式不容易实现。 1.2 论文研究的主要内容及所做的工作

论文运用单片机原理和微机接口技术等知识探讨完成单片机与PC机的串行通

1

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

信设计。期间有涉及到串行通信原理的简述、串行通信的制式、RS-232接口的电气标准、电平转换的方式和单片机最小系统设计等相关专业问题。

本系统有硬件和软件两大部分协调完成,硬件部分主要完成信息的显示;软件主要完成信号的处理及控制功能等。系统的硬件设计采用模块化设计,以AT89C51单片机为核心,串行口通信电路组成控制系统。软件设计部分运用查询和中断方式完成数据的收发,并做进一步处理。

另外,论文在后面一些章节介绍了在protues平台中完成所研究系统的仿真调试:运行Protues平台、虚拟串口软件创建的一对相通的虚拟COM口、基于MSComm 控件的串行软件等工具来仿真实现PC机与单片机串口通信系统。 1.3 个人工作内容

在此系统设计中,从方案设计到方案确定,再到系统仿真调试,直至最后完成设计任务均有本人完成。方案中采用现成的电平转换集成块MAX232解决PC机与单片机的逻辑电平不匹配的问题,并且也决定采用串口调试助手软件在PC端完成对单片机收发数据的终端显示。软件设计部分采用查询和中断方式并用地方法来完成对串口数据缓冲器的收发控制。

运用Proteus平台完成了对该系统的仿真实现,然后是实物焊接,调试,直至完成系统功能。 1.4 论文的内容安排

本论文一共分为以下四个部分:

(1)相关理论和技术基础,介绍了完成此次系统设计所需的一些理论支持和技术基础。包括串行通信工作原理,单片机串口工作原理,PC机串口以及一些仿真时所用到的软件平台。

(2)系统的结构介绍,介绍整个系统的组成和总体方案设计。

(3)仿真调试及系统功能实现,主要介绍在Protues平台中完成系统的仿真调试。 (4)论文总结,并对论文的研究意义做相应的总结。

2

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

2 相关理论和技术基础

要完成一个系统的设计,相关的理论知识和技术是必不可少的。为了实现单片机与PC机之间的串行通信,涉及到很多相关理论知识及技术。本章深入浅出,介绍了串行通信的基本原理、单片机串口工作原理、PC机串口以及仿真调试期间用到的一些软件工具。这些是后期设计工作的必不可少的铺垫和可靠保障。 2.1 串行通信工作原理 2.1.1 串行通信分类

数据通信的方式有两种:即并行数据通信和串行数据通信。并行数据通信的优点在于传输速度快,缺点是成本高;串行数据通信的优点是成本低,缺点是传输速度相对较慢。

MCS-51单片机具有并行和串行两种基本数据通信方式。图2.1.1-1所示为MCS-51单片机与外设间8位数据并行通信的连接方法。图2.1.1-2所示为串行数据通信方式的连接方法。

P1.0 P1.1 P1.2 P1.3 Mcs-51 P1.4 P1.5 P1.6 P1.7 D0 D1 D2 D3 微机或外部设备 D4 D5 D6 D7

RXD TXD Mcs-51 TXD RXD 微机或外部设备

两种通行方式的示意图

图2.1.1-1并行通信 图2.1.1-2串行通信

串行通信中依发送与接收设备时钟的配置方式,可以分为异步通信和同步通信。

(1)异步通信

异步通信是指发送和接受设备使用各自的时钟控制数据的传输过程。为了使收发双方协调,要求发送和接收数据的时钟频率尽可能一致(误差在允许的范围内)。

3

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

异步通信是字符(帧结构)为单位进行传输。字符和字符之间(时间间隔)的间隙任意的,但每一个都是在一个固定的时间递送的字符,该字符是异步的(不一定是的帧的关系的整数倍之间的“位间隔”,但若是同步的相同字符即为两个“位间隔”的整数倍之间的距离。

异步通信也要求发送设备与接收设备传送数据的同步,采用的办法是使传送的每一个字符都以起始位“0”开始,以停止位“1”结束。这样,传送的每一帧都用起始位来进行收发双方的同步。停止位和间隙作为时钟频率偏差的缓冲。即使收发双方时钟频率略有偏差,积累的误差也仅限在本帧之内。

图 2.1.1-3 异步通信一帧数据格式

有图可知,异步通信的每帧数据由四部分组成:

? 起始位(1 位):在没有数据传送时,通信线上处于逻辑1状态。 ? 数据位(8 位):在起始位之后,发送端发出(接收端接收)的是数据位,数据的位数没有严格限制,如5位、6位、7位、或者8位等。都是由低位向高位逐步传送。

? 奇偶校检位(1位,也可以没有校检位):数据位发送(或者接受)完之后,可发送奇偶校检位。它只占帧格式的一位,用于传送数据的有限差错检测,表示数据的一种性质,是发送和接收双发预先约定好的一种检验(查错)方式。

? 停止位(1位):字符帧格式的最后部分为停止位,逻辑1电平有效,位数可以是1位、1/2位或者2位。表示一个字符帧信息的结束,也为发送下一个字符帧信息做好准备。

图中是一位起始位、8位数据位、一位校检位和一位停止位,共11位组成一个传输的字符帧。数据传送时低位先传送,高位后传送。字符间允许有不定长度的空闲位。起始位“0”作为传输开始的联络信号,它告诉接收方传送的开始,接下来就是数据位和奇偶校检位,停止位“1”表示一个字符帧的结束。

接收设备在接受状态时不断检测传输数据线,看是否有起始位的到来。当收到一系列的“1”(空闲位或停止位)之后,检测到一个“0”,说明起始位出现,就开始接收所规定的数据位和奇偶校检位以及停止位。串行接口电路将停止位去掉后把数据位拼成一个并行字节,再经校检无误才算正确的接收到一个字符。一个字符接收完毕后,接受设备又继续测试传输线,监视“0”电平的到来(下一个字符开始)知道全部数据接收完毕。

4

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

异步通信的特点是不要求收发双发时钟的严格一致。易于实现,但每个字符要附加2到3位用于起始位,各帧之间还有间隔,因此传输效率不高。PC机上RS-232C接口是典型的异步通信的接口。

(2) 同步通信

同步通信时要建立发送方时钟对接收方时钟的直接控制,使数据传送完全同步。字符与字符之间没有间隙,也不用起始位和停止位,仅在数据块开始时用同步字符SYNC来指示(常约定1~2个),然后是连续的数据块。同步字符的插入可以是单同步字符方式或双同步字符方式。同步通信传输效率高。用于同一电路板内各元件之间数据传输的SPI接口就是典型的同步通信接口。

数据 …… 字符n CRC1 CRC2 同步 同步 数据 数据 字符1 字符2 字符1 字符2

图2.1.1-4单同步字符帧格式

同步 数据 数据 数据 …… 数据 字符n CRC1 CRC2 字符1 字符1 字符2 字符3 (3)波特率

图2.1.1-5双同步字符帧格式

在串行异步传送中,通信双方必须事先约定好内容,才能保证正常通信:

① 字符格式。双方要事先约定字符的编码形式、奇偶校检形式以及起始位和停止位的规定。例如用ASCII码通信,有效数据为7位,加一个奇偶校检位位、一个起始位和一个停止位共10位。

② 波特率(Bandrate)。波特率就是数据的传送速率,即每秒钟传送的二进制位数,单位为位/秒(bit/s).t它与字符的传送速率(字符/秒)之间存在如下关系:

波特率=(位/字符)×(字符/秒)=位/秒

在通信过程中,发送端与接收端的波特率要求一定要一致。

例如,假设字符传送的速率为960字符/秒,而每一字符为10位,那么传送的波特率为10(位/字符)×960(字符/秒)=9600位/秒。 (4)串行通信的制式

在串行通信中按照数据传送方向,串行通信由单工、半双工和全双工三种方式组成。

5

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

① 单工制式

接收器 B A 发送器 端端 单工制式 图2.1.1-6数据传输方式

在单工制式下,只允许数据向一个方向传送,通信的一端为发送器,另一端为接收器。信息数据只能单方向传送。

② 半双工制式 A 发送 接收 端 发送 B 接收 端 半双工制式

图2.1.1-7数据传输方式

在半双工制式中,系统每个通信设备都一个发送器和一个接收器,即收发一体,依靠半双工通信协议切换交替工作。数据双发可传送但不能同时传送。即A端发送,B端接收;B端发送,A端接收。即在同一时刻,只能进行一个方向传送,不能双向同时传输。

③ 全双工制式

A 发送 端 接收 接收 B 发送 端 全双工制式

图2.1.1-8数据传输方式

全双工制式中通信简称双工通信方式,在全双工制式中,数据传送方式是双向配置,允许同时双向传送数据。因此通信效率比较高,该方式下需要的传输线至少有3条,一条接收,一条发送。一条用于公用信号地。在实际应用中,异步通信通常采用半双工制式,这样最简单实用。 2.1.2 串行通信总线标准

在进行串行通信接口设计时,必须根据需要选择需要的接口、传输介质及电平转换等问题。和并行传送一样,现在已经颁布了很多种串行标准总线,如RS-232C、RS-422、RS-485和20mA电流环等。采用标准接口后,能够方便的把单片机和外设、

6

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

测量仪器等有机地连接起来,从而构成一个测控系统。

异步串行通信的接口目前广泛使用的是RS-232C总线,如PC上的COM1、C0M2接口,就是RS232C接口。它是由美国电子工业协会(电子工业协会)联合贝尔系统的1970标准串行通信,调制解调器厂家及计算机终端生产厂家共同制定。它的全称是“技术标准的数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口。”提供用于各种信号的电平。

RS-232C主要用来定义计算机系统的一些数据终端设备(DTE)和数据通信(DCE)之间接口的电气特性,目前已广泛用于计算机与终端或外设备之间的近端连接,适合于短距离或调制解调器的通信场合。 (1)RS-232C的电气标准

RS-232C标准早于TTL电路的产生,与TTL、MOS逻辑电平规定不同。任何一条信号线的电压均采用负逻辑关系:低电平表示逻辑1,电平值为-5V-15V;高电平表示逻辑0,电平值为+5V-+15V。噪声容限为2V。因此,RS-232C不能直接与TTL电路连接,使用时必须加上适当的电平转换电路,否则将使TTL电路烧毁。

插针 1 2 3 4 5 6 7 8 9.10 11 12 13 信号名 GND TXD RXD RES CTS DSR SGND DCD DTR 功能说明 保护地 发送数据 接收数据 请求发送 允许发送 数据储备(CED)就绪 信号地(公共回线) 接收线路信号检测 未用,为测试保留 空 辅信道接收线路信号检测 辅信道允许发送

信号方向(DTE) 对DCE

× 出 入 出 入 入 × 入 出 入 出 入 出 出 × 出 入 7

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

14 15 GND 辅信道发送数据 发送信号码元定时(dce为源) 16 17 18 19 20 21 22 23 24 TXD RXD RES CTS DSR SGND DCD DTR 辅信道接收数据 发送信号元定时 空 辅信道请求发送 数据终端储备就绪 信号质量检测 振铃指示 数据信号速率选择 发送信号码元定时(DCE为源) 25 空 × 出 入 出 入 入 × 入 出 入 出 入 出 出 × 出 入 RSC-232各引脚说明

图 2.1.2-1 RSC-232引脚说明图

RS-232

C信号分为两类:一类是DTE和DCE交换的信息,即TXD和RXD。

一类是为了正确无误的传输上述交换信息而设计的联络信号。

① 数据发送与接收线

发送数据TXD:通过TXD线,终端将串行数据由发送端(DTE)向接收端(DCE)发送。按串行数据格式,先低位后高位的顺序发出。

接收数据RXD:通过RXD线,终端接收从发送端DTE(或调制调节器0)输出的数据。

② 联络信号:共有六个信号

请求发送信号RST:意思是DTE请求DCE发送数据,终端要发送数据时,信号RTS=1。

清除发送信号CTS:表示DCE准备好接收DTE发出的数据,响应信号是对请求发送信号RTS。

数据准备就绪信号DSR:这是发送到DCE 、DTE的通信信号。 DSR将显示本地DCE的工作状态。当DSR=1,则表示该状态是不是在测试呼叫。然后DCE可

8

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

以建立渠道与远程DCE。

数据终端就绪信号DTR:此接触DTE发送一个信号到DCE。DTR=1,这意味着在虚拟状态下本地和远程DCE就建立在DTE之间的通信通道上;而DTR=0,它会被强制终止DCE通信。

数据载波检测信号DCD:这是DCE向DTE发出的状态信息。当DCD=1时,表示本地DCE接收到远程DCE发送。

振铃指示信号RI:这是DCE发出的状态信息。RI=1时,表示本地DCE接收到远程DCE的振铃信号。

③ RS-232C与单片机的连接

RS-232C接口与单片机连接时需要进行电平转换,常用的电平转换MC1488、MC1489、MAX232,系列芯片。其中MAX232采用单5V电源供电,使用起来很方便。MAX232系列芯片由MAXIM公司生产,内含两路接收器和驱动器。输入的+5V电源电压通过电源电压转换器换成RS-232所需的正负10V电压。

采用该芯片硬件接口简单,实惠便宜,因而被广泛使用。下图为该芯片的引脚图。图中的C1,C2,C3,C4,C5均为1.0uF/16V。 12345678C1V+-C1C2+C2--VT2OUTR2IN+VCCGNDT1OUTR1INR1OUTT1INT2INR2OUT161514131211109 图2.1.2-2 MAX232引脚图 2.1.3 数据校检

为了使系统可靠稳定的通信,在编程时在考虑数据的纠错基础上,应当设计通信协议。在单片机和微机的数据传输过程中,由于传输距离、现场状况等诸多可能出现的因素影响,单片机之间通信数据通常会发生无法预测的错误。为了防止错误的所带来的影响,一般在通信时采用数据校检的方法。采用数据校检是有限保证数据传输可靠性的一种方法。目前较为流行的方法有以下三种:奇偶校检;校检;循环永余码校检(CRC校检)。

本次设计中我们所采用的是奇偶校检,它是最简单的检错方法,在传送字符的各位外,再传送1位奇/偶校检验位。也可以采用奇校检或者偶校检。

9

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

奇校检是在所有传送的数位(包含字符的各位数据位和校检位)中,“1”的个数为奇数。例如: 10110,0101 00110,0001

而对偶校检来说所有的传送位(含字符的各数据位和校检位)中,“1”的个数为奇数。例如:

10100,0101 00100,0001

奇偶校检能够检查出信息传输过程中的部分代码(1位误码能检出,2位及其以上误码不能检出),并且不能纠错。在发现错误后只能够要求重发。但由于实现简单,仍广泛使用。

这里需要注意的是奇偶校检虽然容易实现,但却最不可靠。因为其只能发现系数个错误,而且无法实行自动纠错。 2.2 AT89C51 单片机的串口

图2.2 AT89C51引脚图

MCS-51内部有一个可编程具有UART、全双工的通用异步接收发送器,通过单片机的引脚RXD(P3.0)、TXD(P3.1)同时接收或者发送数据,构成双机或多机通信系统。

2.2.1 MCS-51串行口的内部结构

10

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

MCS-51串行口的内部结构,与MCS-51串行口有关的特殊功能寄行器为SBUF、SCON、PCON,下面对它们分别讨论。 (1)串行口控制寄存器SCON

SCON用来设定串行口的工作方式、接收状态、发送控制以及设置标志状态。字节地址为98H,允许进行位寻址。其格式如下所示: 表2.2.1-1串行口控制器SCON SCON-7 SM0 SCON-6 SM1 SCON-5 SM2 SCON-4 REN SCON-3 TB8 SCON-2 RB8 SCON-1 TI RI SCON-0 各位功能说明如下:

SM0和SMl:串行口工作方式选择位,有四种工作方式。其定义如表2.4所示。

表2.2.1-2 串行口工作方式设定 SM0 SM1 工作方式 功能 0 0 方式0 8位移动寄存器 0 1 方式1 10位UART(8位数据) 1 1 方式2 11位UART(9位数据) 1 1 方式3 11位UART(9位数据) 波特率 Fosc/12 可变 Fosc/6Fosc/32 可变 或 SM2:对于SM2来说,多机通信控制位的主要工作方式是2和方式3。 若SM2=1时,接收机处于地址帧选状态。此时可以利用接收到的第九位即RB8来筛选地址帧:若RB8=1时,说明该帧是地址帧,地址信息可以进入SBUF,并使RI=1,进而在中断服务再进行地址号比较;若RB8=0,说明该帧不是地址帧,应丢掉且保持RI=0。

若SM2=0,不论接收到的第9位RB8为0还是为l,TI、RI都以正常方式被激活,接收到的数据装入SBUF。在方式1,若SM2=1,则只有收到有效的停止位后,RI置1。在方式0中,SM2应为0。

REN:串行接收使能位。由软件REN=1,则启动串行口接收数据。若软件REN=0,则要禁止接收。

TB8:在方式2和方式3中,TB8是第9位发送数据,由软件规定其作用。可做奇偶校验位。在方式0和方式1中,该位不用。

RB8:在方式2和方式3中,RB8是第9位接收数据。 作为奇偶校检位或者

11

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

地址帧/数据帧的标志位。在方式0时不用RB8(置SM2=0)。在方式1时也不用RB8(置SM2=2,进入RB8的是停止位)。

TI:发送中断标志位。在方式0中,发送完8位数据后或在其他方式,串行发送停止位的开始时,由内部硬件TI置1,向CPU发送中断申请。必须在中断申请程序中,用软件将其清0,由此取消中断申请。

RI:接收中断标志位。在方式0中,接收完8位数据后,由硬件置位;在其它方式中在接收停止位的中间点由硬件置位。接收完一帧数据RI=l,向CPU申请中断,响应中断后,必须由软件清除RI。 (2)串行口数据缓冲器SBUF

SBUF是一个特殊功能寄存器,有两个在物理上独立的接收缓冲器与发送缓冲器。发送缓冲器只能写入不能读出,写入SBUF的数据存储在发送缓冲器,用于串行发送;接收缓冲器只能读出不能写入。两个缓冲器共用一个地址99H,通过对SBUF的读、写指令来区别是对接收缓冲器还是发送缓冲器进行操作。接收或发送数据,是通过串行口对外的两条独立收发信号线RXD(P3.0)、TXD(P3.1)来实现的。

图2.1.2-1 串行口的结构框图 (3)电源及波特率选择寄存器PCON

PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,字节地址为97H。在HMOS的8051单片机中,PCON只有最高位被定义,其它位都是虚设的。

表2.2.1-3 PCON格

12

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

7 6 5 4 3 2 1 SMOD GF11 GF00 PPDD IDLL 2.2.2 MCS-51串行口的工作方式

MCS-51的串行口有4种工作方式:工作方式、工作方式1、工作方式2、工作方式3。

这里工作方式的改变主要是通过SCON中的SMl、位来决定。 (1)工作方式0

在方式0下,串行口作同步移位寄存器的输入/输出方式。主要用于扩展并行输入或输出口。其波特率固定为fOSC/l2。串行数据从RXD(P3.0)端输入或输出,同步移位脉冲由TXD(P3.1)送出。移位数据的发送和接收以8位为一帧,低位在先,高位在后。 (2)工作方式1

方式1为波特率可调的8位通用异步通信接口(10位的帧格式)。发送或接收一帧信息为10位,分别为起始位0,8位数据位和1位停止位1。 在工作方式1中,需要注意的是数据发送和数据接收。

① 数据发送

发送时,数据从TXD端输出。当执行MOV SBUF A指令时,数据被写入发送缓冲器SBUF,启动了串行口发送过程。当发送完一帧10位数据后,置中断标志TI置为1。

② 数据接收

接收时,数据从RXD端输入。当允许接收控制位REN为l后,串行口采样RXD,当采样到由1到0跳变时,确认是起始位“0”,启动接收器开始接收一帧数据。当RI=0且接收到停止位为l(或SM2=0)时,将停止位送入RB8,8位数据送入接收缓冲器SBUF,同时置中断标志RI=1。所以方式1接收时,应先用软件清除RI和SM2标志。 (3)工作方式2 、工作方式3

在工作方式2、方式3下,串行口为9位异步通信接口,TXD发送、RXD接收一帧信息为11位的帧格式:即1位起始位(0)、8位数据位、1位可编程位和1位停止位。传送波特率与SMOD有关。其数据帧格式如下所示。

表2.2.2-1工作方式2、3数据帧格式

13

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

起始 位 8 位 数 据 奇偶停止校验位 位 0 D0 D1 D2 D3 D4 D5 D6 D7 0/1 1 对于方式二、方式三数据发送时送TXD端输出。SCON中的TB8为第九位数据。8位数据转入SBUF。将要发送的数据由指令写入SBUF后启动发送器。当发送结束后,T1由硬件置1。

当REN=1时,允许接收。与方式1相同,CPU开始不断采样RXD,将8位数据送入SBUF中,接收到的第9位数据送入RB8中,当同时满足RI=0,SM2=0或接收到第9位数据为1这三个条件都满足时,置RI=1,否则接收数据无效。

2.2.3 MCS-51串行口的波特率

在串行通信中,收发双方必须采用相同的数据传输速度。MCS-51单片机的串行口有4种工作方式,其中方式0和方式2的波特率是固定的,方式1和方式3的波特率由定时器T1的溢出率决定是可变的。 (1) 方式0和方式2

在方式0中,波特率为时钟频率的1/12,即fOSC/12,固定不变。 在方式2中,波特率取决于PCON中的SMOD值: 当SMOD=0时,波特率为fOSC/64;

当SMOD=l时,波特率为fOSC/32,即波特率=2SMOD×fOSC/64。 当用T1作为波特率发生器2.2.3.2 方式1和方式3时,典型的用法是使T1工作在自动重装的8位定时方式(即定时方式2),此时溢出率取决于TH1中的初值:

T1溢出率=fosc/{12×[256-(TH1)]}

由此得到计算方式1和计算方式3波特率的公式为 方式1波特率=(2SMOD/32).(T1溢出率) 方式3波特率=(2SMOD/32).(T1溢出率)

通常使用单片机的串口时,选用的晶振比较固定,一般是6MHz、12MHz和11.0592MHz。常用于和微机通信的波特率也相对比较固定。通常使用的波特率设置如下:

表2.2.3 波特率设置

14

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

工作方式 数据传输率 - Fosc=6MHz Fosc=12MHz Fosc=11.0592MHz SMOD TMOD TH1 SMOD - 1 TMOD 20 TH1 FFH SMOD - TMOD - TH1 - 62.5K - - 19.2K - - - - - - 1 20 FDH 9.6K - - - - - - 1 20 FDH 4.8K - - - 1 20 F3H 0 20 FAH 2.4K 1 20 F3H 0 20 F3H 0 20 F4H 1.2K 1 20 E6H 0 20 E6H 0 20 E8H 600 1 20 CCH 0 20 CCH 0 20 D0H 单片机完成数据收发功能主要分为以下步骤: 1 串口波特率的设定 2 串口初始化 具体操作如下:

确定定时器1的工作方式――配置TMOD寄存器。 计算定时器1的初值――装载TH1、TL1。 启动定时器1――置位TR1位。

确定串口的控制――配置SCON寄存器。

串行口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。 2.3 仿真设置

本次设计中,利用Proteus软件平台、虚拟串口软件等对系统进行了仿真调试,避免了一些不必要的麻烦。就这些使用的软件做一个基本介绍。

15

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

2.3.1 Keil uVision3软件简介 (1) Keil uVision基础知识

早期的Franklin C51交叉编译器是专门为8051系列单片机设计的简单、高效C语言编译器,Franklin软件包主要由C51交叉编译器、A51交叉汇编器、L51链接器、OHS51代码转换器及DSCOPE-51软件仿真器等模块组成,Franklin C51的输入输出库函数scanf和printf默认是通过8051单片机的串行口实现的(输出之前需要对串行口初始化),其他输出方式可以通过编写特定的输入输出函数来实现。 (注:8051及8051派生产品统称为Cx51)。

Keil公司的uVision则是把上述编辑、编译、链接和仿真等模式打包成集成开发环境,当然其集成的C51编译器肯定跟Franklin公司的相关模块肯定有交叉性,uVi sion还包含项目管理和调试器等非常有用功能。界面如下图:

图2.3.1 Keil uVision3界面

uVision3可用于多种8051MCU的集成开发环境(IDE),IDE中也是PK51及其它开发套件的一个重要组成部分。除了增加了源代码,功能导航器,模板编辑以及改进的搜索功能,uVision3还提供了配置向导,它加速了启动代码和配置文件的生成。除了其内置的模拟器来模拟目标MCU,包括指令集,片上外设和外部信号。 uVision3提供逻辑分析仪,程序变量可以根据MCUI/ O引脚和外设下的状态变化进行监测。

另外,uVision3提供了多种最新的8051类微处理器的支持,AnalogDevices的ADuC83x和ADuC84x都被包括其中,以及Infineon的XC866等。

KeilC51V8.05全中文环境,支持PA51中国单片机汇编,使整个中国编程,动态子程序库调用,自动字符字体生成,自动生成的图像数据等许多其他强大的功能。 (2) Keil uVision集成开发环境

uVision的工程由源文件、发开工具选项及编程说明组成,uVision包含器件数据库(如下图),可以看到该芯片的Vendor、Family、Description(制作工艺、片上资源等)、Option等信息,可以自动设置汇编器、编译器、连接定位器及调试

16

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

器选项。

uVision的编辑器和调试器uVision的编辑器跟大家经常使用的Dreamweaver或VC++等开发环境类似,支持语法检查、代码高亮等,支持汇编和C51混合编程,C51编译器可实现对8051所有片上资源进行操作,支持三字节的通用指针和特殊功能指针。调试器则可以提供原生的模拟调试环境,支持断点和随时查看当前源程序运行位置。

2.3.2 Protues 7 Professional简介

Proteus软件是由英国Labcenter公司电子出版的EDA工具。它不仅具有其它EDA仿真工具的功能,还可以用作微控制器外围设备的仿真。它是最好的仿真工具微控制器和外围设备。 (1)特点功能

Proteus软件具有其他EDA工具软件(如:multisim)的功能。

① 原理布图;

② PCB自动或人工布线; ③ SPICE电路仿真。 (2)其特点

① 电路仿真的互动

用户甚至可以使用的周边设备,如动态实时使用LED / LCD,键盘,RS232终端与设计的仿真互动。

② 仿真处理器及其外围电路

可以仿真51系列,AVP,PIC单片机等常见主流。虚拟原型也可以根据原理图上直接进入,显示和输出在一起,输入和输出可以看到效果后运行。系统配置与虚拟逻辑分析仪,示波器, Proteus建立了完善的电子设计和开发环境。 (3)Proteus所提供的资源

① Proteus可提供的仿真元器件资源:仿真数字和模拟、交流和直流等数千种器件,有30多个元件库。

② Proteus可提供的仿真仪表资源:示波器、逻辑分析仪、虚拟终端、SPI调试器、I2C调试器、信号发生器、模式发生器、交直流电压表、交直流电流表。这些仪器被称为电路。理论上同一种仪器可以在一个电路中随意的调用。

除了显示存在的仪器外,Proteus还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似,但功能更多。这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗、极低的输出阻抗。这些都尽可能减少了仪器对测量结果的影响。

17

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

③ Proteus对于电路的测试提供了很多测试信号。这些测试信号包括模拟信号和数字信号。 (4)功能模块

① 一个易用而又功能强大的ISIS原理布图工具; ② PROSPICE混合模型SPICE仿真; ③ ARES PCB设计。 2.4 MSComm控件 2.4.1 MSComm控件基础

MSComm(Microsoft Communication Control)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,他为应用程序提供了通过串行接口收发数据的简便方法,而且在Visual C++,Visual Basic,Delphi等语言中均可使用。提供了两种处理数据通信的方法:查询法,事件驱动。 (1)查询方式

查询方式本质还是事件驱动,但又比事件驱动更迅速。在程序的每个关键功能之后,可以通过检查 CommEvent 属性的值来查询事件和错误。如果应用程序小,且是自保持的,这种方法可能便捷的。例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应信息。 (2)事件驱动方式

事件驱动方式是处理串口交互作用很迅速快捷的方式。

事件在发生时需要得到通知,例如,在串口接收缓冲区中有字符,或者Carrier Detect(CD)Request To Send(RTS)线上一个字符到达或一个事件发生时。在这些情况下,可以利用MSComm控件的OnComm事件捕获并且处理这些通信事件。OnComm事件还可以检查和处理通信错误。在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。程序相应及时,可靠性高这是事件驱动方式的优点。每个MSComm控件对应着一个串行端口,如果应用程序需要访问多个串行端口,必须使用多个MSComm控件。

MSComm控件实现通讯功能其实是调用API函数,而API函数是COMM.DRV解释并传递给设备驱动程序。只是学习如何使用MSComm控件的属性和事件可以对串口的操作来实现。

2.4.2 MSComm控件的属性和事件 (1)MSComm控件的事件

MSComm控件只有OnComm一个事件。

18

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

下面沟通的情况下错误或事件MSComm控件的应用程序,会导致OnComm事件和GetCommEvent改变其属性值可用OnComm事件或产生不正确的代码。不同的操作可以在通信过程中的设计根据CommEvent属性进行。 (2)MSComm控件的属性

MSComm控件包括许多的属性都很重要,首先熟悉几个属性:Commport-设置并返回通信端口号;Settings-设置在一个字符串的形式,并返回数据传输速率,奇偶校验,数据位,停止位;PortOpen-设置并返回通信端口的状态,端口也可以通过其被打开和关闭;Input-从接收缓冲区返回和删除字符;Output-向传输缓冲区写一个字符。

① Settings属性

数据传输数率、数据比特、停止比特参数、奇偶校验主要是由该属性设置和返回的。其中lpszNewValue用字符串表示,由四个设置值组成,组成格式如:“BBBB,P,D,S”

BBBB 为数据传输数率,P为奇偶校验,D为数据比特数,S为停止比特数。Value默认值是“9600,N,8,1”,表示传输数率是9600bit/s,无奇偶校验,8bit数据比特,1bit停止比特。110,300、600、1200、2400、4800、9600、14400、19200、28800、38400、56000、57600、115200、12800、25600都可以是数据传输数率的合法值。

奇偶校验值可以设置成如下:

表2.4.2.2-1 奇偶校验值的设置

设 定 值 E M N O S 数据比特数可以是4、5、6、7、8。 停止比特数可以是1、1.5、2。

描 述 偶校验(EVENT) 标号校验(MARK) 无校验(NONE) 奇校验(ODD) 空格校验(SPACE) 注意:只有当通信双方的Settings属性值都一样时,通信连接才能有效

② CommPort属性

这一属性用于设置并返回连接的串行端口号,Windows将会利用该串口和外界通信。在设计时,nNew Value可以设置成从1~16的任何数(默认值为1)。但是如果使用PortOpen属性打开一个并不存在的端口时,MSComm控件会产生错误

19

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

68(设备无效)。

注意:设置Commport属性要在打开端口之前。

③ Sthreshold属性

前MSComm控件的设置和产生CommEvent属性为comEvSend OnComm事件,设置发送缓冲区,并返回允许的最少字符数。下面是一个简短nNewValue数据,字符发送缓冲区中的OnComm事件之前产生的代表的最小数目。

如果设置Sthreshold属性为0(默认值),数据传输事件不会产生OnComm事件。如果该属性设置设置Sthreshold1,当传输缓冲区完全是空的,MSComm控件产生OnComm事件。如果在发送缓冲区中的字符数小于价值,CommEvent属性设置为comEvSend,并产生OnComm事件。 ComEvSend事件仅当字符和设置Sthreshold交叉的数量被激活一次。

④ PortOpen属性

PortOpen属性用于打开或关闭该端口。如果设置b新值设置为true,则可以打开端口;设置为False来关闭该端口。在正常情况下打开的端口在程序启动时在程序结束时关闭端口。当应用程序被挂起,MSComm控件会自动关闭该端口。在打开的端口,确定CommPort属性设置为正确的端口号。此外,用户的串行设备必须支持设置属性的设置。如果硬件不支持某些设置设置属性,硬件可能无法正常工作。 Input属性

输入属性表示从接收缓冲区取出字符的字符串,接收数据缓冲区读取变量。 Variant变量属性值。此属性时,无法使用该端口未打开,只读在运行时的时间。 注意:当的InputMode属性只0:00(文本模式),该变量包含字符串数据类型。当的InputMode属性为1(二进制模式),该变量包含Byte数组数据。

⑤ OutPut属性

输出属性被用于传输缓冲区写数据流。Variant变量是属性。当端口不可用,在运行时属性不开是只写的。

注意:输出属性可以发送文本或二进制数据。传输文本数据,字符数据应该放在变量类型标量;二进制数据的传输(即字节传输),儿童应字节数据为Ga的Variant类型的变量。如果正常发送ANSI字符串到应用程序,可以发送文本。

3 系统硬软件设计

20

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

由相关理论知识,PC机与单片机串行通信系统的硬软件系统有了总体的方案设计。 3.1 系统模型

3.1.1 系统的工作原理

MCS-51单片机串行口发送/接收数据时,通过2个串行缓冲器SBUF进行,这2个缓冲器采用一个地址(99H),但在程序上是独立的。其中接收缓冲器只能读出不能写入,发送缓冲器只能写入不能读出。 (1)接收过程

串行口的接收与否受制于允许接收位REN的状态,当REN被软件置“1”后,允许接收器接收。串口的接收器以所选波特率的16倍速对RXD线进行监视。当“1”到“0”跳变时,检测器连续采样到RXD线上低电平时。便认定RXD端出现起始位,继而接收控制器开始工作。在每位传送时间的第7、8、9三个脉冲状态采样RXD线,决定所接收的值为“0”或“1”。当接收完停止位后,控制电路使中断标志R1置为“1”,此时程序可通过MOV A,SBUF指令将接收到的字符从SBUF送入累加器A,从而完成一帧数据的接收工作。 (2) 发送过程

由指令MOV SBUF,A启动,此时待传送的数据由A累加器传入串行发送缓冲器SBUF,由硬件自动在发送字符的始、末加上起始位(低电平)、停止位(高电子)及其它控制位(如奇偶位等),而后在移位脉冲的控制下,低位在前,高位在后,逐位从TXD端(方式0除外)发出。 3.1.2 系统的总体设计

本系统主要由软件和硬件两大部分组成。硬件部分主要完成信息的显示;软件主要完成信号的处理及控制功能等。

系统的硬件采用模块化设计,以AT89C51单片机为核心,与串行口通信电路组成控制系统、LED显示模块构成显示电路。该系统硬件主要包括以下几个模块:AT89C51主控模块、LED显示模块、串行口通信模块等。其中AT89C52主要完成外围硬件的控制以及一些运算功能,串行口通信模块主要完成单片机和PC机之间的通信功能。系统组成方框图所示:

21

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

图3.1.2-1 单片机串行通信控制系统组成方框图

图3.1.2-2 系统原理图 3.2 硬件系统设计

3.2.1 AT89C51最小系统设计

在智能化仪器仪表中,控制核心均为微处理器,而单片机以高性能、高速度、体积小、价格低廉、稳定可靠而得到广泛应用,是设计智能化仪器仪表的首选微控制器,单片机结合简单的接口电路即可构成单片机最小系统,它是智能化仪器仪表的基础,也是测控、监控的重要组成部分。

AT89C51最小系统设计包括时钟电路和复位电路的设计。 (1) 时钟电路

系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。AT89单片机内部有一个用于构成振荡器的高增益反相放大器。引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。因此,此系统电路的晶体振荡器的值为12MHz,电容应尽可能的选择陶瓷电容,电容值约为22μF。在焊接刷电路板时,晶体振荡器和电容应尽可能安装得与单片机芯片靠近,

22

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

以减少寄生电容,更好地保证震荡器稳定和可靠地工作。 (2) 复位电路

由外部复位电路复位来实现。芯片复位电路是复位引脚RST通过一个施密特触发器和复位电路连接到施密特触发器用来抑制噪声,每个机器周期S5P2的输出,采样一次复位电路。上电复位电路通常是自动复位,有两种方式重设按钮,该电路用于在电力系统与按钮复位电路,如图所示。当时钟频率选择为11.0592MHz,C取10μF,R1采用10K。

AT89C51最小系统如图3.2.1.2所示:

图3.2.1 最小系统设计 3.2.2 串行口控制电路

51单片机有一个全双工的串行通信口,使单片机和计算机之间可以方便地进行通信。电平范围是电路能够安全可靠识别信号的电压范围。

CMOS电路的电平范围一般是从0到电源电压。CMOS电平中,高电平(3.5~5V)为逻辑“1”,低电平(0~0.8V)为逻辑“0”。

RS232接口的电平范围是-15V到+15V,RS232电平采用负逻辑,即逻辑“1”:-3~-15V,逻辑“0”:+3~+15V。

SCM是一个TTL电平的串行端口,并在计算机的RS232串行端口的电平,以使两者之间的通信,必须有两个,即把一个外部微控制器的串行电平转换器电路的芯片之间的电平转换电路一个转换的负电压信号RS232 TTL兼容CMOS高表示,低的正电压信号转换成RS-232。

在本项目中利用MAXIM公司的MAX232集成芯片构成转换接口电路。

23

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

图3.2.2-1 MAX232内部框图

图3.2.2-2 MAX232外形图

表3.2.2-1 RS232接口引脚定义

引脚 1 2 3 4 5 6 7 8 9 定义 载波检测 接收数据 发送数据 数据终端准备好 信号地 数据准备好 请求发送 清除发送 振铃提示 符号 DCD RXD TXD DTR SG DSR RTS CTS RI 因此,MAX232芯片的T1in引脚连接AT89C51单片机的TXD引脚,MAX232芯片的R1out引脚连接AT89C51单片机的RXD引脚;MAX232芯片的T1out引脚连接DB9针接口的第2引脚,MAX232芯片的R1in引脚连接DB9针接口的第3引脚,串行通信模块与单片机的接口电路原理图见图3.2.2-3。

24

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

图3.2.2-3 串行通信模块与单片机的接口原理图

3.3 软件系统设计 3.3.1 算法设计

编写单片机异步通信程序步骤如下: (1)设置串口工作方式。

此时需对串行控制器SCON中的SM0、SM1进行设置。PC机与单片机的通信中一般选择串口工作在方式1下。 串行控制器SCON(99H)的格式如下所示:

表 3.3.1-1 SCON数据格式 SM0 SMl SM2 REN TB8 RB8 TI RI (2)选择波特率发生器。

选择定时器l或定时器2做为其波特率发生器。 (3)设置定时器工作方式。

当选择定时器1做为波特率发生器时,需设置其方式寄存器TMOD 为计数方式并选择相应的工作方式(一般选择方式2以避免重装定时器初值);当选择定时器2做为波特率发生器时,需将T2 CON设置为波特率发生器工作方式。 (4)设置波特率参数。

影响波特率的参数有二,特殊寄存器PCON的SMOD位和相应定时器初值。 (5)允许串行中断。

因在程序中我们一般采有中断接收方式,故应设EA=l、ES=1。 (6)允许接收数据。

25

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

设置SCON中的REN为1。表示允许串行口接收数据。 (7)允许定时/计数器工作。

此时开启定时/计数器,使其产生波特率。 (8)编写串行中断服务程序。

当有数据到达串口时,系统将自动执行所编写的中断服务程序。 (9)收/发相应数据。

注意的是发送操作完成需将T1清零,接收工作完成后需将R1清零。 3.3.2 程序设计

主程序主要完成硬件初始化、子程序调用等功能。 (1)初始化

首先把串口接收数据单元RECDATA清零。设置寄存器SCON的SM0、SM1位定义串口工作方式,选择波特率发生器为定时器T1;设定定时器T1工作方式为方式2;设置波特率参数为9600bps;允许串行中断及总中断;允许串口接收数据,定义REN=1;启动定时/计数器T1工作,定义TR1=1。 (2)串口收发数据

判断串口接收标志RI是否为1,为1则收取缓冲器中数据送P1口LED显示,而后判断接收数据是否为48H,为48H则回送给PC机相同数据,否则回送PC机0FFH。主程序设计流程图如图所示:

26

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

开始 设置串口工作方式:SMO,SM1位 设置定时器工作方式;设置波特率参 允许串行中断;允许接收数据;允许定时器工

LED显示初始化

接收标志位N RI=1? Y RI清 取出数据,送P1口显示 是否为48H? N 回送数据48H给PC机串口 回送PC机0FFH Y 发送标志位N TI=1?

TI 清

图3.2.2 程序流程图

27

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

4 基于MSComm控件的PC机串口通信

在PC机端的数据通信中,我们主要引用了MSComm控件。MSComm控件可以方便地进行串口编程,而且可以在VC++语言中很好地运用。根据系统设计,PC机端只需要实现数据的接收。 4.1 MSComm控件串口编程 4.1.1 编程过程 (1)创建工程

打开Microsoft Visual C++,选择新建工程MFC AppWizard[exe],命名工程为PC1comm。选择单个文档->完成->确定。 (2)在当前工程中插入MSComm控件

打开“项目 - >添加到工程 - >组件和控件 - > REGISTED ActiveX控件”菜单中选择组件:微软通信控制,版本6.0 MSComm控件的命令将被插入到当前项目。结果被添加到类的CMSComm。类相关的CMSComm文件mscomm.h和mscomm.cpp也可以加入项目。 (3)创建对话框

选择插入->资源->Dialog->新建->将Microsoft Communications

Control,version 6.0控件加入到对话框。

(2)再根据其他需要添加相应的控件。双击对话框,新建一个对话框CVc3commDlg.在MFC ClassWizard中的Member Variable中添加成员变量,即在ID号码IDC_MSCOMM1下申明变量m_com.在Message Maps下选择ID号

IDC_MSCOMM1,点击Messages:OnComm->add function,就完成了对话框的构建。其余控件类似。 (4)初始化串口

对串口初始化一般来说要完成以下的几个设置: .设定通信端口号,即CommPort属性。 .设定通信协议,即HandShaking属性。 .设定传输数率等参数,即Settings属性。

.设定其他参数,有必要的时候再加上其他的属性设定。 .打开通信端口,即将PortOpen属性设定为True.

本设计中运用了一个对话框CVc3commDlg,而且MSComm控件放置在该对话

框中,故对MSComm控件的初始化也应该放置在该对话框。点击Message。 Maps->CVc3commDlg->WM-INITDIALOG->EditCode,就可以在相应地方添加代码。下面通过本次设计,对上述步骤进行说明(这里的m_com是上述已经申明的

28

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

有效的MSComm对象):

BOOL CVc3commDlg::OnInitDialog() { 位

m_com.SetRThreshold(1);

//参数1参数1意味着每一个串口接收缓冲区中有OnComm事件时,会触发一m_com.SetInputMode(1);

m_com.SetInputLen(0); //设置当前接收区数据长度为0 m_com.GetInput();//先预读缓冲区以清除残留数据 }

(5)捕捉串口事件

MSComm控件可以采用查询或者事件驱动的方法从端口获取数据。事件驱动方法是最广泛:如接收到数据的这些事件发生时,这些通信事件不仅要通知程序并在程序中需要捕获并处理。 (6)串口的读写

完成读写的函数很简单,由GetInput和SetOutput读写完成的函数很简单,只包括GetInput和SetOutput。两个函数的原型是VARIANT GetInput;以及void SetOutput(const VARIANT &new Value);都要使用variant类型(所有Idispatch:Invoke的参数和返回值都是作为VARIANT对象在内部处理的)。无论是在PC上读取上传数据或者发送下行数时,字符串的形式或者是数组形式是最被接受的。由VARIANT文档了解到BSTR可以表示字符串,由于所有的BSTR都包含宽字符,即使没有定

29

CDialog::OnInitDialog();

// TODO: Add extra initialization here //zkh init begin

if(m_com.GetPortOpen())

m_com.SetPortOpen(FALSE);

m_com.SetCommPort(1); //选择com1 if( !m_com.GetPortOpen())

m_com.SetPortOpen(TRUE);//打开串口 AfxMessageBox(\else

m_com.SetSettings(\波特率1200,无校验,8个数据位,1个停止

个接收到的数据大于或等于一个字符。

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

义_UNICODE_UNICODE结果也是一样。Windows 95相对于Windows NT的支持宽字符的方面并不支持。而使用byteArray可以解决上述问题。点击Message Maps->IDC_MSCOMM1->OnComm->EditCode,就可以在相应地方添加代码。 部分程序如下:

void CVc3commDlg::OnOnCommMscomm1() {

VARIANT variant_inp; Int k;

If(m_com.GetCommEvent==2)

{k=m_com.GetInBufferCount();//接收到的字符数目 if (k>0){

variant_inp=m_comm..GetInput();//read ………//对数据进行其他处理 }

//接收到字符,MSComm控件发送事件 }

………//处理其他MSComm控件 }

(7)关闭串口

在使用完MSComm通信对象后,需要关闭通信端口。当然如果注销窗体时,MSComm控件注销同样可以完成这一功能。可以下面的语句来实现: m_com.SetPortOpen(FALSE)。

4.2 基于MSComm控件的串口数据通信 4.2.1 通信处理方法

系统中,只用到MSComm控件的事件驱动通信处理方法。对于系统具体的设计而言,即当单片机端的数据已经发送过来,接收缓冲区内有字符的时候,m_com.GetCommEvent()==2,MSComm控件的OnComm事件就可以捕获并处理这些通信事件,只需要在其中添加自己的处理代码。同时,OnComm事件还可以检查和处理通信中出现的错误。 4.2.2 通信原理

本系统通过一个MSComm控件,实现接收串口字符的功能。由于本系统中的传输数据为工程结构的健康状况,也就是结构上面布线的通断情况。根据本系统的设计,因控件采用的是事件驱动方式,当单片机数据到达PC机时,引发接收数据

30

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

的OnComm事件,PC机开始接收数据。具体接收程序的编写只需要在OnComm事件中添加自己的代码。若出现开始代码00FFH,就连续接受9个字节的数据(8个检测数据,一个校验字节)。对于接收的每个数据,若其前导码为0,则去掉前导码。若接收数据正确时,那么8个检测数据的异或值与校验字节相同。

对于正确接收的数据,然后分解成64两个二进制位(32,用于在前面的L线32到P线后),根据不同的状态(1—连接,0—关)成对应的数据存储表。原来的状态,如果一条线是连接数据库记录(连接= TRUE),而目前的检测状态是开放的(0),然后连接到假的,而断裂时,根据设定的算法组合数的传感单元。此外,本实验系统中,为了便于各测试线的状态在编辑框中的观察表明直流对每个测试线路断开状态(1—连接,0—关闭)。

小结:根据系统设计以及MSComm控件的基础,数据接收的实现是在控件的OnComm事件中实现的。在本次设计中,用到的是CVc3commDlg对话框,而且事件命名为OnOnCommMscomm1,只需要在其中添加处理代码,具体的实现代码见附录B。

31

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

5 仿真调试

PC机和单片机的串口通信系统的调试一般通过一根串口连接线把带有软件上位机的(PC机)和下位机(单片机)连接起来进行,用这种调试串口通信程序比较烦琐。下面介绍一种用纯软件实现PC机和单片机串口通信的仿真方法。上位机由PC机代替,下位机由用PROTEUS软件设计的AT89C51单片机仿真电路代替,串口及连接通过由虚拟串口软件产生和连接。PC机端利用串口调试助手软件显示发送和接收的数据。

在PROTUES中画好原理图后,即进行下面的操作:

① 虚拟串口的设置; ② 导入程序到单片机中; ③ 串口调试软件调试。 5.1 虚拟串口的设置

虚拟串口软件用Virtua1 Serial port Driver 6.0 ,打开软件后,界面如图5.1-1:

图5.1-1 Virtua1 Serial port Driver 6.0界面

在上图里,可以看出我的机器有一个物理口COM1,现在已经模拟出了两个口COM2和COM3,而且他们是连接着的。

我们在PROTEUS中的COMPIM(即RS232接口)默认连到COM1,现在改成COM2,如下图所示:

32

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

图 5.1-2 COMPIM连接到COM2 而后用串口调试软件测试COM3:

图5.1-3 串口调试助手

5.2 导入程序代码到单片机

由于加载到单片机中的程序文件必须是.hex文件,采用第二章提到的keil软件能编译生成.hex文件。 (1)创建工程

33

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

图5.2-1 在Keil中创建一个工程 (2)选择处理器

图5.2-2处理器选择 (3)新建程序代码的文件并保存

34

郑州华信学院毕业设计(论文) PC机与单片机的串行通信设计

图5.2-3 保持代码文件

(4)增加代码文件到工程中,设置生成.hex文件。

图5.2-4 设置输出.hex文件

(5)hex文件生成。

35

本文来源:https://www.bwwdw.com/article/m1n7.html

Top