电子秒表课程设计.docx
《电子秒表课程设计.docx》由会员分享,可在线阅读,更多相关《电子秒表课程设计.docx(18页珍藏版)》请在冰豆网上搜索。
电子秒表课程设计
计算机硬件技术课程设计
学院:
自动化工程学院
班级:
姓名:
学号:
设计题目:
9、电子秒表设计
2015年1月
一、设计题目:
电子秒表设计
设计一个可任意启动/停止的电子秒表,要求用6位LED数码显示,计时单位为1/100秒。
利用功能键进行启/停控制。
其功能为:
上电后计时器清0,当第一次(或奇数次)按下启/停键时开始计数。
第2次(或偶数次)按下该键时停止计时,再一次按启/停键时清零后重新开始计时。
可用开关控制,也可用按键控制。
二、设计目的
通过本项课程设计,对微机原理课程中涉及的芯片结构、控制原理、硬件编程等方面有一定的感性认识和实践操作能力,更好的理解微机原理课程中讲述的基本原理和概念。
进行微机原理课程设计前,应学习并掌握了8086/8088汇编语言编程方法,掌握了8255、8253存储器等芯片的基本结构和工作原理,掌握了芯片编程控制的方法。
3、设计方案以及论证
1、整体设计思想
使用8253工作在方式0计数,对1/100S计数,并讲计数值写入bl中并与100比较若不相等,则将计数值装换为10进制后送8255控制端显示,如相等则1S计数程序加1之后并与59比较若不相等则将计数值装换为10进制后送8255控制端显示,如相等则1min计数程序加1之后并与59比较若不相等则将计数值装换为10进制后送8255控制端显示,如相等则计数程序加1之后产生溢出,跳转清零程序将计数清零,同时数码管清零。
2、使用各芯片的作用及工作原理
1)定时器/计数器8253
用系统8253定时器提供的55ms定时单位,设计秒表定时程序。
有关系统定时方法:
PC机系统中的8253定时器0工作于方式3,外部提供一个时钟作为CLK信号,频率:
f=1.1931816MHz。
定时器0输出方波的频率:
fout=1.1931816/65536=18.2Hz。
输出方波的周期Tout=1/18.2=54.945ms。
8253A每隔55ms引起一次中断,作为定时信号。
可用55945ms作基本计时单位。
用BIOS调用INT1AH可以取得该定时单位。
例:
1秒=18.2(计时单位)
8253的引脚图及硬件连接图如下图示:
《8253引脚图》硬件连接图
当A1A0分别为00011011时分别选中三个通道和控制字寄存器在8088系统中,8088的A1A0分别与8253的A1A0相连在8086系统中,通常将8253的8位数据线与8086的低8位相连,即使用偶地址,所以8086的A2A1分别与8253的A1A0相连。
计数器(0~2)即三个计数器/定时器通道。
每个通道包括:
8位控制字寄存器、16位计数初值寄存器、减一计数器和输出锁存器。
作定时器用:
其CLK端上的输入脉冲应是标准的、精确的;作计数器用:
对其CLK端上的脉冲计数,脉冲宽度可以不等。
采用减一计数器,为0时,从OUT端上输出一个脉冲定时时间=时钟脉冲周期X预置的计数初值。
控制功能表
CS
RD
WR
A1A0
功能
0
1
0
00
写计数器0
0
1
0
01
写计数器1
0
1
0
10
写计数器2
0
1
0
11
写控制字寄存器
0
0
1
00
读计数器0
0
0
1
01
读计数器1
0
0
1
10
读计数器2
0
0
1
11
无操作
1
X
X
XX
禁止使用
0
1
1
XX
无操作
每个通道:
CLK
计数脉冲或标准脉冲输入端
GATE
允许端,当GATE=1时允许计数
UT
计数值为0时输出一个脉冲
由于8253的读/写操作对系统时钟没有特殊的要求,因此它几乎可以应用与由任何一种微处理器组成的系统中,可作为可编程的方波频率发生器、分频器、实时时钟、事件计数器和单脉冲发生器等。
8253是一片具有三个独立的16位计数器通道的可编程定时器/计数器芯片。
每个通道都可以编程设定3种工作方式之一种;8253由以下几个部分组成:
(1)数据总线缓冲器(8位、三态、双向);
(2)读/写控制逻辑;CS:
片选信号,低电平有效;
RD:
读信号,低电平有效;
WR:
写信号,低电平有效;
A1A0:
端口选择信号
(3)三个通道(0~2),由A0,A1控制选择;
(4)一个控制寄存器;
内部结构及引脚图
2)用可编程并行接口芯片8255的PA口以及PB口实现数码管输出,PC口实现按键实现数据显示输出
8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。
CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位、32位等。
用+5V单电源供电,能在以下三种方式下工作:
方式0--基本输入/出方式、方式1--选通输入/出方式、方式2--双向选通工作方式。
8255工作方式控制字和C口按位置位/复位控制字格式如图所示:
3.锁存器273
74LS273是8位数据/地址锁存器,他是一种带清除功能的8D触发器,下面介绍一下他的管脚图功能表等资料。
(1).1脚是复位CLR,低电平有效,当1脚是低电平时,输出脚2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)全部输出0,即全部复位;
(2).当1脚为高电平时,11(CLK)脚是锁存控制端,并且是上升沿触发锁存,当11脚有一个上升沿,立即锁存输入脚3、4、7、8、13、14、17、18的电平状态,并且立即呈现在在输出脚2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)上.
74ls273管脚功能:
1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发,低电平清除,常用作8位地址锁存器。
4、译码器74ls154
74ls154为4—16线制译码器其引脚图如下图所示
5、7段数码管
数码管要正常显示,就要来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。
静态显示驱动
静态驱动也称直流驱动。
静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。
静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。
动态显示驱动
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"A,B,C,D,E,F,G,DP"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制。
6、硬件原理图
四、程序流程图
等于100
不等
等于59
不等
等于59
不等
五、程序代码
a1equ0000h
b1equ0002h
c1equ0004h
ctr1equ0006h;8255各端口地址
a2equ0200h;8253计数器0端口地址
ctr2equ0206h;8253控制端口地址
a3equ0100h
datasegment
keynumdb0EEH,0DEH,0BEH,7EH,0EDH,0DDH,0BDH,7DH,0EBH,0DBH,0BBH,7BH,0E7H,0D7H,0B7H,77H
tabdb3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
bufdb0,0,0,0
buf1db0,0,0,0,0,0,0,0
buf2db0,0;前为第一开关次数
buf3db80dup(?
)
dataends
codesegment'code'
assumeds:
data,cs:
code
start:
movax,data
movds,ax;设中断入口地址设置
movax,0
moves,ax
movdi,08
movax,offsetintr_key
cld
stosw
movax,segintr_key
stosw
movax,data;编程初始化
moves,ax;8255写入控制字
moval,10001001b;A口B口输出显示,C口高四位低四位输入
movdx,ctr1
outdx,al
n3:
calljishu
jmpn3
n2:
leasi,buf2
movbh,00h
movbl,1h[si]
leadi,buf3
adddi,bx
addbl,8
mov1h[si],bl
leasi,buf1
cld
movcx,8
repmovsb
n4:
calldis
jmpn4
n5:
leasi,buf2
movbh,00h
movbl,1h[si]
cmpbl,0
jzn1
leadi,buf1
subbl,8
mov1h[si],bl
leasi,buf3
addsi,bx
cld
movcx,8
repmovsb
n6:
calldis
jmpn6
n1:
callqinlin
jmpn1
;jmpstart
jishuprocnear;计数子程序
leasi,buf
movbl,[si]
cmpbl,100
jnzs6
s1:
movbl,0
mov[si],bl
movah,1h[si]
cmpah,59
jzs2
incah
mov1h[si],ah
jmps6
s2:
movah,0
mov1h[si],ah
movah,2h[si]
incah
mov2h[si],ah
jmps6
s6:
callchu
movcx,3
s5:
calldis
loops5
calldelay1s
incbyteptr[si]
ret
jishuendp
chuproc;rukoual;数处理子程序
pushsi
pushbx
movbl,4
leadi,buf1
leasi,buf
next:
lodsb
movah,00
movcl,10
divcl
xchgah,al
stosb
moval,ah
stosb
decbl
jnznext
popbx
popsi
ret
chuendp
disprocnear;显示buf1中的值
pushbx
pushcx
leabx,tab
leadi,buf1
movcx,8
movah,7Fh
loop1:
moval,[di]
xlat;换码
movdx,a1
outdx,al
movdx,b1
moval,ah
outdx,al
movbh,1
calldelay
callqp
leabx,tab
rorah,1
incdi
looploop1
popcx
popbx
ret
disendp
delay1sprocnear;8253延时子程序
pushdx
pushax
movdx,ctr2;8253控制
moval,00110000b
outdx,al;8253计数器0控制字方式0out端作为中断请求信号
movdx,a2
moval,01h
outdx,al
moval,00h
outdx,al
movdx,a3
M1:
inal,dx
testal,01h
jzM1
popax
popdx
ret
delay1sendp
qpprocnear;清频子程序
moval,0ffh
movdx,b1
outdx,al
ret
qpendp
delayPROCNEAR;内部延时子程序
PUSHbx
PUSHCX
wait0:
MOVCX,06h
wait1:
LOOPwait1
DECbh
JNZwait0
POPCX
POPbx
RET
delayENDP
intr_keyprocnear;中断服务子程序
callkey
testal,2h
jzn1
testal,4h
jzn5
leadi,buf2
movbh,[di]
incbh
mov[di],bh
testbh,1h
jnzn2
jmpn3
iret
intr_keyendp
qinlinproc;键盘清零子程序
movax,0
leadi,buf
movcx,14
cld
repstosb
calldis
qinlinendp
keyproc;读取键盘程序
movdx,c1
inal,dx
ret
keyendp
codeends
endstart
程序编译图:
六、程序运行结果分析与预测
按下暂停键实现暂停功能
继续计数后按下清零键实现清零功能
7、结果评述或总结
1、结果评述
程序和电路图都做好以后,能够运行且显示秒表计时,但是秒表的计时1秒快慢与标准时间的1秒不一致,经过思考和检查以后,知道决定计时快慢的因素为时钟的频率和主处理器8086频率。
经过调整两者频率是秒表计时快慢与标准秒表计算速度一致,最后得到了比较满意的结果。
电路开始运行后秒表计时,单位为1/100秒,按下停止键,计时暂停,再按一次开始键,计时继续;当按下清零键,计时频幕清零;当计时产生溢出则清空。
2、总结
本次课程设计,我在程序的编写上遇到比较多的困难,但我按照秒表的设计思路,综合8086的处理能力和8253的定时/计数、8255输出以及锁存器和译码器的各性能,将程序编写出来,遇到无法处理的难题时得到了老师的指点和帮助,使我能编写出正确的程序,在此,我很感谢老师给予我的帮助。
再次,此次编程用的是汇编语言,与我在创新创业班的C语言秒表课程设计相比较,让我进一步明白汇编语言和C语言两者的优劣势。
以及使我能将计算机硬件技术的理论知识运用到课程设计的实践中,理论知识与实践能力一样重要。
最后,课程设计是对以前所学知识的整合,让我能将所学的各个知识分部整合起来,融汇贯通,使理论知识学习得以升华。
我感谢这一学期老师们的辛勤付出和自己的努力,使我能掌握好计算机硬件技术的基础。