资源描述
微机原理课程设计
目录
第一章 设计内容及要求 2
1.1 设计内容及要求 2
1.2 课程设计的要求 3
第二章 系统的总体设计方案 3
2.1 8086对全自动洗衣机进行控制的主要分析 3
2.2 设计思想 3
第三章 硬件设计 4
3.1 硬件设计概要 4
3.2 所用到的芯片及其个自功能介绍 4
3.3 硬件电路设计系统原理图及其说明 10
3.4系统的电路图 11
第四章 软件设计 12
4.1程序流程 12
4.2源程序及其说明 14
第五章 系统调试与使用 25
第六章 收获体会 26
第一章 设计内容及要求
1.1 设计内容及要求
选用 8086 和适当的存贮器及接口芯片完成
1、六挡水位显示(50、45、40、35、30、25 升);五档洗衣时间(18、15、12、9、6分钟);三档清洗(3、2、1分钟)、五档脱水(6、5、3、2、1 分钟);两位数码管显示总时间;有上电、启动和暂停按钮。
2、工作顺序:插上电源各档均在最大值,选择各档的按钮可以依次向下调节档位,然后按下启动按钮洗衣机按设定的程序进行工作。
3、开始数码管显示为总的洗衣所用时间,在洗衣机工作时,数码管显示的时间为洗衣所剩时间。
4、为了安全起见,当洗衣机盖打开时,洗衣机停止工作,在洗衣机盖关闭后,在继续进行工作。
5、洗衣机可根据水位和工作要求自动进行开启和关闭水阀。
1.2 课程设计的要求
设计出电路原理图,说明工作原理,编写程序及程序流程图。
第二章 系统的总体设计方案
2.1 8086对全自动洗衣机进行控制的主要分析
图 1全自动洗衣机示意图
输入设备主要有电源按钮、启动按钮、水位选择、水位开关、排水按钮、及脱水按钮。输出设备主要有电源指示灯、水位选择按钮信号灯、进水电磁阀、洗涤电动机正转接触器、排水电磁阀、脱水离合器及蜂鸣器等。
2.2 设计思想
首先构思系统的总体结构,根据设计要求确定好系统大致的硬件组成及其结构,其次根据系统的各个功能把软件分成几个不同的模块,依次实现各个模块的功能,最后把各个模块组合起来完成整个系统的功能。
第三章 硬件设计
3.1 硬件设计概要
用Intel的8086作为控制芯片,配合其他接口电路以及配套的芯片组成洗衣机的控制电路。主要用到8255串行通信芯片,74LS137 3—8译码器发出片选信号,AD0809以及DA0832进行模数、数模转换芯片。用一个电位计和AD0809模拟水量信号,DA0832和LM324运放来控制直流电机的正反转和停止。此外还用到了4*4扫描键盘作为输入设备,两个共阴数码管作为显示设备。详情见各个芯片的介绍。
3.2 所用到的芯片及其个自功能介绍
3.2.1 芯片列表
8086,8284,74LS138,8255,AD0809,DAC0832,74LS02,LM324
3.2.2 8086的功能简介
8086是Intel系列的16位微处理器,采用HMOS工艺,内部包含29000个晶体管。内部总线16位,外部总线8位。主要用于兼容当时的外围接口芯片。8086CPU有两部分组成,指令执行部件EU和总线接口部件BIU。
8086的基本性能指标如下所示:
1.16位微处理器;
2.采用高速运算性能的HMOS工艺制造,芯片上集成了2.9万只晶体管;
3.使用单一的+5V电源,40条引脚双列直插式封装(DIP);
4.时钟频率为5MHz~10MHz,基本指令执行时间为0.3ms~0.6ms
5.16根数据线和20根地址线,可寻址的地址空间达1MB
6.8086可以和浮点运算器、输入/输出处理器或其他处理器组成多处理器系统,从而极大地提高了系统的数据吞吐能力和数据处理能力。
AH AL
BH BL
CH CL
DH DL
SP
BP
DI
SI
通 用 寄 存 器
AX
BX
CX
DX
ALU数据总线(16位)
运算寄存器
ALU
标志寄存器
EU 控制系统
∑
CS
DS
SS
ES
IP
内部暂存器
1 2 3 4 5 6
数据总线
8088:8位
8086:16位
总线 控制逻辑
地址总线
20位
指令队列
8088
8086
Q总线
(8位)
指令指针
段寄存器
执行单元EU
总线接口单元BIU
图 2 8086CPU内部结构框图
在这个系统中8086作为整个系统的主控芯片,用来控制协调整个系统的工作。
3.2.3 8284的功能介绍
为8086CPU提供外部的基准时钟信号,并把时钟信号进行功率放大。
3.2.4 74LS138的功能介绍
74LS138为3线—8线译码器,共有54/74S138和54/74LS138两种线路结构形式。
其功能表如图所示,引脚分配如图 所示:
表一74LS138的功能表
图3 74LS138的引脚分配图
3.2.4 8255的功能简介
8255的功能介绍如下:
1. Intel 8255A是一个通用的可编程的并行接口芯片,内部有2个8位I/O口(A、B),两个4位I/O口(PC7~4、PC3~0).
2. 通过编程可设置3种工作方式,可适用于CPU与I/O设备之间的多种数据传送方式的要求。
3. C口可作为数据口,可作为信号线( CPU与I/O设备之间的应答信号),可作为状态口,可按位置位/复位。
4. 价格低廉,使用方便,可以直接与Intel系列的芯片连接使用,在中小系统中有着广泛的应用。
8255的内部结构如图:
图4 8255的内部结构图
8255的引脚分配
1. 引脚(40DIP)
(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的工作方式:
8255A有三种工作方式,用户可以通过编程来设置。
方式0――简单输入/输出――查询方式;A,B,C三个端口均可。
方式1――选通输入/输出――中断方式;A ,B,两个端口均可。
方式2――双向输入/输出――中断方式。只有A端口才有。
工作方式的选择可通过向控制端口写入控制字来实现。
3.2.5 AD0809的功能简介
1.ADC0809是8位逐次逼近型A/D转换器,它由一个八路模拟开关,一个地址译码器,一个A/D转换器和一个三态输出所存器组成,多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换,三态输出用于锁存A/D转换完的数据,当OE端为高电平时,才可以从三态输出锁存器取走转换完成的数据。
2.AD0809的工作原理
IN0-IN7:8条模拟量输入通道
ADC0809对输入模拟量要求:信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入端前加采样保持电路。
地址输入和控制线:4条
ALE为地址锁存允许输入线,高电平有效,当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道模拟量通过转换器进行转换。A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。通道选择表如下表所示。
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(-)为参考电压输入。
3.2.6 DAC0832芯片的功能简介
DAC0832是采样频率为八位的D/A转换芯片,集成电路内有两级输入寄存器,使DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。所以这个芯片的应用很广泛, DAC0832 D/A转换结果采用电流形式输出。若需要相应的模拟电压信号,可通过一个高输入阻抗的线性运算放大器实现。运放的反馈电阻可通过RFB端引用片内固有电阻,也可外接。DAC0832逻辑输入满足TTL电平,可直接与TTL电路或微机电路连接。DAC0832的引脚如图
图 5DAC0832的引脚图
3.2.7 74LS02芯片简介
四2输入或非门(OC)其引脚如图 所示,功能表如图 所示
图 6 74LS02的引脚图
图7 74LS02的功能表
3.2.8 LM324芯片功能简介
LM324系列器件为价格便宜的带有真差动输入的四运算放大器。与单电源应用场合的标准运算放大器相比,它们有一些显著优点。该四放大器可以工作在低到3.0伏或者高到32伏的电源下,静态电流为MC1741的静态电流的五分之一。共模输入范围包括负电源,因而消除了在许多应用场合中采用外部偏置元件的必要性。它有5个引出脚,其中“+”、“-”为两个信号输入端,“V+”、“V-”为正、负电源端,“Vo”为输出端。两个信号输入端中,Vi-(-)为反相输入端,表示运放输出端Vo的信号与该输入端的位相反;Vi+(+)为同相输入端,表示运放输出端Vo的信号与该输入端的相位相同。LM324的引脚排列见图。
图 8LM324引脚图
3.3 硬件电路设计系统原理图及其说明
图 9系统总体框架
在具体实践中,因硬件资源的限制有所调整,比如有些电路采用其他电路来模拟,进水部分有电位器来模拟,电机驱动用直流系统来模拟。
3.4系统的电路图
图10 系统电路图
第四章 软件设计
4.1程序流程
软件可分为10个模块:主程序、键盘扫描子程序、参数设置子程序、延时子程序、显示子程序、进水子程序、排水子程序、甩干子程序、停止子程序、开机延时保护子程序。其中进水、洗衣、排水为一次洗衣的三个不同状态、由相应的子程序来控制电机的运动和进水排水,流程图如图11所示。
4.2源程序及其说明
CODE SEGMENT
ASSUME CS:CODE
WASHTIME DW 20H
WASHTYPE DW 08H
ONTIME DW 00H
TIME DW 0
ADPORT EQU 0010H
ORG 1000H
IOCONPT EQU 0FF2BH
IOAPT EQU 0FF28H
IOBPT EQU 0FF29H
IOCPT EQU 0FF2AH
ORG 10A0H
MAIN PROC
MOV AL,01H
CALL CONVERS
CALL DISP
CALL KEY
MOV DL,10
MUL DL
MOV WASHTIME,AX
CALL KEY
CBW
ADD WASHTIME,AX
K1:MOV AL,02
CALL CONVERS
CALL DISP
CMP AL,2
JA K1
CMP AL,1
JB K1
CMP AL,1
JE RUOX1
CMP AL,2
JE QIANGXI
RUOX:
MOV WASHTYPE,08H
JMP NEXT
QIANGXI:MOV WASHTYPE,0FH
NEXT:MOV AL,03
CALL CONVERS
CALL DISP
CALL KEY
MOV DL,10
MUL DL
MOV ONTIME,AX
CALL KEY
CBW
ADD ONTIME,AX
MOV CX,ONTIME
LOOP K2
K2:CALL DELAY
ADD AX,WASHTIME
ADD AX,WASHTIME
ADD AX,WASHTIME
MOV TIME,AX
CALL STEP1 ;洗衣
MOV CX,WASHTIME
LOOP WASH
CALL STEP3
CALL SHUAIGAN
CALL STEP1;漂洗
MOV CX,WASHTIME
LOOP WASH
CALL SETP3
CALL SHUAIGAN
CALL STEP1;漂洗
MOV CX,WASHTIME
LOOP WAHS
CALL STEP3
CALL SHUANGAN
CALL STOP
JMP MAIN
MAIN ENDP
;////////////////////////////////////////////
WASH PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV DX,DAPORT
DACON1: MOV AL,0FFH
OUT DX,AL
MOV CX,WASHTYPE
LOOP W1
W1:CALL DELAY
DACON2:MOV AL,80H
OUT DX,AL
MOV CX,8H
LOOP W2
W2:CALL DELAY
DACON23:MOV AL,00H
OUT DX,AL
MOV CX,WASHTYPE
LOOP W3
W3:CALL DELAY
MOV AL,80H
OUT DX,AL
MOV CX,8H
LOOP W4
W4:CALL DELAY
DEC TIME
MOV AX,TIME
CALL CONVERS
CALL DISP
POP DX
POP CX
POP BX
POP AX
RET
WASH ENDP
;//////////////////////////////////////
SETP1 PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
ADCONTROL:CALL FORMAT
ADCON:MOV AX,00
MOV DX,ADPORT
MOV DX,ADPORT
IN AL,DX
PUSH AX
CALL CONVERS
CALL DISP
POP AX
CMP AL,0EEH
JAE LA
CALL JINSHUI
LA:MOV DX,IOCONPT;水满,关水
MOV AL,89H
OUT DX,AL
MOV DX,IOCPT
IN AL,DX
AND AL,0FEH
PUSH AX
MOV DX,ICONPT
MOV AL,80H
OUT DX,AL
MOV DX,IOCPT
POP AX
OUT DX,AL
POP DX
POP CX
POP BX
POP AX
RET
STEP1 ENDP
;//////////////////////////////////////
JINSHUI PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV DX,IOCONPT
MOV AL,89H
OUT DX,AL
MOV DX,IOCPT
IN AL,DX
OR AL,01H
PUSH AX
MOV DXIOCPT
MOV AL,80H
OUT DX,AL
MOV DX,IOCPT
POP AX
OUT DX,AL
POP DX
POP CX
POP BX
POP AX
JMP ADCON
JINSHUI ENDP
;//////////////////////////////////////
CONVERS:
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AH,AL
AND AL,0FH
MOV BX,077AH
MOV DS:[BX],AL
POP DX
POP CX
POP BX
POP AX
RET
DISP:
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV DX,077FH
MOV AH,20H
DISP0:
MOV CX,00FFH
MOV BX,DX
MOV BL,DS:[BX]
MOV BH,0H
PUSH DX
MOV DX,0FF22H
MOV AL,CS:[BX+1060H]
OUT DX,AL
MOV DX,0FF21H
MOV AL,AH
OUT DX,AL
DISP1:
LOOP DISP1
POP DX
DEC DX
SHR AH,01H
JNZ DISP0
MOV DX,0FF22H
MOV AL,OFFH
OUT DX,AL
POP DX
POP CX
POP BX
POP AX
RET
DATA1:
DB 0C0H,0F9H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0AH
DB 86H,0FFH,0CH,89H,0DEH,0C7H,8CH,0F3H,0BFH
FORMAT:
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV BX,0
MOV WORD PTR DS:[BX+077AH],0000H
ADD BX,2
MOV WORD PTR DS:[BX+077AH],0009H
ADD BX,2
MOV WORD PTR DS:[BX+077AH],0008H
POP DX
POP CX
POP BX
POP AX
RET
;///////////////////////////////////////////////
STEP3 PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
ADCON1TORL:CALL FORMAT
ADCON1:MOV AX,00
MOV DX,ADPORT
OUT DX,AL
MOV CX,0500H
DELAYSS: LOOP DELAYSS
MOV DX,ADPORT
IN AL,DX
PUSH AX
CALL CONVERS
CALL DISP
POP AX
CMP AL,08H
JBE LAA
CALL PAISHUI
LAA:MOV DX,IOCONPT;停止排水
MOV AL,89H
OUT DX,IOCPT
IN AL,DX
AND AL,0FDH
PUSH AX
MOV DX,IOCONPT
MOV AX,80H
OUT DX,AL
MOV DX,IOPT
POP AX
OUT DX,AL
POP DX
POP CX
POP BX
POP AX
SETP3 ENDP
;////////////////////////////////
PAISHUI PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV DX,IOCONPT
MOV AL,89H
OUT DX,AL
MOV DX,IOCPT
IN AL,DX
OR AL,02H
PUSH AX
MOV DX,IOCONPT
MOV AL,80H
OUT DX,AL
MOV DX,IOCPT
POP AX
OUT DX,AL
POP DX
POP CX
POP BX
POP AX
JMP ADCON1
PAISHUI ENDP
;//////////////////////////
SHUAIGAN PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV DX,DAPORT
MOV AL,0FFH
OUT DX,AL
MOV CX,08H
LOOP SHUAI
SHUAI:CALL DELAY
MOV DX,AL
POP DX
POP CX
POP BX
POP AX
RET
SHUAIGAN ENDP
;///////////////////
DELAY:
POP DX
POP CX
POP BX
POP AX
MOV CX,0FFFFFH
DELAY1:LOOP DELAY1
PUSH AX
PUSH BX
PUSH CX
PUSH DX
RET
;//////////////////////////////////
STOP PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CX,0FFFFFH
LOOP DE
DE:CALL DELAY
POP DX
POP CX
POP BX
POP AX
RET
STOP ENDP
;////////////////////////////////
KEY :PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AL,0FFH
MOV DX,0FF22H
OUT DX,AL
MOV BL,00H
MOV AH,0FEH
MOV CX,08H
KEY1:MOV AL,AH
MOV DX,0FF21H
OUT DX,AL
SHL AL,01H
MOV AH,AL
NOP
NOP
NOP
NOP
NOP
MOV DX,0FF23H
IN AL,DX
NOT AL
NOP
NOP
NOP
AND AL,0FH
JNZ KEY2
INC BL
LOOP KEY1
JMP KEY
KEY2:TEST AL,01H
JE KEY3
MOV AL,00H
JMP KEY6
KEY3:TEST AL,02H
JE KEY4
MOV AL,08H
JMP KEY6
KEY4: KEY2:TEST AL,04H
JE KEY5
MOV AL,10H
JMP KEY6
KEY5: TEST AL,08H
JE KEY
MOV AL,18H
KEY6:ADD AL,BL
CMP AL,10H
JNC FKEY
MOV BL,AL
MOV BH,0H
MOV AL,NYTE PTR DS:[BX+DATA2]
POP DX
POP CX
POP BX
POP AX
FKEY : RET
DATA2:DB 07H,04H,08H,05H,09H,06H,0AH,0BH
DB 01H.00H,02H,0FH,03H,0EH,0CH,0DH
CODE ENDS
END MAIN
第五章 系统调试与使用
在软件编译连接后就开始对整个系统进行调试,包括软件和硬件部分,在我们调试的过程中,遇到的最大困难是软件部分的调试,因为我们在写程序的过程中,受到一些高级语言编程思想的影响,比如从上至下。逐步细分的思想,在我们的程序中,系统被分成了好几个模块,每个模块都是有各自不同的子程序来完成,所以在程序部分,我们每个都进行了现场保护,但是我们在调试过程中发现,这些程序并不是想我们写高级语言那样,可以随意进行调用,比如我们在写程序中遇到的最大问题就是关于LOOP指令与CALL指令的混合使用,一般情况下,LOOP指令的调用格式如下:
MOV CX,10;将循环次数存入CX寄存器
LOP: * ;标号
LOOP LOP
而在我们自己的程序中,我们是想通过这条指令来控制DELAY的循环次数已达到对延时的控制,为此写了如下的代码:
MOV CX,10
LOP:
CALL DELAY
LOOP LOP
尽管我们在DELAY函数中用了PUSH与POP指令将各个寄存器入栈及完成后出栈等操作,但是在实际的调试过程中系统并不是按照我们本来的意愿运行,究其原因,我们判断时系统在返回时除了问题,由于我们没有对ret指令做过多的研究,我们将程序改成:
MOV BX,10
LOP:
CALL DELAY
DEC BX
JNZ LOP
将修改后的程序进行运行,系统正常。
第六章 收获体会
这次微机原理课程设计历时两个星期,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。以前在上课的时候,老师经常强调在写一个程序的时候,一定要事先把程序原理方框图化出来,但是我开始总觉得这样做没必要,很浪费时间。但是,这次课程设计完全改变了我以前的那种错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务,画程序方框图是很有必要的。因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。
其次,以前对于编程工具的使用还处于一知半解的状态上,但是经过一段上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的内容以确保程序的正确性上都有了很大程度的提高。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,通过网络和与同学的讨论基本上得到解决,提高了自己解决和分析问题的能力。
展开阅读全文