-
微机原理与接口技术课程设计——响铃闹钟
微机原理课程设计说明书
学院:
电力学院
姓名:
学号:
专业:
指导老师:
微机原理与接口技术课程设计——响铃闹钟
目录
一、设计意义
. . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . .1
二、设计任务
. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .1
1
、设计要求
. . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 1
2
、设计原理
. . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 1
三、硬件设计
. . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. .. 2
四、软件设计
. . . . . . . .
. . . . . . . . . . . . . . . . . .. . . . . . ..
. . . . . .4
1
、设计过程
. . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . .5
2
、程序流程图
. . . . .
. . . . . . . . . . . . . . . . . . . . . . . .. .
. . . . . 5
3
、功能模块
. . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . .5
五、设计心得
. . . . . . . . . . .
. . . . . . . . . . . . . .. . . . . . .. . . . .
. .. .8
附录
. . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .. . . . .
. .. . . . . . .. . . . .9
微机原理与接口技术课程设计——响铃闹钟
1
.
设计意义
“微机原理与接口技术”是一门实践性和实用性都很强的课程,
学习的目的
在于应用。
本课程设计是配合“微机原理与接口技术
”课堂教学的一个重要的实
践教学环节,
它能起到巩固课堂和书
本上所学知识,
加强综合能力,
提高系统设
计水平,启发创新思想的效果。
2
.
设计任务
一、
设计要求
1.
从键盘输入闹铃时间(如
09:45
)
2.
程序开始记时,并在屏幕
上显示时间(如
08
:
30
:
21
)并实时刷新
<
/p>
3.
时间到,则发出闹铃声,声音维持数秒,同时屏幕显示响铃提
示;同时时间停
止刷新;
4.
能处理输入错误
(如闹钟响铃时间应为数字,
但用户错误输入非数值型的字符)
二、
设计原理分析
1.
显示系统时间
< br>1
)使用
DOS
功能调用(
p>
INT 21H
)中的
2CH
中断截取系统时间,再调用显
示时间的子程序把时间显示出来(例如显示当前
时间为
16
:
30
:
45
并且如果
时间数少于两位数就要在其前面加
0
后显示出来如
04
:
07
:
03
)
;
2
)利用端口<
/p>
61H
中的
PB4
每
15.08
微秒触发一次的特点,通过适当的循环
次数进行循环从而实现延时
1
秒钟;
3
)在延时后再循环执行步骤
< br>1
从而实现时间每一秒的刷新,在屏幕上不断
显示当前的
时间;
2.
设置闹钟响铃时间与输入
时的容错处理方法
1
)在数据段定义
好字型变量
HOUR
、
MINUTE<
/p>
分别用于存放响铃时的小时
数与分钟数;
2
)
设置闹钟响铃时间由于形式为
p>
12
:
45
p>
(小时:
分钟)
为了方便进行容错
处理,可以分别用一段代码实现每一位数的输入,总共需要输入五位数
字。例
如,输入前两位的小时数时,在输入第一位时,判断输入的是否是从
0
到
2
范
< br>围里的一个数字,
如果不是就显示错误信息并停止程序的运行;
< br>在输入小时的
第二位数时,
判断输入的是否是
0
到
9
范围里的一个数字
,
如果不是就显示错
误信息并停止程序的运行;
在输入第三位时
(应该是冒号)
再判断是否是冒号,<
/p>
如果不是就显示错误信息并停止程序的运行;
输入第四位
(即分钟数的第一位)
1
微机原理与接口技术课程设计——响铃闹钟
判断输入的是否是
0
到
5
数字里的一个,
如果不是
就显示错误信息并停止程序
的运行;
输入最后一位判断是否是<
/p>
0
到
9
的范围中
的一个数字,
如果不是就显
示错误信息并停止程序的运行等等;
3
)每次输入如果确定输入无误就使
用书本中处理输入一个十进制数常用的
方法把输入的数存储到寄存器中,
再把它存入相应的变量中如小时数存到变量
HOUR
中
,分钟数存入变量
MINUTE
中;
3.
当到达闹钟响铃时间时响铃
p>
1
)每次在截取系统时间前先把寄存器
BX
清零,截取时间后把截取到的系
统时间分别与变量
HOUR
与变量
MINUTE
进行比较,如果相等,就使寄存器
BX
加
1
,
这样再执行完截取系统时间后检查
BX
是否为
2
,
< br>如果是
2
就表示已
经到达设定好
的闹铃时间,就跳出显示时间的死循环,跳到响铃的循环去;
2
)响铃是使用
DOS
功能调用(
p>
INT
21H
)中的
2H
,
同时把
7H
放到
DL
寄
存器中,执行一次后延时三秒(延时的方法同显示时间时所用延时方法
一样)
再执行一次共循环执行
40
次从
而实现了响铃几秒钟的功能;
3
.
硬件设计
音乐播放
1.
8253
功能结构:
Intel8253
是
8086/8088
微机系统常用的定时器
/
计数器芯片,它具有定时
计
数两大功能。
8253
具有三个独立
的
16
位计数器,
使用单一
+5V
电源,
采用
NMO
S
工艺,是具有
24
引脚的双排直插式
封装大规模集成芯片。
2.
主要功能:
(
1
)每片有三个独立的
16
位计数器
通道,称为通道
0
—通道
2
。
(
2
)每个计数器都可以按照二进制或十进制计数。
(<
/p>
3
)每个计数器的最高技术速率可达
2.
6MHz
。
(
4
)每个计数器具有
6
种可编程工作
方式。
(
5
)所有输入
/
输出都与
TTL
电平兼容,便于与外界接口相连。
3.
六种工作方式:
方式
0
:计数结束中断
方式
p>
1
:可编程频率发生器
< br>方式
2
:频率发生器
方式
3
:方波频率发生器
方式
4
:软件触发的选通信号
p>
2
微机原理与接口技术课程设计——响铃闹钟
方式
5
:硬
件触发的选通信号
4.
8253
引脚图如图所示,各引脚功能如下:
D7~D0
——八条双向数据线;
WR
(低电平有效)——写输入信号;
RD
(低电平有效
0
< br>)——读输入信号;
CS
(低
电平有效)——片选输入信号;
A0
,
A1
——片内寄存器地址输入信号;
CLK
——计数输入,用于输入定时基准脉冲或计数脉冲;
p>
OUT
——输出信号,以相应的电平指示
计数的完成,或输出脉冲波;
GATE
——选通输入,用于启动或禁止计数器的操作,以使计数器和计测对
象同步。
图
1
8253
引脚图
5.
工作原理:
< br>所有音乐都是由各个不同频率的音阶和其延续时间的长短来实现的。
不同的
音乐是由各个音阶按某种排列各自播放一定时间形成的,
将各音乐音阶
和其延续
时间存在数据段中,
然后根据不同按键值选择不同的音
阶和时间表,
再使用计数
器产生该音阶频率。
< br>
3
微机原理与接口技术课程设计——响铃闹钟
4
.
软件设计
一、
设计过程:
1
)采用模块化程序结构设计
软件,首先将整个软件分成若干个功能模块。
2
)对各模块设计写一个详细的程序流程图。
3
)根据流程图,编写源程序。
4
)上机调试各模块程序。
5
)各程序模块联调。
6
)与硬件一起联调,最后完成全部调试工作。
二、
程序流程图
1. START
开始
在屏幕上输出设置响铃时间的提示
从键盘接收输入的响铃时间并存储在相应变量中
调用子程序
SETRINGTIME
使光标回到行首并且把这一行的字符串消去
调用子程序
CLEANLINE
是
是否到达响
铃时间
否
否
输出响铃提示
延时一秒钟
输出设置好的响铃时间
结束
截取并且显示系统时间
调用中断响铃一声
cx
为
0
延时三秒钟
GETTIME PROC
用于截取系统时间的子程序
4
微机原理与接口技术课程设计——响铃闹钟
开始
是
小时数是否与响
铃小时数相同
否
输出小时数,并输出一个冒号
分钟数是否与响
铃分钟数相同
否
否
结束
当<
/p>
bx
为
2
时就是
已经到达了设定好的响铃时间
输出分钟数,并输出一个冒号
是
使
BX
加
1
使
BX
加
1
调用中断截取系统时间
使
BX
寄存器清零
三、
功能模块
3.1
显示输入闹钟时间
MOV
DS, AX
;
输出设置响铃时间的提示
MOV
AH,
9H
LEA
DX, S1
INT
21H
3.2
显示设置的响铃时间
SHOWRINGTIME
PROC
;
用于显示响铃时间
PUSH
AX
5
微机原理与接口技术课程设计——响铃闹钟
PUSH
BX
PUSH
CX
PUSH
DX
LEA
BX, HOUR
MOV
AX,
[BX]
CALL
OUTPUTNUMBER
MOV
AH,
2h
MOV
DL,
':'
INT
21h
ADD
BX, 2
MOV
AX,
[BX]
CALL
OUTPUTNUMBER
POP
DX
POP
CX
POP
BX
POP
AX
RET
SHOWRINGTIME ENDP
3.3
从系统获得时间并显示当前时间
GETTIME PROC
PUSH AX
MOV BX, 0
MOV AH, 2ch
INT 21h
MOV AL, CH
MOV AH, 0
CMP AX, hour
JE E1
G1: CALL
OUTPUTNUMBER
MOV
AH, 2H
MOV DL, ':'
INT 21H
MOV AH, 0
MOV AL, CL
CBW
CMP MINUTE,AX
JE E2
G2: CALL
OUTPUTNUMBER
MOV AH, 2H
MOV
DL, ':'
INT 21H
MOV AH, 0
MOV AL,
DH
CBW
6
用于截取系统时间
;
微机原理与接口技术课程设计——响铃闹钟
CALL
OUTPUTNUMBER
JMP ED
E1: INC BX
JMP G1
E2: INC BX
JMP
G2
ED: POP AX
RET
GETTIME
ENDP
3.4
播放铃声程序
MUSIC
PROC NEAR
;
定义一个名为
MUSIC
的子程序
PUSH
BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
LEA DX, MESSAGE
;
取
MESSGAE
的地址至
DX
MOV
AH, 09H
INT 21H
显示
MESSAGE
缓冲器中的字符串
MOV AL, 10110110B
;
选择工作方式
3
,使用计数器
2
OUT 43H,AL
;
通过
AL
将控制字写入
43H
端口
MOV
SI, OFFSET MUSICB
;
取
MUSICB
的地址至
SI
MOV DI, OFFSET COUNT
;
取
COUNT
的地址至
DI
NEXT: MOV CX, [SI]
MOV AX, 34DCH
MOV
DX, 12H
;DX:AX=1234DCH=1193
180Hz
时钟
DIV CX
;(DXAX)/CX
的商至
AX
MOV BX, AX
OUT 42H,AL
商的低
8
位送入计数通道
2
MOV AL, AH
OUT 42H,AL
;
商的高
8
位
送入计数通道
2
IN AL, 61H
;
读取
p>
8255
的状态,以控制
PB0
和
PB1
7