【微机组成原理】【课程设计】洗衣机控制模拟---8086,8255,8259和8253(源码+仿真+原理图+参考报告)

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芯片。设计完成了整个系统,是对软硬件综合分析设计能力的一次很好锻炼。在方案讨论过程中,小组成员仔细讨论,反复推敲,并共同完成了整个系统的设计。

本次设计存在的不足有:键盘的响应存在延时,且中断服务不能很好地执行,没有严格考虑各个寄存器的使用情况,存在资源的浪费,后续还应对系统进行进一步的优化。

  • 12
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值