《微机原理课程设计》简易全自动洗衣机设计解析.docx

上传人:b****5 文档编号:8230041 上传时间:2023-01-30 格式:DOCX 页数:26 大小:121.13KB
下载 相关 举报
《微机原理课程设计》简易全自动洗衣机设计解析.docx_第1页
第1页 / 共26页
《微机原理课程设计》简易全自动洗衣机设计解析.docx_第2页
第2页 / 共26页
《微机原理课程设计》简易全自动洗衣机设计解析.docx_第3页
第3页 / 共26页
《微机原理课程设计》简易全自动洗衣机设计解析.docx_第4页
第4页 / 共26页
《微机原理课程设计》简易全自动洗衣机设计解析.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

《微机原理课程设计》简易全自动洗衣机设计解析.docx

《《微机原理课程设计》简易全自动洗衣机设计解析.docx》由会员分享,可在线阅读,更多相关《《微机原理课程设计》简易全自动洗衣机设计解析.docx(26页珍藏版)》请在冰豆网上搜索。

《微机原理课程设计》简易全自动洗衣机设计解析.docx

《微机原理课程设计》简易全自动洗衣机设计解析

 

《微机原理课程设计》

 

姓名:

学号:

__

班级:

专业:

电气工程及其自动化

学院:

电气与信息工程学院

 

江苏科技大学

2013年9月

 

简易全自动洗衣机设计

一、课程设计内容

(1)利用8255A芯片,在数码管上实时显示洗衣机档位和洗衣时间倒计时;

(2)利用8254芯片,设置精确倒计时时间或者发送信号给蜂鸣器;

(3)利用8259A芯片,设置按键或开关中断控制功能;

(4)利用0809芯片,模拟水位传感器采集一个电压信号,控制电机旋转。

二、系统功能要求

2.1基本功能要求

(1)能够实现洗衣机换挡功能,比如设置“1挡键”、“2挡键”等不同挡位;

(2)能够实现电机的正转功能;比如设置电机正转3圈,反转3圈,循环工作;

(3)能够实现洗衣机按键控制,比如设置“启动键”、“暂停键”或“停止键”

(4)能够实现按键或开关控制洗衣机的暂停,比如按下“暂停键”,正在旋转的

电机停止工作,再按一下“启动键”,洗衣机又继续工作;

(5)能够实现洗涤、甩干连续自动功能,甩干后,洗衣机会通过蜂鸣器发出报

警声音;

2.2附件功能要求

(1)能够实现洗衣机单独甩干功能,此时电机旋转速度很快;

(2)能够实现洗衣机进水、排水或者洗涤、漂洗、甩干等不同功能使用不同颜

色的指示灯;

(3)能够实现洗涤、漂洗、甩干全过程自动化;

(4)能够实现洗衣机甩干后,发出优美的音乐,音乐一直响直到人为关掉或者

音乐响一定时间后自动关闭。

(5)自己设计的其他有特色的功能。

三、系统方案论证

3.1方案一

输入设备主要有启动按钮、暂停按钮、档位选择、排水按钮、及脱水按钮。

输出设备主要有电源指示灯、数码管、步进电机、蜂鸣器等。

首先构思系统的总体结构,根据设计要求确定好系统大致的硬件组成及其结构,其次根据系统的各个功能把软件分成几个不同的模块,依次实现各个模块的功能,最后把各个模块组合起来完成整个系统的功能。

3.2方案二

根据任务的要求,选择了4个数码管作为信号输出,以状态输入开关作为输入信号,都连接至8255A芯片上。

步进电动机由8255PC4-PC7口驱动,其中洗衣过程漂洗过程排水过程的时间都由8254提供定时信号,实现在预定时间状态的转换。

在对芯片进行初始化之后,先判断输入信号的状态,根据输入状态的不同调用不同的子程序,鉴于定时程序在很多子程序里调用到,多次编写加长了程序的长度,所以每次在调用之前先将计数值读入一个寄存器中,在延时程序中读取此寄存器中的数值即可。

当按照输入状态运行完之后,最后检测到已完成的时候就启动蜂鸣报警,洗衣过程完成。

3.3方案比较

