大连海事大学毕业设计

时间:2024-08-13 09:14:28 计算机应用毕业论文 我要投稿
  • 相关推荐

大连海事大学毕业设计

  1引言

  1.1 设计的目及意义

  一般的PC与单片机之间的串行,需要单片机采集数据,然后用异步串行通讯方式传给PC机。相对而言比较的烦琐,而本文着重用VB具有面向对象的设计方法,友好的用户来探讨在VB下来实现PC机与51单片机之间串行通讯的方法。实现起来要简捷方便。

  随着系统的应用和微机网络的发展,各种控制设备之间的通信功能越来越显得重要。尤其是伴随着单片微型机技术的发展,人们已越来越多地采用单片机来对一些控制系统中如温度、流量和压力等参数进行检测和控制。在本系统中,下位机采用一片AT89S51单片机,用于对发送的数据实施控制,为了实现对输入数据的接收,上位机采用便携式PC机,上、下位机之间通过MAX232芯片实现串行数据通信。PC 机具有强大的监控和功能,而单片机则具有快速及灵活的控制特点,通过PC 机的RS-232 串行接口与外部设备进行通信,是许多测控系统中常用的一种通信解决方案。

  本文将论述在VB 环境下PC 机与单片机之间实现串行通讯的软硬件方案。实现单片机与 PC 机的相互通信。单片机部分由汇编实现,PC 机的通讯程序使用Visual Basic 编写,VB 是Microsoft 公司推出的Windows 应用程序开发工具,因其具有界面友好,编程简便等优点而受到广泛的使用,而且Visual Basic 6.0 版本带有专门实现串行通讯的MSCOMM 控件。因此如何实现PC 机与单片机之间的通讯具有非常重要的现实意义。

  利用VB6.0 的事件驱动方式可以很方便地开发数据采集与监控系统,用单台PC 机可以测量和监控多路控制信号,整控制系统设计方便,对小型测控系统的设计具有很大的实用性。

  1.2 设计实现的功能

  实现单片机与 PC 机的相互通信。具体要求有以下两点:

  ①单片机发固定编好的代码,在用 VB 编好的界面上接收;

  ②在 VB 编好的界面上发送数字,在单片机板上的数码管上显示出来。

  2 硬件设计方案

  为了实现PC机与单片机之间的串行通信,我们首先要清楚了解整个系统所采用的原理图。原理图就象一根红线贯穿于整个系统设计,通过此图我们就能很清楚的看到系统所涉及的内容,然后鉴于此,我们将在以后的章节中依次对所牵涉的内容作详细的论述。下面对原理图作一点说明:从MAX232芯片中的两路发送接收中任选一路作为接口,要注意其发送与接收引脚对应,否则可能对器件或计算机串口造成永久性损坏。如选他T1IN接单片机的发送端TXD,则PC机、的RS—232的接收端RD一定要对应接T1OUT引脚。同时,R1OUT接单片机的接受端RXD引脚,则PC机的RS—232的发送端TD一定要对应接R1IN引脚。

上图为采用MAX232芯片接口的PC机与51单片机串行通信接口原理图

2.1 AT89S51单片机

2.1.1 AT89S51单片机简介

AT89S51 为 ATMEL 所生产的可电气烧录清洗的 8051 相容单芯片,是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。

  AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器, 128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

  2.1.2  AT89S51单片机的功能

AT89S51主要功能列举如下:

1)为一般控制应用的8位单芯片   2)晶片内部具有时钟振荡器

3)内部程式存储器(ROM)为 4KB 4)内部数据存储器(RAM)为 128B

5)外部程序存储器可扩充至 64KB  6)外部数据存储器可扩充至 64KB

7)32 条双向输入输出线,且每条均可以单独做 I/O 的控制

8)5个中断向量源         9)2组独立的 16 位定时器

10)1个全多工串行端口    11)8751 及 8752 单芯片具有数据保密的功能

12)单芯片提供位运算指令

2.1.3 AT89S51各引脚功能介绍:

VCC:AT89S51 电源正端输入,接+5V。

VSS:电源地端。

XTAL1:单芯片系统时钟的反相放大器输入端。

XTAL2:系统时钟的反相放大器输出端。

 RESET:AT89S51的重置引脚,高电平动作。

EA/Vpp:存取外部程序代码,低电平动作。

ALE/PROG:地址锁存器启用信号。

PSEN:程序储存启用,通常这支脚是接到EPROM的OE脚。

  PORT0(P0.0~P0.7):端口0是一个8位宽的开路汲极(Open Drain)双向输出入端口,共有8个位,P0.0表示位0,P0.1表示位1,依此类推。其他三个I/O端口(P1、P2、P3)则不具有此电路组态,而是内部有一提升电路,P0在当作I/O用时可以推动8个LS的TTL负载。如果当EA引脚为低电平时(即取用外部程序代码或数据存储器),P0就以多工方式提供地址总线(A0~A7)及数据总线(D0~D7)。

  PORT2(P2.0~P2.7):端口2是具有内部提升电路的双向I/O端口,每一个引脚可以推动4个LS的TTL负载,若将端口2的输出设为高电平时,此端口便能当成输入端口来使用。P2除了当作一般I/O端口使用外,若是在AT89S51扩充外接程序存储器或数据存储器时,也提供地址总线的高字节A8~A15,这个时候P2便不能当作I/O来使用了。

  PORT1(P1.0~P1.7):端口1也是具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个LS TTL负载,同样地若将端口1的输出设为高电平,便是由此端口来输入数据。

  PORT3(P3.0~P3.7):端口3也具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个TTL负载,同时还多工具有其他的额外特殊功能,包括串行通信、外部中断控制、计时计数控制及外部数据存储器内容的读取或写入控制等功能。

其引脚分配如下:

P3.0:RXD,串行通信输入。P3.1:TXD,串行通信输出。P3.2:INT0,外部中断0输入。

P3.3:INT1,外部中断1输入。P3.4:T0,计时计数器0输入。P3.5:T1,计时计数器1输入。

P3.6:WR:外部数据存储器的写入信号。P3.7:RD,外部数据存储器的读取信号。

本系统所采用的AT89S51芯片如下图所示:

   

  2.1.4 AT89S51 ISP

  ISP为在线编程接口。ISP在线编程接口为89S51单片机提供了方便的在线编程方法,使用时将ISP下载线一端与PC并口相连接,一端与ISP接口相连,使用ISP下载软件即可实现MCU在线编程。

下载线插接说明:两排十针下载口,板图上都有一个小方框,为1号引角;下载线的凸口为正方向,凸口的右侧边的第一个插孔为1号引角,这一点一定要切记,不然的话程序下载不进去。

