在通信的过程中SM2一直保持为“0”且使RI清零,则不管第9位数(RB8)为何值,从站都可产生接收中断[11]。
系统中可以有32台从机,其地址范围分别是01H~20H。本次设计只用两台从机仿真,编号为01、02。在仿真电路中波特率可设为9600Bps,在实际电路中通讯波特率为2400Bps。
4.2波特率的设定
波特率的定义:串行口每秒钟发送(或接收)的位数称为波特率。
由于想达到最远控制的目的,所以选择最大控制距离而降低波特率,因传输数据量不大,这样的设计基本可以实现。
当使用0.56mm(24AWG)双绞线作为通讯电缆时,根据波特率的不同,最大传输距离的理论值如表2所示。
表2 波特率与传输距离之间的对应关系
波特率 传输距离
2400Bps 1800m
4800Bps 1200m
9600Bps 800m
所以,综合考虑选择2400Bps的波特率。
在串行通信中,收发双方对发送或接收的波特率需要一致。
4.3 PC机通信软件的开发
在Windows 环境下,用户有两种方式实现串口通信。
⑴ 使用串口通信控件——MSComm
Microsoft Communications Control(MSComm)是微软公司提供的ActiveX控件,运用它可以简化Windows的串行通信编程,可以配置串口,实现数据的接收和发送。
⑵ API应用程序接口
API有4个函数CreatFile、ReadFile、CreatEvent和CloseHandle,分别用于打开串口、读串口、建立事件对象和关闭串口。使用时仅需将串口当做文件的形式打开或访问。
本次设计采用MSComm串口通信控件实现PC机仿真通信软件的开发。
使用Visual Basic开发串口通信程序主要包括3个部分:初始化配置MSComm属性、发送数据和接收数据。初始化程序主要完成对串口的设置,包括选择串口、设置波特率、设置数据格式、打开串口。发送数据需要有发送按钮配合,并且为方便下次输入数据需要有清空按钮以实现更完整的功能。当这次调节任务完成时,需要退出界面,所以再设置一个退出按钮。
4.4 AT89S51单片机工作的程序流程图
单片机的I/O口控制着LED和数码管的亮灭和倒计时,当电脑通过串行通信方式传输过来数据时,单片机的RI置1,接收缓冲区数据,存入指定内存中,接下来比较地址是否匹配,选择的是东西方向还是南北方向,逐一确定,条件符合的时间加。单片机工作程序流程图如图7所示。
图7 AT89S51单片机工作的的程序流程图
4.5 PC机程序和单片机初始化程序
令PC机串行口为COM1,对串行口初始化的VB程序中需要对端口打开,设定波特率,对三个按钮的功能进行编程等,详见附录一。单片机工作的程序见附录二。
4.6 电路仿真过程
本次仿真用Proteus软件实现PC机和单片机串口通信仿真,所有的调试都是在同一台电脑上通过软件进行的。上位机是PC机,在PROTEUS中由COMPIM模拟。上位机软件用Microsoft Visual Basic 6.0。下位机用PROTEUS软件中的AT89S51单片机仿真电路代替。串口设置及连接通过虚拟串口软件Virtual Serial Ports Driver 6.9进行操作。应用VSPD产生的虚拟串口的作用和用法与物理串口的一样。COMPIM 是Proteus中一个非常有用的虚拟元件,COMPIM建立起一个映射,把仿真电路中的数字量映射到计算机的物理端口。仿真电路的连线是把单片机的TXD和RXD与COMPIM的TXD和RXD连接,这样即可以直接操作映射到物理端口,两个虚拟串口采用一致的标准电平,不需要MAX-485电平转换芯片,但是实际电路中一定要有。由于PROTEUS中启动仿真按钮,系统会自动上电,所以在仿真电路中电源、晶振可以不设计。实物电路中,这是必须的。 AT89S51智能交通灯控制系统的设计+VB源程序+仿真图(7):http://www.youerw.com/zidonghua/lunwen_502.html