方案一相对来说刚开始容易,但是后续工作麻烦,不容易将每个模块有机的整合起来,会出现接口冲突,而方案二在设计初就从全局出发,充分分配好各个端口的配置及用途,避免了方案一中的冲突,所以方案二更优越。

四、系统硬件设计

4.1系统硬件原理

(1)8255A芯片

8255A是一个通用的可编程的并行接口芯片,内部有2个8位I/O口(A、B),两个4位I/O口(PC7~4、PC3~0).通过编程可设置3种工作方式,可适用于CPU与I/O设备之间的多种数据传送方式的要求。

C口可作为数据口,可作为信号线(CPU与I/O设备之间的应答信号),可作为状态口,可按位置位/复位。

8255A的内部结构如图1所示:

图18255的内部结构图

8255的引脚分配:

(1)D0~D7:

8位,双向,三态数据线,用来与系统数据总线相连;

(2)端口A、B、C:

PA0~PA7(A组数据信号,用来连接外设);PB0~PB7(B组数据信号,用来连接外设);PC0~PC7(C组数据信号,用来连接外设或者作为控制信号)。

(3)CS、RESET、WR、RD、A1、A0(内部4个端口)。

(4)VCC、GND。

8255A有三种工作方式,用户可以通过编程来设置。

方式0――简单输入/输出――查询方式;A,B,C三个端口均可。

方式1――选通输入/输出――中断方式;A,B,两个端口均可。

方式2――双向输入/输出――中断方式。

只有A端口才有。

工作方式的选择可通过向控制端口写入控制字来实现。

(2)芯片8254

8254是可编程计数器/定时器。

它的引脚及功能示意图如图2所示。

数据总线缓冲器是8254与CPU之间的数据接口,它是一个8位双向三态缓冲器。

读/写控制逻辑接受CPU送来的读/写控制信号,并加以组合完成对8254内部操作的控制。

8254内部包含三个独立的结构功能完全相同的16位可预置的递减计数器。

控制字寄存器用来存放由CPU写入8254的方式选择控制字,以确定计数器的操作方式。

(3)8259芯片

8259A,可编程中断控制器芯片。

它的引脚图如图3所示。

它是可以用程序控制的中断控制芯片。

单个的8259A能管理8级向量优先级中断。

在不增加其他电路的情况下,最多可以级联成64级的向量优级中断系统。

8259A有多种工作方式,能用于各种系统。

各种工作方式的设定是在初始化时通过软件进行的。

 在总线控制器的控制下,8259A芯片可以处于编程状态和操作状态,编程状态是CPU使用IN或OUT指令对8259A芯片进行初始化编程的状态。

(4)0809芯片

ADC0809是8位逐次逼近型A/D转换器。

它由一个八路模拟开关,一个地址译码器,一个A/D转换器和一个三态输出所存器组成,多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换,三态输出用于锁存A/D转换完的数据,当OE端为高电平时,才可以从三态输出锁存器取走转换完成的数据。

IN0-IN7:

8条模拟量输入通道ADC0809对输入模拟量要求:

信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入端前加采样保持电路。

地址输入和控制线:

4条ALE为地址锁存允许输入线,高电平有效,当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道模拟量通过转换器进行转换。

A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。

通道选择表如下表一所示。

表10809通道选择表

C

B

A

选择的通道

0

0

0

IN0

0

0

1

IN1

0

1

0

IN2

0

1

1

IN3

1

0

0

IN4

1

0

1

IN5

1

1

0

IN6

1

1

1

IN7

数字量输出及控制线:

11条ST为转换启动信号。

当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在跳转期间,ST应保持低电平,EOC为转换结束信号,当EOC为高电平时,表明转换结束;否则表明正在进行A/D转换,OE为输出允许信号,用于控制三条输出锁存器想单片机输出转换得到的数据,OE=1,输出转换得到的数据‘OE=0输出数据线呈高阻状态。

D7-D0为数字量输出线CLK为时钟输入信号线,因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常频率为500KHZ。

VREF(+),VREF(-)为参考电压输入。

4.2功能模块设计

图4硬件功能图

图4硬件功能图中,系统总体功能模块在具体实践中,因硬件资源的限制有所调整,比如有些电路采用其他电路来模拟,进水部分有电位器来模拟,电机驱动用直流系统来模拟。