本系统中所用AT89S51 ISP原理图如下示:

                         AT89S51 ISP

  2.2串行通讯

  2.2.1串行通讯的概念

  串行通讯:一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。

  串行通讯的特点是:数据位传送,传送按位顺序进行,最少只需一根传输线即可完成,低但传送速度慢。串行通讯的距离可以从几米到几千米。

  分类:根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种。

  2.2.2 RS-232C 串口通讯原理

  RS-232C是目前最常用的串行接口标准,用来实现与计算机之间,计算机与外设之间的数据。

  RS-232C串行接口总线适用于设备之间的通信距离不大于15米,传输速率最高为19.2kb/s的场合。RS-232C标准规定的数据传输速率为50、75、100、150、300、600、1200、2400、4800、9600、和19200b/s。RS-232C属单端信号传送,存在共地噪声和不能抑制的共模干扰等问题,因此一般用于短距离通信。

  1) RS-232C接口信号

  一个完整的RS-232C接口有22根线,采用标准的25芯连接器。

  2) RS-232C 典型应用

  用RS-232C总线连接系统时,有近程通信方式和远程通信方式之分。近程通信是指传输距离小于15米的通信,这时可以用RS-232C电缆直接连接。15米以上的长距离通信,需要采用调制解调器。

  下图a)是计算机与终端之间利用RS-232C直接通信的最常用的交叉连线图。图中“发送数据”与“接收数据”是交叉相连的,使得两台设备都能正确地发送和接收。“数据终端变绪”与“数据装置就绪”两根线也是交叉相连的,使得两设备都能检测出对方是否已经准备好。

  在最简单的全双工系统中,公用发送数据、接收数据和信号地三根即可。对MCS-51单片机来说,利用RXD(串行数据接收端)线、TXD(串行数据发送端)线以及一根地线,就可以构成符合RS-232C接口标准的全双工串行通信口。(见图b)

(a)直接连接

(b)最简单的RS-232C数据通信连接

  3) RS-232C接口电平转换

  RS-232C是早期为促进公用电话网络进行数据而制定的标准,其电平对地是对称的,完全与TTL、CMOS逻辑电平不同。

RS-232C采用负逻辑,即:

逻辑1:-5V~-15V。  逻辑0:+5V~+15V。

  由于MCS-51采用TTL电平,若用RS-232C标准接口通信必须进行电平转换。目前RS-232C与TTL电平转换最常用的集成电路芯片是传输线驱动器MC1488传输线接收器MC1489。其内部结构和引脚如下图(c)所示。

  MC1488可完成TTL电平到RS-232C的电平转换,输入为TTL电平,输出为RS-232C电平。其内部有3个与非门和1个反相器。采用±12V或±15V电源供电。

  MC1489可完成由RS-232C到TTL电平转换,输入为RS-232C电平,输出为TTL电平。其内部有4个反相器,采用+5V电源供电。MC1489中每个反相器都有一个控制端,高电平有效,可作为RS-232C操作的控制端。图(d)给出了RS-232C接口电路原理图。

(c)RS-232C电平转换芯片MC1488和MC1489

(d) RS-232C接口电路

MAX232芯片

  MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的接口电路,使用+5v单电源供电。它的内部结构基本可分三个部分;

  第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。

  第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DP9插头;DP9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。

  第三部分就是供电。15脚DNG、16脚VCC(+5v)。

  2.2.3 串行接口

  控制串行接口的寄存器有两个,即特殊功能寄存器PCON和SCON。

  1)PCON中的波特率选择位

  PCON是一个特殊功能寄存器(如下图所示),没有位寻址功能,字节地址为87H。其中D7位(SMOD)为波特率选择位。其他位均无意义。复位时的SMOD值为0。可用MOV PCON。#80H或MOV 87H,#80H指令使该位置1。当SMOD=1时,在串行接口方式1、2或3情况下,波特率提高一倍。

            D7                                               D0

 SMOD

波特率选择位        |                   无定义位                          |

2)串行接口控制寄存器 SCON

特殊功能寄存器SCON用于定义串行接口的操作方式和控制它的某些功能。其字节地址为98H。寄存器中各位内容如下:

              位    D7    D6    D5    D4    D3    D2    D1     D0

SM0,SM1 串行接口操作方式选择位。两个选择位对应于四种状态,所以串行接口能以四种方式工作。

SM2 允许方式2和3的多机通信使能位。

REN 允许串行接收位。由软件置位或清0,使允许接收或禁止接收。

TB8 是在方式2和3中要发送的第9位数据可按需要由软件置位或复位

RB8  是方式2和3中已接收到的第9位数据。

TI   发送中断标志。

RI   接收中断标志。

串行接口工作方式

串行接口的操作方式由SM0、SM1定义,编码和功能如下表所示

串行接口方式选择

2.2.4 TMOD介绍

定时器/计数器T0、T1 的方式寄存器TMOD

字节地址为89H。TMOD的格式如下:低4位用来定义T0,高4位用来定义T1D7

      D7    D6      D5      D4      D3      D2       D1    D0 

|               T1                 |              T0              |

各位的意义如下:

1、  GATE——门控位。

GATE=1时,由外部中断引脚、和TR0、TR1共同来启动定时器。当引脚为高电平时,TR0置位启动定时器T0;当引脚为高电平时,TR1置位,启动定时T1。  

GATE=0时,仅由TR0和TR1置位来启动定时器T0和T1

2、  C/T——功能选择位。

C/T=1时,选择计数功能;

C/T=0时,选择定时功能。

T0、T1 的计数、定时功能是通过TMOD中的位来选择的。

3、  M1、M0——工作方式选择位。

由于有M1和M0两位,可以有四种工作方式,如下表所示。

