大连海事大学毕业设计(二)

(整期优先)网络出版时间:2019-02-12
/ 4

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

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

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

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

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

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

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

M1 M0

工作方式

计数器配置

0 0

方式0

13位计数器

0 1

方式1

16位计数器

1 0

方式2

自动重载的8位计数器

1 1

方式3

T0分为两个8位计数器,T1停止计数

  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)。

串口初始化



流程图如右:

1442252878.gif

接收程序:

发送数据


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机程序设计流程图如下示

1442251493.gif

1442267698.gif

1442262305.gif
  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示:

144226687.gif                           

1442273311.gif

(图2)

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

1442279003.gif

144227611.gif

  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