微机原理与接口技术课程设计倒计时.docx
- 文档编号:10435213
- 上传时间:2023-02-11
- 格式:DOCX
- 页数:23
- 大小:864.17KB
微机原理与接口技术课程设计倒计时.docx
《微机原理与接口技术课程设计倒计时.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术课程设计倒计时.docx(23页珍藏版)》请在冰豆网上搜索。
微机原理与接口技术课程设计倒计时
微机原理与接口技术课程设计报告
题目:
倒计时
学院专业计算机科学与技术
班级学号
学生姓名指导教师
课程成绩完成日期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.硬件介绍
3.1并行接口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口置位/复位控制字
3.2八段共阴数码管
一般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.功能电路
4.1数码管显示电路
图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
4.2开关与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计算机主板图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 接口 技术 课程设计 倒计时
![提示](https://static.bdocx.com/images/bang_tan.gif)