定时器/计数器的工作方式

  3 串行数据程序设计

  3.1 通信协议

  本系统串行通信采用异步通信方式。协议如下:

  1.一帧数据由1位起始位、8位数据位、无奇偶校验位、1位停止位共10位组成。

  2.波特率设为9600bps。单片机串行口按方式1工作,波特率由定时器T1控制,PC机串口波特率通过VB通讯控件的Settings属性设置,为保证数据传送的准确性,两者的波特率必须一致。

  本次通讯中,我们以一个测控系统的上位机和下位机之间的通信为背景,给出单片机部分和VB 下的通信程序实例,系统中单片机负责数据采集、处理和控制,上位机进行现场可视化检测,通信协议采用异步串行通信方式,通过RS232 的RTS 信号进行收发转换,传输数据采用二进制数据,上位机与下位机之间采用主从式通讯。

  3.2 下位机(单片机)串行通信及程序设计

  平台介绍及编程方法

  汇编

  汇编语言是针对一类(甚至几类),抽象出来的一种符号语言并把这些符号加以统一规定,使得使用同类计算机的人都了解这些符号的意义,这样,使得用汇编语言编写的程序可以在这一类型的任何一台计算机上使用。这就有了极大的灵活性,当然不同类型的计算机的汇编语言也不同。它们都必须由生产厂家提供的汇编语言来编写。另外.汇编语言还增加了宏指令的功能。汇编语言是计算机卫程控制中最常用的语言。

  汇编语言的主要优点就是可以直接控制计算机硬件,可以编写在时间和空间两方面更有效的程序。这些优点使得汇编语言在程序设计中占有重要的地位。是不可取代的。

  但汇编语言的缺点也是明显的,它与处理器密切相关,要求程序员熟悉计算机硬件系统,考虑许多细节问题,所以程序繁琐,调试、维护、交流和移植困难。因此,有时可以采用高级语言和汇编语言混合编程的方怯,互相取长补短,更好地解决实际间题。

  汇编语言生要应用场合有以下几种:

  l)程序要具有较短的运行时问,或者只能占用较小的存储客量。例如操作系统的核心 程序段,实时控制系统的软件等。

  2)程序与计算机硬件密切相关,程序要直接控制硬件。例如to接口电路的初始化程序段,外部设备的底层驱动程序等。

  3)大型软件需要提高性能、优化处理的部分。例如计算机系统频繁调用的子程序、动态链接库等。

  4)没有适合的高级语言的时候。例如开发最新的处理器程序时。

  伟福软件介绍:

  伟福系列仿真器伟福仿真品种多、功能强,特点如下:

  1)主机+POD组合,通过更换POD,可以对各种CPU进行仿真。

  2) 双平台:DOS版本,WINDOWS版本。其中WINDOWS版本功能强大。

  3) 双工作模式:a.软件模拟仿真(不要仿真器也能模拟仿真)。 硬件仿真。

  4) 双CPU结构,100% 不占用户资源。

  5) 双集成环境:编辑、编译、下载、调试全部集中在一个环境下。多种仿真器,多类CPU仿真全部集成在一个环境下。可仿真51系列,196系列,PIC系列,飞利蒲公司的552、LPC764、DALLAS320,华邦438等51增强型CPU。为了跟上形势,现在很多工程师需要面对和掌握不同和项目器、编辑器、编译器。伟福 WINDOWS调试软件为您提供了一个全集成环境,统一的界面,包含一个项目管理器,一个功能强大的编辑器,汇编Make、Build和调试工具并提供一个与第三方编译器的接口。

  6) 强大的分析仪综合调试功能:随着科学技术的发展,单片机通讯方面的运用越来越多。有了逻辑仪,用它可以分别或者同时对发送方、接收方的输入或者输出波形进行记录、存储、对比、测量等各种直观的分析,可以将实际输出通讯报文的波形与源程序相比较,可立即发现问题所在。从而极大地方便了调试。

  7) 强大的追踪器功能:追踪功能以总线周期为单位,实时记录仿真过程中CPU发生的总线事件,其触发条件方式同逻辑分析仪。追踪窗口在仿真停止时可收集显示追踪的CPU指令记忆信息,可以以总线反汇编码模式、源程序模式对应显示追踪结果。屏幕窗口显示波形图最多追踪记忆指令32K并通过仿真器的断点、单步、全速运行或各种条件组合断点来完成追踪功能。总线跟踪可以跟踪程序的运行轨迹。可以软件运行时间。

  编程方法

  本系统中传输协议为9600,8,N,1,即波特率为9600b/s,传送8个数据位。没有校验位,一个停止位。在PC机中也设置为相同的协议。1)控制寄存器SCON的设置为:SM0、SM1为0、1,即为串行工作方式1,REN为1,即允许接收。这样SCON中的值是0X50H,(使用汇编语言是MOV SCON,#50H。)2)TMOD寄存器的设置为:使用定时器1。M0=0,M1=1,工作于方式2,自动重新载入计数值。TMOD=0X20H。(使用汇编语言是MOV TMOD,#20H)3) 波特率的设置:本系统上的工作时钟为11.0592MHz, 波特率为9600b/s,对TH1的重载入计数器值由下式计算可得:TH1=256-11059200/384*9600=253=FDH TH1=0XFDH(使用汇编语言是MOV TH1,#0FDH)。

 流程图如右:


根据以上设置汇编编写串行端口的初始化程序:

接收程序:

 MAIN:   MOV    TMOD,#20H ;

MOV    TH1,#0FDH;

MOV    TL1,#0FDH;

SETB   TR1;

MOV    SCON,#50H;

LOOP:   JBC    RI,DISP

SJMP    LOOP

DISP:   MOV    A,SBUF

MOV    DPTR,#TAB

MOVC  A,@A+DPTR

MOV   P2,A

SJMP   LOOP

TAB:   DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

END

发送程序:

          ORG 0000H

START:   MOV    TMOD,#20H;

MOV     TL1,#0FDH

MOV     TH1,#0FDH;

SETB     TR1 

MOV     SCON,#40H  

MOV     R0,#20H

MOV     R7,#32 

MOV     A,#40  

LOOP1:  

MOV     @R0,A

INC      A

INC      R0

DJNZ     R7,LOOP1

MOV     R0,#20H

MOV     R7,#32

LOOP:    MOV     A,@R0

ACALL   YANSHI

ACALL   SPOUT

INC      R0

DJNZ     R7,LOOP 

SJMP     START

SPOUT:  

MOV     SBUF,A

JNB      TI,$

CLR      TI

RET

YANSHI: MOV      R6,#250

D1:      MOV      R5,#250

DJNZ     R5,$

DJNZ     R6,D1

RET

END 

  3.3上位机(PC机)串行及程序设计

  3.3.1 平台介绍及编程方法

  VB语言简介

  在本系统中PC机采用Visual Basic(简称VB)编程。VB已成为WINDOWS系统开发的主要语言,以其高效、简单易学及功能强大的特点越来越为广大程序设计人员及用户所青睐。VB支持面向对象的程序设计,具有结构化的事件驱动编程模式并可以使用无限扩增的控件,而且可以十分简便地作出良好的人机界面。

  用VB6.0开发串行通信程序有两种法,一种是利用Windows的API函数;另一种是采用VB6.0的通信控件MSComm。利用API函数编写串行通信程序较为复杂,需要掌握大量的通信知识,其优点是可实现的功能更丰富、应用面更广泛,适合于编写较为复杂的低层次通信程序。而VB6.0的MSComm通信控件提供了标准的事件处理函数、事件、方法,并通过控件属性对串口参数进行设置,比较容易地解决了串口通信问题。该控件可设置串行通信的数据发送和接收,对串口状态及串口通信的信息格式和协议进行设置。这是一个标准的十位串口通信,包括8位标准数据和数据的起始位和停止位。在发送或接收数据过程中触发OnComm事件,通过编程访问 CommEvent属性了解通信事件的类型,分别进行各自的处理。每个通信控件对应一个串口,可以设计多个通信控件来访问多个通信口。

PC机程序设计流程图如下示


                            

                                                  NO


                                     YES

                                           

                                  

                                              

                                                            NO


                                       YES

                                      

                                               

                                         

 


  3.3.2 VB6.0的控件及通信方式

    MSComm通讯控件简介

MSComm是VB6.0提供的ActiveX控件,使用前需将该控件添加到VB工具   栏。MSComm控件串口具有完善的串口数据的发送和接收功能。通过此控件,PC机可以利用串行口与其它设备实现轻松连接,简单高效地实现设备之间的通讯。此控件的事件响应有两种处理方式,事件驱动方式:由MSComm控件的OnComm事件捕获并处理通讯错误及事件;查询方式:通过检查CommEvent属性的值来判断事件和错误。

1)MSComm控件的主要属性和方法

a.    CommPort:设置或返回串行端口号,其取值范围为1—99,缺省为1

b.    Setting: 设置或返回串行端口的波特率、奇偶校验位、数据位数、停位。如:MSComm.Setting="9600, n, 8, 1”。

c.    PortOpen:打开或关闭串行端口。

d.    RThreshold:该属性为一阀值,它确定当接收缓冲区内字节个数达到或超过该值后就产生MSComml--OnComm事件。

e.    Input:从接收缓冲区移走一串字符。