其接线图如图5所示:

图5系统接线图

4.3遇到问题及解决措施

问题1:

当把所有线路按照设计要求连接好过后,发现芯片8254没有输出时钟信号。

解决方法:

芯片8254没有输出时钟信号,这表示8254没有起作用,原以为是芯片坏了,换了好几个新品牌还是一样不起作用,后来经过不断排查是由于采用了12V供电电压,实际要求是5V。

问题2:

当把所有的线路按照设计要求连接好之后,发现电机不能运转。

解决方法:

经检查是连接到电机驱动电路上的接线出现断路,换根接线就把问题解决了

五、系统软件设计

5.1总体设计思想

程序首先要用伪指令定义一下。

然后是8255、8254与8259的初始化,如:

MOVDX,CADDR;8255初始化

MOVAL,MODE

OUTDX,AL

MOVDX,MY8254_MODE;初始化8254工作方式

MOVAL,36H;计数器0,方式3

OUTDX,AL

MOVDX,MY8259_ICW1;初始化实验系统中8259的ICW1

MOVAL,1BH;边沿触发、单片8259、需要ICW4

OUTDX,AL

MOVDX,MY8259_ICW2;初始化实验系统中8259的ICW2

MOVAL,08H

OUTDX,AL

MOVDX,MY8259_ICW4;初始化实验系统中8259的ICW4

MOVAL,01H;非自动结束EOI

OUTDX,AL

MOVDX,MY8259_OCW1;初始化实验系统中8259的OCW1

MOVAL,0FCH;打开IR0和IR1的屏蔽位

OUTDX,AL

然后按照原先设计好的原理框图的步骤设计检测洗衣机开/停信号,如;

CHECK:

MOVDX,PORTB

INAL,DX

TESTAL,80H

JZCHECK

还有接下来的点亮运行指示灯等程序。

在设计中用到了子程序调用、循环、测试等程序。

在编程时按照设计好的原理框图,结合微机课程上所学的具有一定功能的程序一一编出来,然后在计算机上进行调试,发现错误后再进行修改。

在编程过程中要注意程序的嵌套使用,即有些程序按照前面流程图设计好了但在后面的程序中然要用,所以就要注意调用。

软件可分为10个模块:

主程序、键盘扫描子程序、参数设置子程序、延时子程序、显示子程序、自检程序、甩干子程序、暂停子程序、蜂鸣器子程序。

系统的总体流程图如图6所示:

 

图6整体流程方框图

5.2功能模块设计

(1)延时功能模块设计

根据机箱上给出的芯片我们选用了8254作为定时计数器,在延时程序中计时,在加水过程中计量加水的量。

由于需要多次调用延时子程序,所以把他写成一个DALLY程序,每次调用的时候配合CALL和RET就能往返于子程序和主程序之间,之前把要记的数值放在SI寄存器中,在子程序中读取该寄存器就可以知道要记的数是多少而不必每次都重新给计数器赋值,减少了程序的步骤也使得更易读。

(2)洗衣功能模块设计

洗衣子程序中是一个不停的在正传反转间循环的过程,期间每次正转或者反转都调用了延时子程序,定时3S,在完成5次循环过后,洗衣过程完成。

(3)脱水功能模块设计

脱水子程序中只需调用上面做好的延时程序,并在该延时之前打开或关闭相应的指示灯即可。

然后用8086的片选信号加给0832控制电动机正转反转,根据公式:

V0=-NVREF/256计算得到要使电动机保持不转的时候要输入给80H,而正转则取最大值FFH,反转取最小值00H,由于这样得到的V0不相同,所以引起了正传反转时候的速度有些差异,最后等延时子程序执行完毕后,关闭相应指示灯即可完成。

脱水、延时、加水等子程序后面都要加上RET,否则将无法跳回主程序MAIN。

当时在前几次通电试验的时候每次都出现在排水的时候加水指示灯亮起,需要加水后才能熄灭,后检查发现就是少了一个RET导致的,执行完排水程序后没返回而是接下去执行了加水程序。

(4)甩干、报警功能模块设计

甩干子程序是一个不停的在正转的过程,甩干可以分为快甩和慢甩两种档位,甩干子程序还可以通过按键直接跳过洗衣进行调用。

