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

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

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

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

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

微机原理与接口技术课程设计倒计时

 

微机原理与接口技术课程设计-倒计时

 

微机原理与接口技术课程设计报告

题目:

倒计时

学院专业计算机科学与技术

班级学号

学生姓名指导教师

课程成绩完成日期2011年6月23日

 

题目:

倒计时

一.设计功能

本次课程设计我们在TD-PIT+实验系统和PC机平台上利用并行接口8255A、键盘及数码管显示单元、开关及LED显示单元、键盘按键和电脑显示屏设计成一个倒计时器。

具体功能包括:

1.用2位8段共阴数码管显示倒计时时间;

2.使用开关K0实现暂停/启动功能,开关K1实现倒计时复位功能;

3.倒计时为0时8盏LED灯实现跑马灯功能;

4.利用数字键输入倒计时初始数值,按键“r”实现重新启动倒计时器,按键“e”实现退出程序进入DOS环境下,并对其他按键进行屏蔽;

5.屏幕显示相应的提示信息,包括提示用户输入数据、倒计时结束、倒计时结束后用户进行的操作;

6.可以任意设定倒计时的初始时间,每隔1秒钟计时器减1,直到为0;

7.在倒计时过程中可通过开关K1实现退出当前的倒计时并开始新一轮的倒计时。

二.设计原理及原理图

1.系统总设计原理

我们选择并行接口8255A芯片,在程序中使用延时语句来输出秒脉冲,并在其中调用显示函数不断刷新数码管进行数值显示。

使用8255A作为输入/输出接口,其中A端口为输出口,连接LED显示单元的D8~D15;B端口为输出口,连接数码管的A~Dp,进行数码管的段锁存;C端口高4位为输出口,连接数码管的X4~X1,进行位锁存,低4位为输入端,连接开关的K3~K0。

采用在软件中控制循环程序的方式来控制倒计时的复位和暂停功能,并通过程序来显示语句和读入用户的键盘输入,以进行相应操作。

此方案性价比高,但由于使用了软件延时,当芯片损耗以及芯片在工作时间过长后会出现倒计时不够准确。

2.

硬件框架原理图

图1系统设计硬件框架

3.硬件介绍

并行接口8255A

(1)8255A的内部结构

 

图28255A的内部结构

1)8255A有3个8位数据接口,即接口A、接口B和接口C,可利用编程方法设置3个端口是作为输入端口还是输出端口;

2)8255A能适应CPU和I/O接口之间的多种数据传送方式的要求,如无条件传送、查询方式传送、中断方式传送。

8255A设置了方式0、方式1以及方式2;

3)数据总线缓冲器是个双向三态8位数据缓冲器,与CPU系统数据总线相连,是8255A与CPU之间传输数据的必经之路。

输入数据、输出数据、控制命令字都是通过数据总线缓冲器进行传递的;

4)读/写控制逻辑电路接收来自CPU地址总线的信号和控制信号,并发出命令到两个控制组(A组和B组)。

它控制把CPU发出的控制命令或输出的数据送到相应的端口,或者把外设的状态或输入的数据相应的端口送到CPU;

5)A组控制和B组控制一方面接收芯片内部总线上的控制字,一方面接收来自读/写控制逻辑电路的读/写命令,从而解决端口的工作方式和读/写操作。

其中,A组控制电路控制端口A和端口C高4位(PC7-PC4)的工作方式和读/写操作:

而B组控制电路控制端口B和端口C低4位(PC3-PC0)工作方式和读写操作。

(2)8255A的外部引脚

图38255A的功能引脚图

1)与外部设备端相连的引脚

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显示字形段码

字型

共阴极字形代码

字型

共阴极字形代码

字型

共阴极字形代码

0

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段数码管段码表

显示字符

0

1

2

3

4

5

6

7

8

9

八段代码

3FH

06H

5BH

4FH

66H

6DH

7DH

07H

7FH

6FH

开关与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数码管

MOVDX,MY8255_C;选中PC口,进而选中数码管

OUTDX,AL

MOVAL,[SI+1];取出缓冲区中存放的键值

XLAT

MOVDX,MY8255_B;写入数码管A~Dp

OUTDX,AL

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:

PUSHCX;点亮流水灯,流水灯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

MOVDX,MY8255_A

OUTDX,AL

CALLDALLY

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控制流水灯的点亮

OUTDX,AL

SHURU:

LEADX,TISHI;给出输入时间提示

MOVAH,09H

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

MOVAH,01H

INT21H;输入第1个数作为十位数

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

MOVCL,10

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

MOVBUF,AL;把十位数存入BUF中

MOVAH,01H;输入第2个数作为个位数

INT21H

SUBAL,30H;将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;弹出现场

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;重新开始倒计时

OUTPUT1:

PUSHCX;点亮流水灯,流水灯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

MOVDX,MY8255_A

OUTDX,AL

CALLDALLY

ROLAL,1;不进位的循环左移

MOVLB,AL

LOOPP5

JMPprompt;流水灯显示结束跳转到prompt

DALLY:

PUSHCX;流水灯点亮延时函数

PUSHAX

MOVCX,0FFFFH

A1:

MOVAX,4FFFH

A2:

DECAX

JNZA2

LOOPA1

POPAX

POPCX

RET

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数码管

MOVDX,MY8255_C;选中PC口,进而选中数码管

OUTDX,AL

MOVAL,[SI+1];取出缓冲区中存放的键值

XLAT

MOVDX,MY8255_B;写入数码管A~Dp

OUTDX,AL

CALLDALLY1;调用延时函数

POPAX

POPDX

DISENDP

DALLY1PROCNEAR;数码管显示延时函数

PUSHAX

PUSHCX

MOVCX,0FFH

C3:

MOVAX,0FFH

C4:

DECAX

JNZC4

LOOPC3

POPCX

POPAX

RET

DALLY1ENDP

prompt:

LEADX,TIMESUP;将TIMESUP字符串输出

CALLPUTS

LEADX,STRMSG;将STR字符串输出

CALLPUTS

P3:

MOVAH,1

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

CMPAL,72H;测试按下的键为‘r’重新开始

JZP1

CMPAL,65H;测试按下的键为‘e’退出

JZP2

JMPP3;不处理其他按键的输入

P1:

JMPRESET2;重新开始

P2:

LEADX,ENDMSG

CALLPUTS

MOVAH,4CH;退出程序

INT21H

PUTS:

MOVAH,9

INT21H;进行字符串显示

RET

CODEENDS;程序结束

ENDSTART

五.实验结果

 

图8课设平台

 

图9系统连线

 

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

 

图12PC显示屏提示显示

六.总结

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

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

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

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

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

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

附录1:

系统硬件框架

 

附录2:

系统总程序流程图

附录3:

8086/88计算机主板图

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

当前位置:首页 > 高等教育 > 军事

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

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