f.    Output:向发送缓冲区传送一字符串。

2)CommEvent属性 :

如果在通讯过程中发生错误或事件,就会引发OnComm事件并由CommEvent   属性代码反映错误类型,可根据该属性值来执行不同的程序操作或数据处理。以下是部分属性常数值及其含义:

a.    ComEvSend:其值为1,发送缓冲区的内容少于SThreshold指定的值。

b.    ComEvReceive:其值为2,接收缓冲区内字符数达到RThreshold值,该事件在缓冲区中数据被移走前将持续产生。

c.    ComEventRxParity:其值为1009,奇偶校验。

d.    ComEvEOF:其值为7,接收数据中出现文件结束字符。

本系统采用事件驱动方式进行串口通信设计,下图2为上位机通信界面,设计了2个命令按扭,分别为发送、清空数据;两个文本框,Text1用于输入需从下位机读取的数,Text2用于显示下位机发送来的数据;3个Frame控件,一个Label控件,当然还需要一个MSComm控件。

MSComm控件属性设置如图1示:

                                              

 

(图2)          

 下面是MSComm控件的初始化程序、部分数据发送和接受程序

  4调试与结论

  该系统目前已调试成功,完成了PC机与51单片机之间的串行。并且实现了下列功能:1)在VB界面上发送任一数字在51单片机的数码管上都能成功的接收 2)同样通过向51单片机内写入的程序,在VB界面上可以接收到相对应的内容且运行良好。

调试过程如下:

硬件方面:

  该系统的硬件调试主要是排查单片机印刷电路板的问题和连接上的一些问题。在该系统中,首先通过了仔细地推敲系统原理,确认无误;其次对照设计图纸查印制电路板,看是否有粘接等工艺现象;最后,检查外围连接是否有误,通过这几个方面的反复调试,可确保电路板的无误性。

  在本系统的硬件调试过程中,出现了下列两种情况

  1)电压不稳定而导致程序无法写入的情况,使电压稳定的方法是改用新的电池,或者是再次设计电源方案,在这里是用电源接通教学实验板,然后再把教学实验板与本系统相    连接,这样,就可以得到稳定的电压了。

  2)还出现的一个问题是数码管不显示,检查后是焊接上出现了一点的失误。

  软件方面:

  本系统在软件调试方面也没有规律可循,调试时更多的是凭经验。软件调试的主要任务是排查错误。通过在Wave E2000编译器下调试程序,有两种错误,一种错误,也就是语法错误,是很容易被发现的,另一种是功能错误,是指在没有语法错误的基础上,由于设计思想或算法的问题导致不能实现软件功能的一种错误。调试过程中出现的问题主要有以下四个方面:

  1)用其它串口调试软件能够很好的实现两者之间的串行通信,成功的接收和发送数据,但使用我们的VB程序却不能实现,要么只能实现接收功能,要么只能实现发送功能。之后通过对VB程序做多次的改动与测试才达到理想的结果。

  2)在VB界面上发送的数据与单片机的数码管上显示的数字不相符,这个问题是我们汇编程序的问题,由于汇编符号的繁多加上我们的粗心在输入代码的过程中难免出现一些看不见的问题,造成调试过程中出现意外。借此我想提醒大家的是搞设计搞研究必须做到细心,要有一颗敬业的心对待我们接受的任务,有耐心面临出现的困难。

  3)由于要实现上下位机的串行通信,所以两者之间的波特率是否一致也是一个不容忽视的问题,在开始我并没有太注意这个方面的情况,到各方面的准备工作都做好要进行调试的时候,才发现有个二者波特率设置是否相同将影响到整个通信过程,我赶紧作了修改才免遭一次调试失败。

  4)还有最后一点注意的地方是,利用MSComm控件比较方便地开发串行通信程序,实现串行通讯原理已经得到实验结果验证,考虑到将来对系统实时性的要求,采用了MSComm控件的查询处理机制,避免了中断处理机制的不稳定和不连续性,而且还可以很方便地控制多个串口,只需插入多个MSComm控件,并为每个MSComm控件编写OnComm()函数。但是我们也清楚的体会到MSComm控件在VB中的使用较为复杂。这一点是我们以后在运用中需要加强的地方。

  伴随着单片微型机技术的发展,人们已越来越多地采用单片机来对一些控制系统中如温度、流量和压力等参数进行检测和控制。希望通过大家的共同努力能在PC机与单片机这方面取得新的成绩有突出的表现,能够很好的将学到知识运用到实际生活中,比如上面提到的利用单片机实现对温度的实时检测与控制已经得到广泛的应用。另外我们还可以在单片机的接口上再加接显示器,这样就更能方便的对系统进行操作与控制。

  通过这次毕业设计,我深刻体会到专业知识、专业技能分析和解决问题的能力在实际生活中是多么的重要,在完成设计任务的同时我这些方面的能力有了一个全面的提高和锻炼。具体表现在对单片机与PC机的串行通信的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(汇编语言与VB)的掌握方面都向前迈了一大步,为日后使我能成为合格的应用型人才打下了良好的基础。

  采用本系统实现PC机与单片机串行通信与一般其它系统的比较:一般的PC机与单片机之间的串行通信,需要单片机采集数据,然后用异步串行通讯方式传给PC机。相对而言通讯速率不是很理想,在一些要求通讯传输速率比较快的地方,普通的PC机与单片机之间的串行通信显然是不能满足其要求的。利用VB6.0 的事件驱动方式可以很方便地开发数据采集与监控系统,用单台PC 机可以测量和监控多路控制信号,整控制系统设计方便,对小型测控系统的设计具有很大的实用性。且传输数据的速率要比普通的串行通信要快些。

  对于目前广泛应用的Windows下实现PC机与单片机之间的通信问题,希望大家能提出宝贵的意见。

参考文献

[1]蔡美琴等.MCS-51系列单片机系统及其应用(第二版).高等出版社,2004.

[2]杨毓,李明.Visual Basic6.0实用开发教程[M].成都:科技大学出版社,2001.

[3]刘新民,蔡琼等.VB6.0程序设计.北京:清华大学大学出版社,2004.

[4]李华.单片机通用接口技术[M].北京:北京航空航天大学出版社,1999

[5]魏庆福,姚亦鸣,等STD总线工业控制机的设计与应用[M].北京:科学出版社,1992

[6]何立民,单片机应用系统设计.北京:航空航天大学出版社,1992

[7]美Jan Axelson 著,串行端口大全,精英科技译,2001.5四

[8]刘瑞新等. Visual Basic程序设计教程,北京:工业出版社, 2002

[9]傅扬烈 单片机原理与应用教程,电子工业出版社, 2002.1

[10]余锡存 曹国华.单片机原理及接口技术[M].陕西:西安电子科技大学出版社,2000.7

[11]David Jung等著.前导工作室译. Visual Basic6.0开发人员参考手册. 北京:机械工业出版社, 2000

《大连海事大学毕业设计.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【大连海事大学毕业设计】相关文章:

论海事的法律冲突03-25

大学生毕业设计开题报告范文03-27

海事审判实体正义的程序保障初探03-19

我国海事审判制度的改革与完善03-18

浅析我国海事诉讼推定过错制度03-24

