微机原理与接口技术课程设计倒计时Word格式.docx

上传人:b****5 文档编号:18082788 上传时间:2022-12-13 格式:DOCX 页数:21 大小:700.90KB
下载 相关 举报
微机原理与接口技术课程设计倒计时Word格式.docx_第1页
第1页 / 共21页
微机原理与接口技术课程设计倒计时Word格式.docx_第2页
第2页 / 共21页
微机原理与接口技术课程设计倒计时Word格式.docx_第3页
第3页 / 共21页
微机原理与接口技术课程设计倒计时Word格式.docx_第4页
第4页 / 共21页
微机原理与接口技术课程设计倒计时Word格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

微机原理与接口技术课程设计倒计时Word格式.docx

《微机原理与接口技术课程设计倒计时Word格式.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术课程设计倒计时Word格式.docx(21页珍藏版)》请在冰豆网上搜索。

微机原理与接口技术课程设计倒计时Word格式.docx

PA7-PA0:

A端口的输入/输出引脚;

PB7-PB0:

B端口的输入/输出引脚;

PC7-PC0:

C端口的输入/输出引脚;

2)与CPU相连的引脚

RESET:

复位信号,低电平有效。

当RESET信号来到时,所有内部寄存器都被清0,同时3个端口被自动设为输入端口;

D7-D0:

8255A的数据线,和系统数据总线相连;

CS:

芯片选择信号。

只有当CS有效时,读出信号RD和写入信号WR才对8255A有效;

RD:

读出信号。

CPU通过IN指令使RD有效,将数据或状态信息从8255A中读到CPU;

WR:

写入信号。

CPU通过OUT指令使WR有效,将数据或状态信息从CPU中写道8255A;

A1,A0:

端口选择信号。

8255A内部有3个数据端口和1个控制端口,共4个端口。

规定A1,A0为00、01、10和11时,分别选中端口A、端口B、端口C和控制端口。

(3)8255A的控制字

1)8255A的方式控制字

8255A共有两个控制字,即工作方式控制字和对C口置位/复位控制字。

8255A的工作方式字格式和各位的含义如图4

图48255A工作方式控制字格式

方式0为基本的输入输出方式;

方式1为选通式输入/输出;

方式3为双向选通输入/输出方式。

2)C口置位/复位控制字

8255A的C口置位/复位控制字的格式如图5

图58255A的C口置位/复位控制字

八段共阴数码管

一般8段LED显示器的内部结构和引脚如图6(a)所示。

每段都是一个发光二极管,通过点亮不同的字段,可以显示0,1,…,9和A,B,…F。

其内部各发光二极管之间的连接方法有共阴极和共阳极两种,如图6(b)和图6(c)所示。

(a)结构和引脚(b)共阴极接法(c)共阳极接法

图6八段LED显示器

(1)共阴极接法:

把发光二极管的阴极连在一起构成公共阴极。

使用时公共阴极接地,这样阳极端输入高电平的段发光二极管就导通点亮,而输入低电平的则不点亮。

实验中使用的数码管为共阴极接法;

(2)共阳极接法:

把发光二极管的阳极连在一起构成公共阳极。

使用时公共阳极

接+5V。

这样阴极端输入低电平的段发光二极管就导通点亮,而输入高电平的则不点亮。

表18段LED显示字形段码

字型

共阴极字形代码

3FH

6

7DH

C

39H

1

06H

7

07H

D

5EH

2

5BH

8

7FH

E

79H

3

4FH

9

6FH

F

71H

4

66H

A

77H

00H

5

6DH

B

7CH

4.功能电路

数码管显示电路

图7显示连接电路

实验箱上有四个LED显示器,本实验利用PC口的最高两位选中X4和X3两个数码管,即进行位锁存;

八段数码管为阳极LED器件。

要让A段点亮,要求PB0输出高电平“1”;

要使B段熄灭,要求从PB1输出低电平“0”。

其余各段以此类推。

要使LED上显示0-9十个数字,需要按照如下段码表来驱动数码管的八段LED:

表28段数码管段码表

显示字符

八段代码

开关与LED灯控制电路

图8开关与LED灯控制电路

设置8255的A端口工作在方式0下,作为输出端,电路连接如上图,在倒计时到0的时候LED灯从左到右接着再从右往左依次点亮,实现跑马灯功能。

开关K1为复位开关,在倒计时过程中置K1为“1”可以实现退出当前倒计时,置K1为“0”时又开始重新倒计时。

开关K0为暂停开关,在倒计时过程中置K0为“1”可以暂停倒计时,置K0为“0”时,数码管接着当前的显示数据执行递减,并且在暂停过程中数码管始终显示暂停时的数据。

三.程序模块及流程图

1.8255A初始化

程序开始时对8255A进行初始化,A组和B组控制工作在方式0,因此方式字中的D6D5和D2为0。

A口为输出,因此D4为0;