当甩干程序运行结束后,8254会产生一个时钟信号给蜂鸣器从而让蜂鸣器报警,表示洗衣过程结束。

(5)加水子程序设计

加水是这个总程序中很重要的部分,特别是如何将水位信号读取和比较,最终还要输出到8253进行计数。

首先打开加水指示灯,将水位信号扫描到寄存器AL中。

然后根据与设定好的数据进行比较确定水位信号是什么,假如检测到的是高水位的话,跳转到LEVEL,否则给AL置为3,高水位的时候将控制字写给计数器0,继续执行下去直到给BL加上1,当加到与原来保存的水位信号数值相等的时候,由PC7口将信号传递给8253,告之加水计数程序完成,跳出加水程序,然后关闭加水指示灯,执行下面的程序。

5.3遇到问题及解决措施

问题1.通过中断实现数码管计时显示与步进电机延时相互冲突,导致步进电机不能正常运转。

解决方法:

经过很长时间调试,还是不能成功,由于时间有限,所以最后只好通过步进电机正反转次数来计时。

问题2.报警功能实现后不知道如何使它停止下来。

解决办法:

在进入报警子程序前加变量判断,通过按键控制变量的取反改变,停止报警。

六、总结

这次微机原理课程设计历时两个星期,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

以前在上课的时候,老师经常强调在写一个程序的时候,一定要事先把程序原理方框图化出来,但是我开始总觉得这样做没必要,很浪费时间。

但是,这次课程设计完全改变了我以前的那种错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务,画程序方框图是很有必要的。

因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。

 

其次,以前对于编程工具的使用还处于一知半解的状态上,但是经过一段上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的内容以确保程序的正确性上都有了很大程度的提高。

 

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,通过网络和与同学的讨论基本上得到解决,提高了自己解决和分析问题的能力。

 

 

七、附录

洗衣机程序

;****************根据查看端口资源修改下列符号值*******************

IOY1EQU3040H

IOY0EQU3000H;片选IOY0对应的端口始地址

;*****************************************************************

MY8255_AEQUIOY0+00H*4;8255的A口地址

MY8255_BEQUIOY0+01H*4;8255的B口地址

MY8255_CEQUIOY0+02H*4;8255的C口地址

MY8255_MODEEQUIOY0+03H*4;8255的控制寄存器地址

MY8254_COUNT0EQUIOY1+00H*4;8254计数器0端口地址

MY8254_COUNT1EQUIOY1+01H*4;8254计数器1端口地址

MY8254_COUNT2EQUIOY1+02H*4;8254计数器2端口地址

MY8254_MODEEQUIOY1+03H*4;8254控制寄存器端口地址

IOY2EQU3080H;片选IOY0对应的端口始地址

;*****************************************************************

MY8259_ICW1EQUIOY2+00H;实验系统中8259的ICW1端口地址

MY8259_ICW2EQUIOY2+04H;实验系统中8259的ICW2端口地址

MY8259_ICW3EQUIOY2+04H;实验系统中8259的ICW3端口地址

MY8259_ICW4EQUIOY2+04H;实验系统中8259的ICW4端口地址

MY8259_OCW1EQUIOY2+04H;实验系统中8259的OCW1端口地址

MY8259_OCW2EQUIOY2+00H;实验系统中8259的OCW2端口地址

MY8259_OCW3EQUIOY2+00H;实验系统中8259的OCW3端口地址

STACK1SEGMENTSTACK