大学生毕业设计开题报告怎么写02-23

大学生毕业设计与就业之间的矛盾分析03-02

XX大学毕业设计(论文)管理规定开题报告03-22

兰州交通大学毕业设计(论文)规范要求02-27

在线咨询

论文-AI自动生成器

万字论文 一键生成

输入题目 一键搞定毕业范文模板
AI原创 低重复率 附赠査重报告

点击生成
ai帮你写文章
一键生成 高质量 不重复
微信扫码,即可体验

大连海事大学毕业设计

  1引言

  1.1 设计的目及意义

  一般的PC与单片机之间的串行,需要单片机采集数据,然后用异步串行通讯方式传给PC机。相对而言比较的烦琐,而本文着重用VB具有面向对象的设计方法,友好的用户来探讨在VB下来实现PC机与51单片机之间串行通讯的方法。实现起来要简捷方便。

  随着系统的应用和微机网络的发展,各种控制设备之间的通信功能越来越显得重要。尤其是伴随着单片微型机技术的发展,人们已越来越多地采用单片机来对一些控制系统中如温度、流量和压力等参数进行检测和控制。在本系统中,下位机采用一片AT89S51单片机,用于对发送的数据实施控制,为了实现对输入数据的接收,上位机采用便携式PC机,上、下位机之间通过MAX232芯片实现串行数据通信。PC 机具有强大的监控和功能,而单片机则具有快速及灵活的控制特点,通过PC 机的RS-232 串行接口与外部设备进行通信,是许多测控系统中常用的一种通信解决方案。

  本文将论述在VB 环境下PC 机与单片机之间实现串行通讯的软硬件方案。实现单片机与 PC 机的相互通信。单片机部分由汇编实现,PC 机的通讯程序使用Visual Basic 编写,VB 是Microsoft 公司推出的Windows 应用程序开发工具,因其具有界面友好,编程简便等优点而受到广泛的使用,而且Visual Basic 6.0 版本带有专门实现串行通讯的MSCOMM 控件。因此如何实现PC 机与单片机之间的通讯具有非常重要的现实意义。

  利用VB6.0 的事件驱动方式可以很方便地开发数据采集与监控系统,用单台PC 机可以测量和监控多路控制信号,整控制系统设计方便,对小型测控系统的设计具有很大的实用性。

  1.2 设计实现的功能

  实现单片机与 PC 机的相互通信。具体要求有以下两点:

  ①单片机发固定编好的代码,在用 VB 编好的界面上接收;

  ②在 VB 编好的界面上发送数字,在单片机板上的数码管上显示出来。

  2 硬件设计方案

  为了实现PC机与单片机之间的串行通信,我们首先要清楚了解整个系统所采用的原理图。原理图就象一根红线贯穿于整个系统设计,通过此图我们就能很清楚的看到系统所涉及的内容,然后鉴于此,我们将在以后的章节中依次对所牵涉的内容作详细的论述。下面对原理图作一点说明:从MAX232芯片中的两路发送接收中任选一路作为接口,要注意其发送与接收引脚对应,否则可能对器件或计算机串口造成永久性损坏。如选他T1IN接单片机的发送端TXD,则PC机、的RS—232的接收端RD一定要对应接T1OUT引脚。同时,R1OUT接单片机的接受端RXD引脚,则PC机的RS—232的发送端TD一定要对应接R1IN引脚。

上图为采用MAX232芯片接口的PC机与51单片机串行通信接口原理图

2.1 AT89S51单片机

2.1.1 AT89S51单片机简介

AT89S51 为 ATMEL 所生产的可电气烧录清洗的 8051 相容单芯片,是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。

  AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器, 128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

  2.1.2  AT89S51单片机的功能

AT89S51主要功能列举如下:

1)为一般控制应用的8位单芯片   2)晶片内部具有时钟振荡器

3)内部程式存储器(ROM)为 4KB 4)内部数据存储器(RAM)为 128B

5)外部程序存储器可扩充至 64KB  6)外部数据存储器可扩充至 64KB

7)32 条双向输入输出线,且每条均可以单独做 I/O 的控制

8)5个中断向量源         9)2组独立的 16 位定时器

10)1个全多工串行端口    11)8751 及 8752 单芯片具有数据保密的功能

12)单芯片提供位运算指令

2.1.3 AT89S51各引脚功能介绍:

VCC:AT89S51 电源正端输入,接+5V。

VSS:电源地端。

XTAL1:单芯片系统时钟的反相放大器输入端。

XTAL2:系统时钟的反相放大器输出端。

 RESET:AT89S51的重置引脚,高电平动作。

EA/Vpp:存取外部程序代码,低电平动作。

ALE/PROG:地址锁存器启用信号。

PSEN:程序储存启用,通常这支脚是接到EPROM的OE脚。

  PORT0(P0.0~P0.7):端口0是一个8位宽的开路汲极(Open Drain)双向输出入端口,共有8个位,P0.0表示位0,P0.1表示位1,依此类推。其他三个I/O端口(P1、P2、P3)则不具有此电路组态,而是内部有一提升电路,P0在当作I/O用时可以推动8个LS的TTL负载。如果当EA引脚为低电平时(即取用外部程序代码或数据存储器),P0就以多工方式提供地址总线(A0~A7)及数据总线(D0~D7)。

  PORT2(P2.0~P2.7):端口2是具有内部提升电路的双向I/O端口,每一个引脚可以推动4个LS的TTL负载,若将端口2的输出设为高电平时,此端口便能当成输入端口来使用。P2除了当作一般I/O端口使用外,若是在AT89S51扩充外接程序存储器或数据存储器时,也提供地址总线的高字节A8~A15,这个时候P2便不能当作I/O来使用了。

  PORT1(P1.0~P1.7):端口1也是具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个LS TTL负载,同样地若将端口1的输出设为高电平,便是由此端口来输入数据。

  PORT3(P3.0~P3.7):端口3也具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个TTL负载,同时还多工具有其他的额外特殊功能,包括串行通信、外部中断控制、计时计数控制及外部数据存储器内容的读取或写入控制等功能。

其引脚分配如下:

P3.0:RXD,串行通信输入。P3.1:TXD,串行通信输出。P3.2:INT0,外部中断0输入。

P3.3:INT1,外部中断1输入。P3.4:T0,计时计数器0输入。P3.5:T1,计时计数器1输入。

P3.6:WR:外部数据存储器的写入信号。P3.7:RD,外部数据存储器的读取信号。

本系统所采用的AT89S51芯片如下图所示:

   

  2.1.4 AT89S51 ISP

  ISP为在线编程接口。ISP在线编程接口为89S51单片机提供了方便的在线编程方法,使用时将ISP下载线一端与PC并口相连接,一端与ISP接口相连,使用ISP下载软件即可实现MCU在线编程。

下载线插接说明:两排十针下载口,板图上都有一个小方框,为1号引角;下载线的凸口为正方向,凸口的右侧边的第一个插孔为1号引角,这一点一定要切记,不然的话程序下载不进去。