C口高4位为输出,因此D3为0,低4位为输入,因此D0为1;

B口为输出,因此D1为0。

根据程序设计要求,8255A的方式控制字为10000001B,即81H。

2.显示程序模块

根据方式控制字和连线可知,B口连接数码管的A~Dp进行段锁存,C口的高4位连接X4~X1进行位锁存。

显示程序如下:

DISPROCNEAR;

数码管显示子程序

PUSHAX;

保护现场

PUSHDX

MOVSI,3000H;

找到存数的缓冲区

MOVAL,0BFH;

10111111B,选中X3数码管

MOVDX,MY8255_C;

选中PC口,进而选中数码管

OUTDX,AL

MOVAL,[SI];

取出缓冲区中存放的键值

XLAT

;

查表指令,将以BX为基地址,AL为位移量的字节存储单元中的数赋给AL

MOVDX,MY8255_B;

写入数码管A~Dp

OUTDX,AL

CALLDALLY1;

调用延时函数

MOVAL,7FH;

01111111B,选中X4数码管

MOVAL,[SI+1];

XLAT

CALLDALLY1;

POPAX

POPDX

DISENDP

3.延时程序模块

控制一个循环程序循环N次以到达延时的目的。

具体语句如下:

DALLY:

PUSHCX;

PUSHAX

MOVCX,0FFFFH

A1:

MOVAX,4FFFH

A2:

DECAX;

自减

JNZA2

LOOPA1;

计数循环

POPAX

POPCX

RET

程序循环次数为N=(FFFF+1)*(4FFF+1),延时时间为N*n(n为程序语句执行时间)

4.控制程序模块

控制程序有暂停和复位,其中暂停可以用一个循环程序来实现,当暂停键拨下时,循环程序会进入死循环状态,直至暂停键拨回。

复位则只需按条件跳转至输入初始时间的程序语句处即可。

C口低4位为输入,读入开关状态,判断“0”和“1”状态进行控制。

程序代码如下:

PAUSE:

CALLDIS;

调用显示子程序

MOVDX,MY8255_C;

C口低4位为输入

INAL,DX;

读入C口的最低位的状态

TESTAL,01H;

00000001B

JNZPAUSE;

最低位为1暂停倒计时

RESET1:

MOVDX,MY8255_C;

C口低4位为输入

INAL,DX

TESTAL,02H;

00000010B

JNZRESET2;

第2位置1后执行RESET2

DECTIME;

减1倒计时

MOVCL,TIME

CMPCL,0FFH

当从初始值减到0后继续减1则值为0FFH,说明计数结束

JNZDISPY;

倒计时未到0,继续倒计时

JMPOUTPUT1;

跳到流水灯点亮

重新开始倒计时

RESET2:

JMPSHURU

5.LED灯点亮程序模块

当程序运行至倒计时结束的语句时启动点亮LED灯程序。

A口连接LED显示单元的D15~D8,通过A口送入的数据控制LED灯的点亮情况。

OUTPUT1:

点亮流水灯,流水灯0灭1亮

MOVCX,7;

循环计数初值

MOVLA,80H;

流水灯从左往右依次点亮

P4:

MOVAL,LA

MOVDX,MY8255_A

OUTDX,AL;

通过A口输出控制LED点亮

CALLDALLY

RORAL,1;

不进位的循环右移

MOVLA,AL

LOOPP4

MOVCX,8

MOVLB,01H;

流水灯从右往左依次点亮

P5:

MOVAL,LB

ROLAL,1;

不进位的循环左移

MOVLB,AL

LOOPP5

JMPprompt;

流水灯显示结束跳转到prompt

四.源程序

利用8255A设计倒计时,其中A端口连接LED显示单元的D8~D15,B口连接数码管的A~Dp,

进行段锁存,C口高4位连接数码管的X4~X1,进行位锁存,C口的低4位作为输入端,连

接开关的K3~K0,其他引脚与系统总线相连

***************根据CHECK配置信息修改下列符号值*******************

IOY0EQU9C00H;

PCI卡中断控制寄存器地址

*****************************************************************

MY8255_AEQUIOY0+00H*4;

8255计数器0端口地址

MY8255_BEQUIOY0+01H*4;

8255计数器1端口地址

MY8255_CEQUIOY0+02H*4;

8255计数器2端口地址

MY8255_MODEEQUIOY0+03H*4;

8255控制寄存器端口地址

DATASEGMENT

DTABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;

对应0~9

TIMEDB;

存储倒计时的初始时间

CHUDB10;

存储被除数10

LADB;

存储数码管从左往右亮的数值

LBDB;

存储数码管从右往左亮的数值

BUFDB;

存储输入的十位数

TISHIDB13,10,"

Inputthetime:

"

"

$"

TIMESUPDB13,10,"

Timesup!

STRMSGDB13,10,"

press[r]torestart,[e]toexit:

ENDMSGDB13,10,"

