5.2 系统处理流程
系统处理流程如5-2处理流程图所示。
开始按键Y初始运行Y键盘按键?N二次按键?(取消请求)N二次按键?(取消请求)N显示外部请求通信,传递数据N通信,传递数据显示内部请求算法1调度算法2调度显示电梯当前所在楼层最佳电梯响应请求电梯运行显示电梯当前所在楼层N到达请求所在楼层?N到达目的地?NY 显示当前楼层,等待操作N按键?Y所有请求执行完?Y结束 Y图5-2 处理流程图
第 10 页 共 36 页
5.3 系统结构描述
系统结构主要描述系统中不同模块之间的关系,如图5-3系统结构图所示。
模拟电梯控制系统数据有效有效数有效数据据有效数据数据采集模块数据处理模块数据据效数有求请部外外部请求据楼数层据通信模块据内内部请有效数据数部数楼层请求有效数据数求数据据取得楼层数据描码扫键按键编辑楼层数据楼层识别外部请求数据扫按描数码据外部调度算法据求数请外部电梯最佳梯识别内部请求数据内部调度算法取得按键扫描码据最佳电扫描码转换为楼层数据按键数据求请地的内部目目的地按键数按键数键据码得出最佳响应电梯运行电梯得出目的地电梯运行到达按键,输入数据转换键码状态到达状态到到达达判断到达否显示到达否显示图5-3 系统结构图
5.4 功能与程序的关系
功能与程序的关系如表5-1所示。
表5-1 功能和程序关系表
按键程序 √ 通信中断 √ 外部请求响应 √ 外部电梯调度 √ 内部请求响应 √ 内部电梯调度 √ 外部请求显示 √ 内部请求显示 √ 电梯当前所在楼层显示 √ √ 数据采集 通信 外部数据处理 内部数据处理 外部数据显示 内部数据显示
第 11 页 共 36 页
6 单片机编程
6.1 单片机引脚使用情况
6.1.1 从机引脚使用说明
单片机的最小系统电路一般情况不用画出。除此之外,P0口工作在I/O方式下,接收2-5层电梯外部按键输入的数据,因为1层楼只有向上请求,6层楼只有向下请求,与其他楼层稍有差别,且P0口已经分配完毕,故将1层和6层的线单独接到P3口。因为P0口作为I/O输入,所以必须接上拉电阻。P1口工作在I/O方式下,接收左边电梯内部键盘按键输入的数据。因为电梯内部按键只设计了8个,故4x4的键盘,只选取了中间的两行使用。为方便行列式键盘编程,两条列线接P1.1和P1.2。P1.0和P1.3悬空,默认为高电平。四条行线依次接P1.4-P1.7。P2口工作在I/O方式下,接收右边电梯内部键盘按键输入的数据,其电路连接情况与P1口相同。P3口的P3.6和P3.7工作在I/O方式下,接收电梯外部按键6层和1层的请求。P3.0和P3.1采用的是其第二功能RTD和TXD,分别用于串行通信的输出和输入。
6.1.2 主机引脚使用说明
P0口工作在I/O方式下,作为2个红色八段数码管的显示段选输出,由于没有用到小数点,故cp悬空,P0.7默认为高电平。P1口工作在I/O方式下,作为8个蓝色八段数码管的片选输出。P2口工作在I/O方式下,将2-5楼层的接收外部请求的输出显示。P3口的P3.4和P3.5工作在I/O方式下,将电梯外部按键6层和1层的请求输出。P3.6和P3.7工作在I/O方式下,作为2个红色八段数码管的片选输出。P3.0和P3.1采用的是其第二功能RTD和TXD,分别用于串行通信的输出和输入。
6.2 串行通信
6.2.1需求概述
在设计过程中,由于仿真6层电梯,每层都需要有对应的向上或向下要梯的10个输入按钮,每个轿厢内要有8个按钮,对按钮的显示相应有LED显示,一个单片机的I/O口不够用,所以设计中采用两快单片机,这就涉及两块单片机的通信问题。
第 12 页 共 36 页
6.2.2 串行通信概述
串行通信是指数据一位一位的按顺序传送的通信方式,其突出优点是只需一根传输线,大大降低了传输成本,特别适用于远距离通信,通信线路简单。缺点是传送速度较低。有同步传送和异步传送两种方式。串行通信可通过串行接口来实现。
单片机内部有一个可编程的,全双工的异步串行接口SBUF,有两个独立的发送缓冲和接受缓冲器,对外也有两条独立的收、发信号线RXD和TXD,可以同时发送、接受数据,实现全双工传送。发送、接受数据可通过查询或中断方式处理,使用十分灵活,可实现双机、多机通信,有四种工作方式。
6.2.3 本设计中的串行通信具体说明
由于只有两块单片机,只需双机通信,且单片机的电器特性决定传输数据误差很少,可以不需要奇偶校验,所以本设计利用串行接受在工作方式1下进行异步串行通信。工作方式1是8位异步通信方式,波特率可变。这里波特率由定时/计数器T1的溢出率和电源控制寄存器PCON中的SMOD决定,所以在工作方式1下,要对定时/计数器T1进行初始化。编程过程中设定波特率为1200bps,振荡频率为12MHz。设计中通信的数据格式都有一定的规定,相应的位数有特殊的意义,是为配合算法来规定的,在后面调度算法中详细介绍。
6.3 中断
6.3.1 需求概述
由于电梯控制系统实际上是一个人机交互式的控制系统,因此单纯采用顺序控制或逻辑控制是不能够满足要求的,而应该在设计中采用随机逻辑控制进行实时控制。实时控制自然需要用到中断完成。另一方面,串行通信采用中断方式,也能节约CPU查询等待的时间,提高运行效率。
6.3.2 中断概述
AT89C51单片机提供了5个硬件中断源,2个外部中断源INTO和INT1,2个定时/计数器T0和T1的溢出中断TF0和TF1,1个串行口发送TI和接收RI中断。AT89C51的中断系统,是通过以下几个特殊功能寄存器来控制的。定时器控制寄存器TCON,中断允许寄存器IE,中断优先级寄存器IP,串行口控制
第 13 页 共 36 页
寄存器SCON。中断过程,是通过操作以上寄存器的各位来控制的。
6.3.3 串行通信中断
AT89C51的串行口中断源对应两个中断标志位RI和TI,无论哪个标志位置“1”都请求串行口中断,到底是发送中断还是接收中断,只有在中断服务程序中通过指令查询来判断。串行口中断响应后,不能由硬件自动清零,必须由软件对TI或RI清零。在程序中,需首先设置中断允许总控位EA和串行口中断允许位ES为“1”,然后才能进行串行通信中断,在发送端(从机)通过判断RI来进行数据传送,在接收端(主机)通过判断TI来接收数据。
6.3.4 定时/计数器中断
定时/计数器中断是由TF、ET两个标志位控制的。当定时/计数器TO/TI溢出时,由硬件置TF为“1”,向CPU发送中断请求,当CPU响应中断后,由硬件自动清除TF。ET为定时/计数器的溢出中断允许位,当ET为“1”时,才允许中断。程序中,中断的初始设置为ET0=1。TF由硬件自动设置。
6.4 定时器设置
6.4.1 串行通信定时设置
串行通信中工作方式1需设置波特率,波特率由定时/计数器T1的溢出率和电源控制寄存器PCON中的SMOD决定,所以在工作方式1下,要对定时/计数器T1进行初始化。串行通信时,定时器通常采用定时器方式2即8位重装计数方式,这样不但操作方便,也可避免指令重装时间常数带来的定时误差。
定时/计数器的工作方式、计数(定时)值、中断控制等都是有程序来设定的,在AT89C51单片机中,是通过特殊功能寄存器TMOD(定时器方式控制寄存器)和TCON(定时器控制寄存器)来设置的。程序中设置TMOD=0x21,即定时/计数器1在工作方式2下,定时方式。设置TCON中的TR1=1,表示开始计数。由于编程过程中设定波特率为1200bps,振荡频率为12MHz。
计数初值=256- fosc× 2SMOD /(12*波特率*32)=0xe6
所以TH1=0xe6,TL1=0xe6。 6.4.2 定时/计数器设置
电梯的运行过程首先是idle(空闲),收到一个请求,进行计算,得出要
第 14 页 共 36 页