本系统中所用AT89S51 ISP原理图如下示:

                         AT89S51 ISP

  2.2串行通讯

  2.2.1串行通讯的概念

  串行通讯:一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。

  串行通讯的特点是:数据位传送,传送按位顺序进行,最少只需一根传输线即可完成,低但传送速度慢。串行通讯的距离可以从几米到几千米。

  分类:根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种。

  2.2.2 RS-232C 串口通讯原理

  RS-232C是目前最常用的串行接口标准,用来实现与计算机之间,计算机与外设之间的数据。

  RS-232C串行接口总线适用于设备之间的通信距离不大于15米,传输速率最高为19.2kb/s的场合。RS-232C标准规定的数据传输速率为50、75、100、150、300、600、1200、2400、4800、9600、和19200b/s。RS-232C属单端信号传送,存在共地噪声和不能抑制的共模干扰等问题,因此一般用于短距离通信。

  1) RS-232C接口信号

  一个完整的RS-232C接口有22根线,采用标准的25芯连接器。

  2) RS-232C 典型应用

  用RS-232C总线连接系统时,有近程通信方式和远程通信方式之分。近程通信是指传输距离小于15米的通信,这时可以用RS-232C电缆直接连接。15米以上的长距离通信,需要采用调制解调器。

  下图a)是计算机与终端之间利用RS-232C直接通信的最常用的交叉连线图。图中“发送数据”与“接收数据”是交叉相连的,使得两台设备都能正确地发送和接收。“数据终端变绪”与“数据装置就绪”两根线也是交叉相连的,使得两设备都能检测出对方是否已经准备好。

  在最简单的全双工系统中,公用发送数据、接收数据和信号地三根即可。对MCS-51单片机来说,利用RXD(串行数据接收端)线、TXD(串行数据发送端)线以及一根地线,就可以构成符合RS-232C接口标准的全双工串行通信口。(见图b)

(a)直接连接

(b)最简单的RS-232C数据通信连接

  3) RS-232C接口电平转换

  RS-232C是早期为促进公用电话网络进行数据而制定的标准,其电平对地是对称的,完全与TTL、CMOS逻辑电平不同。

RS-232C采用负逻辑,即:

逻辑1:-5V~-15V。  逻辑0:+5V~+15V。

  由于MCS-51采用TTL电平,若用RS-232C标准接口通信必须进行电平转换。目前RS-232C与TTL电平转换最常用的集成电路芯片是传输线驱动器MC1488传输线接收器MC1489。其内部结构和引脚如下图(c)所示。

  MC1488可完成TTL电平到RS-232C的电平转换,输入为TTL电平,输出为RS-232C电平。其内部有3个与非门和1个反相器。采用±12V或±15V电源供电。

  MC1489可完成由RS-232C到TTL电平转换,输入为RS-232C电平,输出为TTL电平。其内部有4个反相器,采用+5V电源供电。MC1489中每个反相器都有一个控制端,高电平有效,可作为RS-232C操作的控制端。图(d)给出了RS-232C接口电路原理图。

(c)RS-232C电平转换芯片MC1488和MC1489

(d) RS-232C接口电路

MAX232芯片

  MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的接口电路,使用+5v单电源供电。它的内部结构基本可分三个部分;

  第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。

  第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DP9插头;DP9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。

  第三部分就是供电。15脚DNG、16脚VCC(+5v)。

  2.2.3 串行接口

  控制串行接口的寄存器有两个,即特殊功能寄存器PCON和SCON。

  1)PCON中的波特率选择位

  PCON是一个特殊功能寄存器(如下图所示),没有位寻址功能,字节地址为87H。其中D7位(SMOD)为波特率选择位。其他位均无意义。复位时的SMOD值为0。可用MOV PCON。#80H或MOV 87H,#80H指令使该位置1。当SMOD=1时,在串行接口方式1、2或3情况下,波特率提高一倍。

            D7                                               D0

 SMOD

波特率选择位        |                   无定义位                          |

2)串行接口控制寄存器 SCON

特殊功能寄存器SCON用于定义串行接口的操作方式和控制它的某些功能。其字节地址为98H。寄存器中各位内容如下:

              位    D7    D6    D5    D4    D3    D2    D1     D0

SM0,SM1 串行接口操作方式选择位。两个选择位对应于四种状态,所以串行接口能以四种方式工作。

SM2 允许方式2和3的多机通信使能位。

REN 允许串行接收位。由软件置位或清0,使允许接收或禁止接收。

TB8 是在方式2和3中要发送的第9位数据可按需要由软件置位或复位

RB8  是方式2和3中已接收到的第9位数据。

TI   发送中断标志。

RI   接收中断标志。

串行接口工作方式

串行接口的操作方式由SM0、SM1定义,编码和功能如下表所示

串行接口方式选择

2.2.4 TMOD介绍

定时器/计数器T0、T1 的方式寄存器TMOD

字节地址为89H。TMOD的格式如下:低4位用来定义T0,高4位用来定义T1D7

      D7    D6      D5      D4      D3      D2       D1    D0 

|               T1                 |              T0              |

各位的意义如下:

1、  GATE——门控位。

GATE=1时,由外部中断引脚、和TR0、TR1共同来启动定时器。当引脚为高电平时,TR0置位启动定时器T0;当引脚为高电平时,TR1置位,启动定时T1。  

GATE=0时,仅由TR0和TR1置位来启动定时器T0和T1

2、  C/T——功能选择位。

C/T=1时,选择计数功能;

C/T=0时,选择定时功能。

T0、T1 的计数、定时功能是通过TMOD中的位来选择的。

3、  M1、M0——工作方式选择位。

由于有M1和M0两位,可以有四种工作方式,如下表所示。