Thanksforusing!

DATAENDS

STACK1SEGMENTSTACK

DW256DUP()

STACK1ENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1

START:

MOVAX,DATA

MOVDS,AX;

装载数据段

MOVDX,MY8255_MODE;

初始化8255

MOVAL,81H

置8255的C口PC0~PC3输入开关状态,PC4~PC7进行数码管的位锁存B

口的PB0~PB7进行数码管的段锁存,A口的PA0~PA7控制流水灯的点亮

SHURU:

LEADX,TISHI;

给出输入时间提示

MOVAH,09H

INT21H;

显示输入倒计时时间的提示

MOVAH,01H

输入第1个数作为十位数

SUBAL,30H;

将AL的ASCLL减30H变为十进制的值

MOVCL,10

MULCL;

将操作数10和AL相乘结果存入AX中

MOVBUF,AL;

把十位数存入BUF中

MOVAH,01H;

输入第2个数作为个位数

INT21H

将AL的ASCII减30H变为十进制的值

ADDAL,BUF;

将两数相加作为倒计时的开始时间

MOVTIME,AL;

将数给TIME

DISPY:

MOVBX,OFFSETDTABLE;

取DTABLE的偏移值

MOVAL,TIME;

初值给AL

CBW;

将AX的高8位置0

MOVCL,CHU;

除数10给CL

DIVCL;

商/十位数存入AL,余数/个位数存入AH

MOVSI,3000H;

定义一个缓冲区

MOV[SI],AL;

商/十位数存入[SI],X3中

MOV[SI+1],AH;

余数/个位数存入[SI+1],X4中

PUSHAX;

PUSHCX

MOVCX,1FFFH;

通过延时不断刷新数码管

C1:

MOVAX,0FFFH

C2:

DECAX

CALLDIS;

JNZC2

LOOPC1;

通过循环调用不断刷新数码管显示

POPCX

POPAX;

弹出现场

CALLDIS;

INAL,DX;

TESTAL,01H;

JNZPAUSE;

INAL,DX

TESTAL,02H;

00000010B

JNZRESET2;

DECTIME;

MOVCL,TIME

CMPCL,0FFH;

当从初始值减到0后减1则值为0FFH,计数结束

JNZDISPY;

JMPOUTPUT1;

JMPSHURU;

重新开始倒计时

PUSHCX;

MOVCX,7;

MOVLA,80H;

OUTDX,AL;

RORAL,1;

MOVLB,01H;

ROLAL,1;

LOOPP5

JMPprompt;

流水灯点亮延时函数

DECAX

LOOPA1

DISPROCNEAR;

找到存数的缓冲区

MOVAL,0BFH;

XLAT

MOVAL,7FH;

MOVAL,[SI+1];

XLAT

DALLY1PROCNEAR;

数码管显示延时函数

PUSHAX

MOVCX,0FFH

C3:

MOVAX,0FFH

C4:

JNZC4

LOOPC3

POPAX

RET

DALLY1ENDP

prompt:

LEADX,TIMESUP;

将TIMESUP字符串输出

CALLPUTS

LEADX,STRMSG;

将STR字符串输出

CALLPUTS

P3:

MOVAH,1

键盘输入单个字符,AL=输入字符的ASCII码

CMPAL,72H;

测试按下的键为‘r’重新开始

JZP1

CMPAL,65H;

测试按下的键为‘e’退出

JZP2

JMPP3;

不处理其他按键的输入

P1:

JMPRESET2;

重新开始

P2:

LEADX,ENDMSG

MOVAH,4CH;

退出程序

PUTS:

MOVAH,9

进行字符串显示

RET

CODEENDS;

程序结束

ENDSTART

五.实验结果

图8课设平台

图9系统连线

图10数码管显示图11LED灯点亮显示

图12PC显示屏提示显示

六.总结

通过本次微机接口课程设计,让我对微机原理与接口技术和汇编语言的了解更加深刻。

我和我的组员王乐在TD-PIT+实验系统和PC机平台上利用并行接口8255A、键盘及数码管显示单元、开关及LED显示单元、键盘按键和电脑显示屏设计成一个倒计时器,最终很完美地实现了所有基本功能和扩展功能,感觉很有自豪感。

在这次课设中,我学到了很多,包括书本上的和书本外平时易忽视的东西。

一方面锻炼了我的动手能力,一方面提升了我的分析问题和解决问题的能力,还有就是团队合作精神。

在这过程中,我们遇到了很多问题,最突出的就是数码管显示问题,我们一起讨论研究并询问老师,最终都很完美地解决了所有问题,设计出了一个多功能的倒计时器。

感谢XXX老师的细心指导,感谢我的组员XX,最后感谢学校给我们提供这么好的学习平台。

附录1:

系统硬件框架

附录2:

系统总程序流程图

附录3:

8086/88计算机主板图

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

当前位置:首页 > PPT模板 > 动态背景

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

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