DW256DUP(?

STACK1ENDS

DATASEGMENT

DTABLE1DB06H,3FH,73H,77H,39H,06H,5BH,4FH,66H,80H

DTABLE3DB10H,30H,20H,60H,40H,0C0H,80H,90H

DTABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H

TIME1DB05H

TIME2DB05H

TIME3DB0FH

MESDB'Pressanykeytoexit!

',0AH,0DH,0AH,0DH,'$'

FREQ_LISTDW371,495,495,495,624,556,495,556,624;频率表

DW495,495,624,742,833,833,833,742,624

DW624,495,556,495,556,624,495,416,416,371

DW495,833,742,624,624,495,556,495,556,833

DW742,624,624,742,833,990,742,624,624,495

DW556,495,556,624,495,416,416,371,495,0

TIME_LISTDB4,6,2,4,4,6,2,4,4;时间表

DB6,2,4,4,12,1,3,6,2

DB4,4,6,2,4,4,6,2,4,4

DB12,4,6,2,4,4,6,2,4,4

DB6,2,4,4,12,4,6,2,4,4

DB6,2,4,4,6,2,4,4,12

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVDX,MY8254_MODE;初始化8254工作方式

MOVAL,36H;计数器0,方式3

OUTDX,AL

MOVDX,MY8254_COUNT0;装入计数初值

MOVAL,00H;18432分频

OUTDX,AL

MOVAL,48H

OUTDX,AL

MOVDX,MY8254_MODE;初始化8254工作方式

MOVAL,050H;计数器2,方式0

OUTDX,AL

MOVDX,MY8254_COUNT1;装入计数初值

MOVAL,03H;18432分频

OUTDX,AL

MOVAL,00H

OUTDX,AL

MOVDX,MY8254_MODE;初始化8254工作方式

MOVAL,0B6H;计数器2,方式3

OUTDX,AL

MOVDX,MY8254_COUNT2;装入计数初值

MOVAL,00H;18432分频

OUTDX,AL

MOVAL,05H

OUTDX,AL

MOVDX,MY8259_ICW1;初始化实验系统中8259的ICW1

MOVAL,1BH;边沿触发、单片8259、需要ICW4

OUTDX,AL

MOVDX,MY8259_ICW2;初始化实验系统中8259的ICW2

MOVAL,08H

OUTDX,AL

MOVDX,MY8259_ICW4;初始化实验系统中8259的ICW4

MOVAL,01H;非自动结束EOI

OUTDX,AL

MOVDX,MY8259_OCW1;初始化实验系统中8259的OCW1

MOVAL,0FCH;打开IR0和IR1的屏蔽位

OUTDX,AL

MOVSI,3000H

MOV[SI],00H;数码管显示1

MOV[SI+02H],05H;数码管显示2

MOV[SI+04H],01H;洗涤,甩干判断变量

MOV[SI+06H],01H;电机速度档位

MOV[SI+08H],01H;电机输入节拍倒转判断变量

MOV[SI+0AH],02H;电机方向控制变量

MOV[SI+0CH],02H;判断是否进入电机运行程序的变量

MOV[SI+0EH],01H;警报器关闭判断变量

MOVDX,MY8255_MODE;初始化8255工作方式

MOVAL,81H;方式0,A口、B口输出,C口低4位输入

OUTDX,AL

KAISHI:

MOVSI,3000H;读取变量首地址

MOVDH,[SI+8]

CMPDH,8

JAZHI1;跳转到节拍1开始转动

CMPDH,1

JBZHI8;跳转到节拍8开始转动

JMPJIXU

ZHI1:

MOV[SI+8],01H

JMPJIXU

ZHI8:

MOV[SI+8],08H

JIXU:

CALLKEYSCAN;键盘扫描

CMP[SI+0EH],02H

JNZC

MOVDX,MY8254_MODE;初始化8254工作方式

MOVAL,0F6H;计数器2,方式3

OUTDX,AL

MOVAX,0000H

MOVDX,MY8254_COUNT2

OUTDX,AL;装入计数初值

MOVAL,AH

OUTDX,AL

C:

MOVAH,1;判断是否有按键按下

INT16H

JZSFRUN;无按键则跳回继续循环,有则退出

QUIT:

MOVAX,4C00H;结束程序退出

INT21H

SFRUN:

MOVSI,3000H;读取变量首地址

MOVDH,[SI+0CH]

CMPDH,01H;判断变量[SI+0CH]

JNZJIXU;不相等跳转到JIXU

MOVDH,[SI+0AH]

CMPDH,01H;判断电机运行方向

JNZZIJIAN

INC[SI+08H];正向节拍加1

JMPRUN

KAISHI1:

JMPKAISHI

ZIJIAN:

DEC[SI+8];反向节拍减一

RUN:

MOVAL,[SI+8];将变量与节拍表对应

MOVBX,OFFSETDTABLE3

ANDAX,00FFH

ADDBX,AX

DECBX

MOVAL,[BX]

MOVDX,MY82

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1