定时器/计数器的工作方式

  3 串行数据程序设计

  3.1 通信协议

  本系统串行通信采用异步通信方式。协议如下:

  1.一帧数据由1位起始位、8位数据位、无奇偶校验位、1位停止位共10位组成。

  2.波特率设为9600bps。单片机串行口按方式1工作,波特率由定时器T1控制,PC机串口波特率通过VB通讯控件的Settings属性设置,为保证数据传送的准确性,两者的波特率必须一致。

  本次通讯中,我们以一个测控系统的上位机和下位机之间的通信为背景,给出单片机部分和VB 下的通信程序实例,系统中单片机负责数据采集、处理和控制,上位机进行现场可视化检测,通信协议采用异步串行通信方式,通过RS232 的RTS 信号进行收发转换,传输数据采用二进制数据,上位机与下位机之间采用主从式通讯。

  3.2 下位机(单片机)串行通信及程序设计

  平台介绍及编程方法

  汇编

  汇编语言是针对一类(甚至几类),抽象出来的一种符号语言并把这些符号加以统一规定,使得使用同类计算机的人都了解这些符号的意义,这样,使得用汇编语言编写的程序可以在这一类型的任何一台计算机上使用。这就有了极大的灵活性,当然不同类型的计算机的汇编语言也不同。它们都必须由生产厂家提供的汇编语言来编写。另外.汇编语言还增加了宏指令的功能。汇编语言是计算机卫程控制中最常用的语言。

  汇编语言的主要优点就是可以直接控制计算机硬件,可以编写在时间和空间两方面更有效的程序。这些优点使得汇编语言在程序设计中占有重要的地位。是不可取代的。

  但汇编语言的缺点也是明显的,它与处理器密切相关,要求程序员熟悉计算机硬件系统,考虑许多细节问题,所以程序繁琐,调试、维护、交流和移植困难。因此,有时可以采用高级语言和汇编语言混合编程的方怯,互相取长补短,更好地解决实际间题。

  汇编语言生要应用场合有以下几种:

  l)程序要具有较短的运行时问,或者只能占用较小的存储客量。例如操作系统的核心 程序段,实时控制系统的软件等。

  2)程序与计算机硬件密切相关,程序要直接控制硬件。例如to接口电路的初始化程序段,外部设备的底层驱动程序等。

  3)大型软件需要提高性能、优化处理的部分。例如计算机系统频繁调用的子程序、动态链接库等。

  4)没有适合的高级语言的时候。例如开发最新的处理器程序时。

  伟福软件介绍:

  伟福系列仿真器伟福仿真品种多、功能强,特点如下:

  1)主机+POD组合,通过更换POD,可以对各种CPU进行仿真。

  2) 双平台:DOS版本,WINDOWS版本。其中WINDOWS版本功能强大。

  3) 双工作模式:a.软件模拟仿真(不要仿真器也能模拟仿真)。 硬件仿真。

  4) 双CPU结构,100% 不占用户资源。

  5) 双集成环境:编辑、编译、下载、调试全部集中在一个环境下。多种仿真器,多类CPU仿真全部集成在一个环境下。可仿真51系列,196系列,PIC系列,飞利蒲公司的552、LPC764、DALLAS320,华邦438等51增强型CPU。为了跟上形势,现在很多工程师需要面对和掌握不同和项目器、编辑器、编译器。伟福 WINDOWS调试软件为您提供了一个全集成环境,统一的界面,包含一个项目管理器,一个功能强大的编辑器,汇编Make、Build和调试工具并提供一个与第三方编译器的接口。

  6) 强大的分析仪综合调试功能:随着科学技术的发展,单片机通讯方面的运用越来越多。有了逻辑仪,用它可以分别或者同时对发送方、接收方的输入或者输出波形进行记录、存储、对比、测量等各种直观的分析,可以将实际输出通讯报文的波形与源程序相比较,可立即发现问题所在。从而极大地方便了调试。

  7) 强大的追踪器功能:追踪功能以总线周期为单位,实时记录仿真过程中CPU发生的总线事件,其触发条件方式同逻辑分析仪。追踪窗口在仿真停止时可收集显示追踪的CPU指令记忆信息,可以以总线反汇编码模式、源程序模式对应显示追踪结果。屏幕窗口显示波形图最多追踪记忆指令32K并通过仿真器的断点、单步、全速运行或各种条件组合断点来完成追踪功能。总线跟踪可以跟踪程序的运行轨迹。可以软件运行时间。

  编程方法

  本系统中传输协议为9600,8,N,1,即波特率为9600b/s,传送8个数据位。没有校验位,一个停止位。在PC机中也设置为相同的协议。1)控制寄存器SCON的设置为:SM0、SM1为0、1,即为串行工作方式1,REN为1,即允许接收。这样SCON中的值是0X50H,(使用汇编语言是MOV SCON,#50H。)2)TMOD寄存器的设置为:使用定时器1。M0=0,M1=1,工作于方式2,自动重新载入计数值。TMOD=0X20H。(使用汇编语言是MOV TMOD,#20H)3) 波特率的设置:本系统上的工作时钟为11.0592MHz, 波特率为9600b/s,对TH1的重载入计数器值由下式计算可得:TH1=256-11059200/384*9600=253=FDH TH1=0XFDH(使用汇编语言是MOV TH1,#0FDH)。

 流程图如右:


根据以上设置汇编编写串行端口的初始化程序:

接收程序:

 MAIN:   MOV    TMOD,#20H ;

MOV    TH1,#0FDH;

MOV    TL1,#0FDH;

SETB   TR1;

MOV    SCON,#50H;

LOOP:   JBC    RI,DISP

SJMP    LOOP

DISP:   MOV    A,SBUF

MOV    DPTR,#TAB

MOVC  A,@A+DPTR

MOV   P2,A

SJMP   LOOP

TAB:   DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

END

发送程序:

          ORG 0000H

START:   MOV    TMOD,#20H;

MOV     TL1,#0FDH

MOV     TH1,#0FDH;

SETB     TR1 

MOV     SCON,#40H  

MOV     R0,#20H

MOV     R7,#32 

MOV     A,#40  

LOOP1:  

MOV     @R0,A

INC      A

INC      R0

DJNZ     R7,LOOP1

MOV     R0,#20H

MOV     R7,#32

LOOP:    MOV     A,@R0

ACALL   YANSHI

ACALL   SPOUT

INC      R0

DJNZ     R7,LOOP 

SJMP     START

SPOUT:  

MOV     SBUF,A

JNB      TI,$

CLR      TI

RET

YANSHI: MOV      R6,#250

D1:      MOV      R5,#250

DJNZ     R5,$

DJNZ     R6,D1

RET

END 

  3.3上位机(PC机)串行及程序设计

  3.3.1 平台介绍及编程方法

  VB语言简介

  在本系统中PC机采用Visual Basic(简称VB)编程。VB已成为WINDOWS系统开发的主要语言,以其高效、简单易学及功能强大的特点越来越为广大程序设计人员及用户所青睐。VB支持面向对象的程序设计,具有结构化的事件驱动编程模式并可以使用无限扩增的控件,而且可以十分简便地作出良好的人机界面。

  用VB6.0开发串行通信程序有两种法,一种是利用Windows的API函数;另一种是采用VB6.0的通信控件MSComm。利用API函数编写串行通信程序较为复杂,需要掌握大量的通信知识,其优点是可实现的功能更丰富、应用面更广泛,适合于编写较为复杂的低层次通信程序。而VB6.0的MSComm通信控件提供了标准的事件处理函数、事件、方法,并通过控件属性对串口参数进行设置,比较容易地解决了串口通信问题。该控件可设置串行通信的数据发送和接收,对串口状态及串口通信的信息格式和协议进行设置。这是一个标准的十位串口通信,包括8位标准数据和数据的起始位和停止位。在发送或接收数据过程中触发OnComm事件,通过编程访问 CommEvent属性了解通信事件的类型,分别进行各自的处理。每个通信控件对应一个串口,可以设计多个通信控件来访问多个通信口。

PC机程序设计流程图如下示


                            

                                                  NO


                                     YES

                                           

                                  

                                              

                                                            NO


                                       YES

                                      

                                               

                                         

 


  3.3.2 VB6.0的控件及通信方式

    MSComm通讯控件简介

MSComm是VB6.0提供的ActiveX控件,使用前需将该控件添加到VB工具   栏。MSComm控件串口具有完善的串口数据的发送和接收功能。通过此控件,PC机可以利用串行口与其它设备实现轻松连接,简单高效地实现设备之间的通讯。此控件的事件响应有两种处理方式,事件驱动方式:由MSComm控件的OnComm事件捕获并处理通讯错误及事件;查询方式:通过检查CommEvent属性的值来判断事件和错误。

1)MSComm控件的主要属性和方法

a.    CommPort:设置或返回串行端口号,其取值范围为1—99,缺省为1

