开始 开始 变量jishu,A,tf T0赋初值 开中断 定时器初始化 A―― Y A=0 N Y N tf=0 tf=1,A=5, 关闭T0 取计数值,关中断,flag=0 结束 结束 Y 1.主程序流程图 开始 2定时器中断流程图 flag=1 flag=1,TR0=1, jishu++ 结束 3.外部中断流程图 图4-3 各部分流程图
31
3.3 单片机串行通信的程序设计
89C51单片机上有通用的异步接收发送器用于串行通信,发送数据时是由TXD端口送出,接收数据时是由RXD端口输入的。还由两个缓冲器SBUF,分别是发送缓冲器和接收缓冲器。发送数据时只要向发送缓冲器中写入数据即可,接收数据时就是读出接收缓冲器中的内容。
在单片机和微机进行通信时,在某一时刻,一个为发送方,一个为接收方,要求使用相同的波特率和相同的传送位数。所以在初始化时,发送器和接收器的串行口的初始化设置要求是一样的。由于一般设置定时器1来产生波特率,所以初始化时先确定定时器1的工作方式——编程TMOD寄存器,然后计算定时器1的初值——装载TH1、TL1,启动定时器。最后确定串行口的控制——编程SCON,开CPU和源中断——编程IE寄存器。初始化结束以后,按照通信协议进行发送和接收数据。其具体约定的协议如下:
当发送机开始发送时,先发送一个@@信号,接收机收到此信号后,如果回答一个&&信号,表示同意接收。当发送机收到&&信号后,开始发送数据,每发一个数据就求一次校验和,数据发送完后立即发送校验和。
接收机接收数据并把数据存储起来,每接收一个数据就计算一次校验和,当接收完数据后,接着便接收发送器传来的校验和,并将它与接收机计算出来的校验和进行比较。如果两者相等,则表示接收正确,接收机回答00H;如果两者不相等,则表示接收不正确,接收机回答0FFH,请求发送机重新发送。
当发送机接收到接收机发送的00H信号后,结束发送。如果发送机收到的时0FFH信号,则要把数据再重新发送一次。
发送方和接收方的发送和接收程序流程图分别如图4-5和图4-6。通过运行异步的发送和接收程序完成单片机和微机之间的数据通信。
32
发送请求信号@@ 串口初始化,设定工作方式 等待发送机联络 设定波特率,启动定时器 设定波特率,启动定时器1 开始 开始 设定串口工作方式 N 发送机请求发送 接收机允许N 发送应答信号&& 发送 Y Y Y 指针初始化,校验指针初始化,校验和清零 和清零 Y N N 节,求校验和 节,求校验和 发送一个数据字接收一个数据字 数据发送完 数据接收完 Y N Y 发送校验和 Y
两者的校验和 接收校验和,并比较 接收正确 Y 校验和相等 Y 发送 00H Y N 结束
结束 发送0FFH 33
图4-5 发送程序流程图
图 4-6 接收程序流程图
3.4 本章小结
本章主要介绍了单片机采集及通信系统软件设计。其中包括模拟量的A/D转换程序设计、脉冲量的测量程序设计、单片机串行通信的程序设计。
34
4 监控计算机通信系统设计
以前对于开发人员来说,串口通信软件设计是件比较困难的事。而现在使用Visual Basic 6.0中的MSComm控件就可以很容易的实现计算机串口通信了。
Visual Basic 6.0是一种新型的现代程序设计语言,是面向对象的程序设计语言,它有专业版和企业版两种。为了方便人们编写串口通信程序,Visual Basic 6.0把串口通信对底层的操作都封装在MSComm控件中。MSComm控件是一种可以完成远程通信的串口通信控件,开发人员只要在自己的应用程序中引用MSComm控件后,对其进行简单的属性设置和相关事件的程序处理,就能进行串行通信了。
4.1 SComm控件的属性及事件
在本系统中,通过Modem和电话线进行远距离的串口通信,关键是如何控制Modem完成数据的发送和接收,这其中包括单片机和监控计算机分别控制远程Modem和本地Modem两部分。但是不论是哪一部分,都是使用AT指令进行Modem控制的。AT指令可以实现Modem的初始化、自动摘机和挂机、数据的接收和发送等操作。在单片机部分可以直接通过串口发送数据(即写入SBUF)就可以控制Modem。而在监控计算机部分则使用Visual Basic 6.0企业版中自带的MSComm串口通信控件来完成串口通信中数据的发送和接收操作。
MSComm控件是专为串口通信设计的控件,在MSComm控件控件中封装了串口通信对底层的所有操作,引用MSComm控件后,需要设置MSComm控件的属性,一般使用MSComm控件的发送属性发送数据,而调用MSComm控件的接收事件接收数据。
MSComm控件有30个属性和一个事件。在这30个属性中,真正用于
35