1.2设计要求
本课程设计题目的主要内容是模拟一台洗衣机的运行控制。
(1)能正确选择洗衣机的注水、清洗、甩干等不同模式;
(2)能正确显示各种模式下的不同状态;
(3)能使洗衣机快速响应最新的用户命令,形象模拟各种模式。
2 方案分析与设计
2.1 需求分析
2.1.1 角色分析
本次课程设计为洗衣机控制系统的模拟,结合实际情况可知,系统面对的主要角色为人类用户,系统接收用户的指令并给予相应的处理。在系统内部,结合相关功能可知,还应包括计时器、显示器和指令处理器这些角色以执行相应功能。
2.1.2 用例分析
结合本次课程设计应完成的任务可知,系统所需的用例至少应包括开机、关机、注水、洗涤和甩干,此外,还应包括对指令的处理、结果的显示和计时相关用例。各用例文档如下所示
2.1.2.1 开机用例
在电源接通、仿真开始或系统等待执行的时候执行开机用例,是系统可以处理用户给出的各种指令。
用例名:开机用例。
摘要:启动洗衣机。
角色:用户。
前置条件:无。
主序列:
(1)用户按下开机键;
(2)灯全亮(111);
非功能性需求:无。
后置条件:等待其他指令。
2.1.2.2 注水用例
2.1.2.3 洗涤用例
2.1.2.4 甩干用例
2.1.2.5 关机用例
2.1.2.6 显示用例
2.1.2.7 计时用例
2.1.2.8 指令处理用例
2.1.3用例关系
综上所述,可得到系统用例图如图2-1所示。用户有五种选择:开机、注水、洗涤、甩干、关机。当用户选择开机按键时,对应的开机指示灯亮111,洗衣机启动,等待用户下一个操作的开启。当用户未进行开机按键时,系统不允许用户进行其他操作,即不可跳过开机键直接对注水、洗涤、甩干这三个功能进行操作。用户选择注水、洗涤、甩干操作基本一样。现以注水为例:首先用户按下注水按钮,对应的指示灯001亮,同时开启定时器和显示器,显示器为注水所需要的时间(秒)。当定时器过一秒,刷新一次显示器;当定时结束时,响蜂鸣器,显示器成关闭状态。洗衣机呈等待状态,指示灯为111,等待下一个操作值得注意的是:在执行注水、洗涤或者甩干过程中不允许其他操作的执行,只有在一个操作完成时才允许其他操作进行。
图2-1 系统用例图
2.2 方案设计与优化(原理图)
根据课程设计要求,可以设计如图 2-2 所示的系统,此时将所有外设通过8255与CPU连接,通过8255不同的工作方式实现对各个外设的控制,并在程序中通过循环计数实现对计时时间的控制。8255A口工作方式0控制数码管,B口工作方式0控制灯和蜂鸣器,通过不断改变C口工作方式实现分时的全双工通信。
图2-2 系统结构图(优化前)
在课程设计的过程中,第一个版本的系统很容易实现,但是计时功能相对并不准确。为得到更精确的计时值并重分类用现有自用,可首先利用8086微处理器产生所有的总线控制信号。使用到的芯片有8253、8259、8255。其中8259做中断处理;8255芯片为可编程并行I/O接口芯片,用此来连接外设,使外设能跟CPU进行通信;8253芯片用于定时,此课程设计中用于定时一秒。
将所需外设可分为三类,显示系统、按键系统和响应完成状态系统,按键系统用于接收用户需要进行的操作类型;显示系统包括LED灯和七段数码管显示,七段数码管显示倒计时信息,LED灯用于显示洗衣机目前所处状态(关机、开机、注水、洗涤、甩干状态);响应完成系统用于在一个功能完成后做出提示,提示用户可进行下一个操作,如:洗衣机在完成注水操作后蜂鸣器响,用户听到后便可选择其他功能。
图2-3 系统原理图(优化后)
2.3 硬件连线图
图2-4硬件连线图
说明:图中两个共阳极七段数码管,分别与8255A的输出端口PA和PB连接,三个LED灯则是与8255A的输出端口PC相连,用来表示当前洗衣机的状态。键开机、注水、洗涤、甩干、关机的编号分别为0,1,2,3,4。
2.4 软件流程图
2.4.1 主程序流程
主程序流程如图2-5所示,洗衣机一直处于等待按键按下状态,当有键按下并且为开机按键时才可以再接受其他按键按下,当开机键按下后,对应的指示灯111亮,接着继续等待判断有无按键按下,如有,判断键值,若为注水、洗涤、或者甩干,进入中断,若为关机按键,则结束程序,这里对开机键盘已经不再做反应,当不是这些按键则重新判断有无按键按下。
图2-5 主程序流程图
2.4.2 中断流程
当进入中断时,如图2-6所示,首先定时器0写入初值,定时一秒,判断按键键值,若为注水按键,对应注水指示灯001亮,计数器1装入初值—,若为洗涤按键,对应洗涤指示灯010亮,计数器1装入初值—,若为甩干按键,对应甩干指示灯011亮,计数器1装入初值—,接着开启定时器0定时,判断计数器0定时一秒结束,即计时一秒结束,若结束,开启计数器1减一,并显示七段数码管,计数器1减一后,判断计数器1是否结束,若结束则蜂鸣器响,指示灯111亮,并且返回中断,若计数器1未结束计数,则继续执行定时器0开始定时。
图2-6 中断程序流程图
2.4.3 计时函数流程
计时函数流程如图2-7所示,首先对8253定时器0初始化并装入初值,随即开始计时等待计时结束,若计时结束产生中断,在中断处理程序中执行其他功能。
图2-7计时函数流程图
3 源代码(需要的看评论区)
DATA SEGMENT;数据定义
ORG 1000H
THESEG DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H ;数码管码值定义
HALFSECOND DB 0;秒变量
TIMEDISPLAY DB 0;需要显示的秒数据
KeyData DB 0;按键数据
STARTEN DB 0;是否启动
DATA ENDS
STACK SEGMENT PARA STACK 'STACK' ;堆栈段
DW 512 DUP (?)
STACK ENDS
CODE SEGMENT PUBLIC 'CODE'
ASSUME CS:CODE,DS:DATA,SS:STACK
(代码中间部分略)
CODE ENDS
END START
4 调试过程说明
4.1 调试过程
本次课程设计,花费了很长时间才将程序调试到完全正确。在调试过程中,出现了大大小小的各种错误。一方面是由于前期分析问题比较概括性,不够仔细与透彻。另一方面由于汇编程序编写能力欠佳,再加上偶尔的粗心大意,导致出现了一些难以攻克的小错误,如一个标号位置放置的错误,调试时就花费了大量时间去查错。
在硬件连线方面,一开始在最初不含中断的系统中,利用循环计数进行演示控制,通过伪指令定义各个芯片的地址,然后执行整个程序。然后改进一次,发现我们的电路并没有用到8259中断控制器,而是用了NMI中断,虽然能够实现洗衣机仿真,但在现实情况中,洗衣机的中断控制是可屏蔽中断,于是我们加入了8259实现可屏蔽中断。在分模块调试后,电路图逐渐完善。
由系统结构图可知,洗衣机仿真由8086CPU、8259中断控制器、8253定时器、8255并行接口完成。利用地址线A0到A15为芯片分配地址,并利用74LS138做地址译码、74LS273做地址锁存器。
无8259整体电路图
为测试系统与各个接口芯片是否连接正常,我们先对每个芯片做初始化并连接简单外设进行测试。首先通过8255PA、PB控制七段数码管,通过PC0,PC1,PC2控制功能指示灯。能够正常运行后进行其他部分的调试。
通过8253产生一秒中断,并利用8259处理其中断。将8259的IR0接在8253的OUT0初始化8253,设置工作方式3,设置好中断服务子程序,循环产生1秒的中断,观察七段数码管的状态。工作正常后,进行其他模块的调试。
数码管显示电路图
根据上文中分析得到的功能,可以设计三个LED灯,用以显示具体哪个按键按下,在计时结束时,可以控制蜂鸣器发声以提示用户选择其他功能。蜂鸣器只要输出高电平即可发声,输出低电平即停止发声,可使用PA口工作方式0输出控制这些输出功能,在程序中的对应位置控制输出即可。
蜂鸣器控制电路
LED灯控制电路
在各个外设、各个接口芯片均单独工作正常后,将所有外设和芯片与CPU连接在一起进行整体流程调试。由于之前已经保证了每个模块正常工作,此时只需要关注系统中流程的跳转即可。连接硬件与软件后开始仿真,并通过单步调试观察系统工作状态。
在软件调试方面,我们原本使用NMI中断控制定时器,分模块调试成功后,整个电路仿真很顺利,在换成8259中断控制器后,采用电平触发方式,由于很少使用8259,我们对8259的命令格式并不熟悉,缺少了操作命令字OCW2,在添加完整后,程序能正常工作。
4.2 各成员分工情况
5设计结果说明
本次课程设计我们完成了任务书中的所有要求,通过按键与8255的PC口连接,将用户按下的按键结果通过LED灯显示出来。在执行开机功能前以及执行关机功能后,系统均不接收或者处理任何的指令,在执行开机功能后以及执行关机功能前,系统可快速响应用户的指令需求,并给出相应的输出。在执行具体的功能时,对即时起设置不同的计数初值并开始倒计时,将倒计时的过程和结果都利用七段数码管进行输出,计时结束后蜂鸣器短暂发声,从而提示用户选择其他的功能。在开机前等待状态,数码管全灭,LED灯全灭,在开机后的等待状态,数码管全亮,LED灯全亮,在关机后数码管和LED灯熄灭,蜂鸣器发声,然后切换到开机前的等待状态。
本次课程设计从需求分析出发,详细分析各用例模型后根据任务书所要求的8086、8255、8253、8259芯片。设计完成了整个系统,是对软硬件综合分析设计能力的一次很好锻炼。在方案讨论过程中,小组成员仔细讨论,反复推敲,并共同完成了整个系统的设计。
本次设计存在的不足有:键盘的响应存在延时,且中断服务不能很好地执行,没有严格考虑各个寄存器的使用情况,存在资源的浪费,后续还应对系统进行进一步的优化。