b.    Setting: 设置或返回串行端口的波特率、奇偶校验位、数据位数、停位。如:MSComm.Setting="9600, n, 8, 1”。

c.    PortOpen:打开或关闭串行端口。

d.    RThreshold:该属性为一阀值,它确定当接收缓冲区内字节个数达到或超过该值后就产生MSComml--OnComm事件。

e.    Input:从接收缓冲区移走一串字符。

f.    Output:向发送缓冲区传送一字符串。

2)CommEvent属性 :

如果在通讯过程中发生错误或事件,就会引发OnComm事件并由CommEvent   属性代码反映错误类型,可根据该属性值来执行不同的程序操作或数据处理。以下是部分属性常数值及其含义:

a.    ComEvSend:其值为1,发送缓冲区的内容少于SThreshold指定的值。

b.    ComEvReceive:其值为2,接收缓冲区内字符数达到RThreshold值,该事件在缓冲区中数据被移走前将持续产生。

c.    ComEventRxParity:其值为1009,奇偶校验。

d.    ComEvEOF:其值为7,接收数据中出现文件结束字符。

本系统采用事件驱动方式进行串口通信设计,下图2为上位机通信界面,设计了2个命令按扭,分别为发送、清空数据;两个文本框,Text1用于输入需从下位机读取的数,Text2用于显示下位机发送来的数据;3个Frame控件,一个Label控件,当然还需要一个MSComm控件。

MSComm控件属性设置如图1示:

                                              

 

(图2)          

 下面是MSComm控件的初始化程序、部分数据发送和接受程序

  4调试与结论

  该系统目前已调试成功,完成了PC机与51单片机之间的串行。并且实现了下列功能:1)在VB界面上发送任一数字在51单片机的数码管上都能成功的接收 2)同样通过向51单片机内写入的程序,在VB界面上可以接收到相对应的内容且运行良好。

调试过程如下:

硬件方面:

  该系统的硬件调试主要是排查单片机印刷电路板的问题和连接上的一些问题。在该系统中,首先通过了仔细地推敲系统原理,确认无误;其次对照设计图纸查印制电路板,看是否有粘接等工艺现象;最后,检查外围连接是否有误,通过这几个方面的反复调试,可确保电路板的无误性。

  在本系统的硬件调试过程中,出现了下列两种情况

  1)电压不稳定而导致程序无法写入的情况,使电压稳定的方法是改用新的电池,或者是再次设计电源方案,在这里是用电源接通教学实验板,然后再把教学实验板与本系统相    连接,这样,就可以得到稳定的电压了。

  2)还出现的一个问题是数码管不显示,检查后是焊接上出现了一点的失误。

  软件方面:

  本系统在软件调试方面也没有规律可循,调试时更多的是凭经验。软件调试的主要任务是排查错误。通过在Wave E2000编译器下调试程序,有两种错误,一种错误,也就是语法错误,是很容易被发现的,另一种是功能错误,是指在没有语法错误的基础上,由于设计思想或算法的问题导致不能实现软件功能的一种错误。调试过程中出现的问题主要有以下四个方面:

  1)用其它串口调试软件能够很好的实现两者之间的串行通信,成功的接收和发送数据,但使用我们的VB程序却不能实现,要么只能实现接收功能,要么只能实现发送功能。之后通过对VB程序做多次的改动与测试才达到理想的结果。

  2)在VB界面上发送的数据与单片机的数码管上显示的数字不相符,这个问题是我们汇编程序的问题,由于汇编符号的繁多加上我们的粗心在输入代码的过程中难免出现一些看不见的问题,造成调试过程中出现意外。借此我想提醒大家的是搞设计搞研究必须做到细心,要有一颗敬业的心对待我们接受的任务,有耐心面临出现的困难。

  3)由于要实现上下位机的串行通信,所以两者之间的波特率是否一致也是一个不容忽视的问题,在开始我并没有太注意这个方面的情况,到各方面的准备工作都做好要进行调试的时候,才发现有个二者波特率设置是否相同将影响到整个通信过程,我赶紧作了修改才免遭一次调试失败。

  4)还有最后一点注意的地方是,利用MSComm控件比较方便地开发串行通信程序,实现串行通讯原理已经得到实验结果验证,考虑到将来对系统实时性的要求,采用了MSComm控件的查询处理机制,避免了中断处理机制的不稳定和不连续性,而且还可以很方便地控制多个串口,只需插入多个MSComm控件,并为每个MSComm控件编写OnComm()函数。但是我们也清楚的体会到MSComm控件在VB中的使用较为复杂。这一点是我们以后在运用中需要加强的地方。

  伴随着单片微型机技术的发展,人们已越来越多地采用单片机来对一些控制系统中如温度、流量和压力等参数进行检测和控制。希望通过大家的共同努力能在PC机与单片机这方面取得新的成绩有突出的表现,能够很好的将学到知识运用到实际生活中,比如上面提到的利用单片机实现对温度的实时检测与控制已经得到广泛的应用。另外我们还可以在单片机的接口上再加接显示器,这样就更能方便的对系统进行操作与控制。

  通过这次毕业设计,我深刻体会到专业知识、专业技能分析和解决问题的能力在实际生活中是多么的重要,在完成设计任务的同时我这些方面的能力有了一个全面的提高和锻炼。具体表现在对单片机与PC机的串行通信的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(汇编语言与VB)的掌握方面都向前迈了一大步,为日后使我能成为合格的应用型人才打下了良好的基础。

  采用本系统实现PC机与单片机串行通信与一般其它系统的比较:一般的PC机与单片机之间的串行通信,需要单片机采集数据,然后用异步串行通讯方式传给PC机。相对而言通讯速率不是很理想,在一些要求通讯传输速率比较快的地方,普通的PC机与单片机之间的串行通信显然是不能满足其要求的。利用VB6.0 的事件驱动方式可以很方便地开发数据采集与监控系统,用单台PC 机可以测量和监控多路控制信号,整控制系统设计方便,对小型测控系统的设计具有很大的实用性。且传输数据的速率要比普通的串行通信要快些。

  对于目前广泛应用的Windows下实现PC机与单片机之间的通信问题,希望大家能提出宝贵的意见。

参考文献

[1]蔡美琴等.MCS-51系列单片机系统及其应用(第二版).高等出版社,2004.

[2]杨毓,李明.Visual Basic6.0实用开发教程[M].成都:科技大学出版社,2001.

[3]刘新民,蔡琼等.VB6.0程序设计.北京:清华大学大学出版社,2004.

[4]李华.单片机通用接口技术[M].北京:北京航空航天大学出版社,1999

[5]魏庆福,姚亦鸣,等STD总线工业控制机的设计与应用[M].北京:科学出版社,1992

[6]何立民,单片机应用系统设计.北京:航空航天大学出版社,1992

[7]美Jan Axelson 著,串行端口大全,精英科技译,2001.5四

[8]刘瑞新等. Visual Basic程序设计教程,北京:工业出版社, 2002

[9]傅扬烈 单片机原理与应用教程,电子工业出版社, 2002.1

[10]余锡存 曹国华.单片机原理及接口技术[M].陕西:西安电子科技大学出版社,2000.7

[11]David Jung等著.前导工作室译. Visual Basic6.0开发人员参考手册. 北京:机械工业出版社, 2000