微机原理课程设计-数字时钟

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微机原理课程设计
设计题目:电子时钟
班级:08电信系机电五班
姓名及学号:薛鹏(***********)
目录
一、摘要
二、引言
三、电子时钟的设计:
1.设计目的
2.设计任务
3.电路原理图
四、程序设计
(1)设计思路
(2)设计流程图
(3) 源代码
五、软件调试
六、设计总结和心得体会
摘要:
近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。

在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。

单片机微型计算机是微型计算机的一个
重要分支,也是颇具生命力的机种。

单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。

通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。

因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。

目前单片机正朝着高性能和多品种方向发展,它们的CPU功能在增强,内部资源在增多,引角的多功能化,以及低电压底功耗。

一、引言
单片机是把中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、输入/输出端口(I/0)等主要计算机功能部件都集成在一块集成电路芯片上的微型计算机。

单片机是把主要计算机功能部件都集成在一块芯片上的微型计算机。

它是一种集计数和多中接口于一体的微控制器,被广泛应用在智能产品和工业自动化中。

现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。

8086是Inter系列的16位微处理器,芯片上有2.9万个晶体管,采用HMOS工艺制造,用单一的+5V电源,时钟频率为5MHz~10MHz。

它有16根数据线和20根地址线,它既能处理16位数据,也能处理8位数据。

8086/8088内部结构图
1. 数据寄存器
数据寄存器为图中最上边所示的4个寄存器AX,BX,CX,DX。

这些寄存器用以暂时保存计算过程中所得到的操作数及结果。

他能处理16位数,也能处理8位数,当处理8位数时,这4个16位寄存器作为8个8为寄存器AH,AL,BH,BL,CH,CL,DH,DL来使用。

这4个数据寄存器除了作为通用寄存器以外,还有各自的专门用途:
AX做累加器用,是算术运算的主要寄存器。

AX还用在字乘和字除法中,此外,所有的I/O 指令都是以AX为中心与外部设备进行信息传送;
BX在计算寄存器地址时,常用做基值寄存器;
CX再串操作指令及循环中用做计数器;
DX在字乘法,字除法运算中,将DX,AX组合成一个双字长数,DX用来存放高16位数。

另外,在间接的I/O指令中,DX用来指定I/O端口地址
2. 指针寄存器及变址寄存器
指针寄存器包括堆栈寄存器SP和基数指针寄存器BP,变值寄存器包括源变址寄存器SI 和目的变值寄存器DI。

这4个寄存器都是16位寄存器,这些寄存器在运算过程中也可以用来存放操作数(只能以字为单位),但经常的用途是在段内寻址时提供偏移地址,SP,BP一般与段寄存器SS联用,以确定堆栈寄存器中某一单元的地址,SP用以指示栈顶的偏移地址,而BP可作为堆栈区中的一个基地址,用以确定在堆栈中的操作数地址。

SI,DI一般与段寄存器DS联用,以确定数据段中某一存储单元的地址,SI,DI具有自动增量和自动减量的功能,这一点使在串操作指令中用做变址非常方便,SI作为隐含的源变址DS联用,DI作为隐含的目的变址和ES连用,从而达到在数据段和附加段中寻址的目的
3. 段寄存器
有4个段地址寄存器:
CS16位代码段寄存器
DS16位数据段寄存器
SS16位堆栈段寄存器
ES16为附加段寄存器
4. 控制寄存器
IP是指令指针寄存器,是一个16位寄存器,用来存放代码段中的偏移地址。

与CS连用才能确定下一条指令的地址,根据这一地址,控制器从指定的存储器中,取出下一条要执行的指令,并修改IP,以便指向下一条要执行的指令。

5.编程结构
总线接口部分负责与存储器,外设端口传送数据。

具体讲,总线接口部分从内存中取出指令送到指令队列时,CPU执行指令时,所需的操作数也由总线接口部分从指定的内存单元或外设端口取来,传送给执行部分去执行,反过来,执行部分的操作结果也通过总线接口传送到指定的内存单元或外设端口中去。

总线接口部件由下面4部分组成:4个段寄存器,指令指针寄存器IP,20位的地址加法器及6个字节的指令队列。

对总线接口部分需说明的一点是,8086的指令队列为6个字节,而8088的指令队列为4个字节。

不管是8086,还是8088,都会在执行指令的同时,从内存中取出下面一条或几条指令,取来的指令依次放在指令队列中,按顺序放,并按顺序到EU中去执行。

执行部分EU的功能负责指令的执行。

执行部件包括:4个数据寄存器,2个指针寄存器,2个变值寄存器,1个状态标志寄存器和一个算术逻辑单元。

6. 存储器组织
1. 存储单元的地址和内容
2. 在计算机中用以存储信息的基本单位是一个二进制位,每8个组成一个字节
二课程设计的意义
课程设计是培养和锻炼学生综合应用所学理论知识解决实际问题能力,它具有动手、动脑,理论联系实际的特点,是培养理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一种较好方法。

微机原理及应用是一门实践性较强的课程,让学生在学完该课程之后,进行一次课程设计,使学生将课堂所学的知识和实践有机结合起来,初步掌握计算机应用系统设计的步骤和接口设计的方法,提高分析和解决实际问题的能力。

三电子时钟的设计
1、设计目的:
(1)理解掌握定时/计数器和中断的使用方法。

(2)掌握微机常用的输入输出方式及接口技术。

(3)掌握一定的汇编语言知识,培养自己的动手操作能力。

(4)学习程序设计的基本思路和方法。

2、设计任务:
(1)用汇编语言编写程序,使其能实现在PC机上用电子时钟时、分、秒的格式显示时间的功能。

(2)能用键盘输入的方法修改电子时钟的时间。

3、电路原理图
四程序设计
(1) 设计思路
先在数据段开一段显示缓冲区,用来存储系统时间,调用子程序的清屏部分。

调用DOS中断,得到系统当前时间,并将其二进制转换成ASCII码。

再分别将小时数、分钟数、秒数存入显示缓冲区,在修改时间的时候调用键盘输入输出程序实现时钟的修改功能,然后存入结束字符‘$’。

调用DOS 字符串显示功能将时间显示在显示器上,调用屏幕的I/O中断,定位光标的开始位置,将时间显示在预先定义好的位置。

把程序设计成用刷新的方式来不断获取系统的时间,这样就有了会一秒一秒走动的电子时钟。

在此过程需要用到延时程序,所以我们把延时程序单独做成一个子程序,然后在需要的时候调用它,使得时间的显示程序更加精炼。

此外我们还参考设计了一个比较精确的延时程序,使时间显示更加准确。

(2) 设计流程图
(3) 源代码
data segment
mess1 db '
****************ASM ASSIGNMENT**************** ',0ah,0dh
db ' ',0ah,0dh
db '
***************ELECTRONIC CLOCK*************** ',0ah,0dh
db ' ',0ah,0dh
db '
*****Designed by Xie jiasheng and Guoding***** ',0ah,0dh
db ' ',0ah,0dh
db '
*****Press C or c to correct the time********* ',0ah,0dh
db ' ',0ah,0dh
db '
***********Press ESC button to exit*********** ',0ah,0dh,'$'
tn db 'Please input the new time (hh:mm:ss):',0dh,0ah,'$' ;提示输入时间的格式
mess2 db '*******Time is:',0ah,0dh,'$'
t_buff db 40 ;在数据段开一段时间显示缓冲区
db ?
db 40 dup (?)
hor db ?
min db ?
sec db ?
fg db 0
data ends
stack segment
db 100 dup(?)
stack ends
code segment
assume cs:code,ss:stack,ds:data ;确定各个逻辑段的类型
start:
call clear ;调用清屏子程序
display: ;时间显示部分
mov ax,seg data
mov ds,ax
mov bx,offset t_buff ;送t_buff的偏移地址到BX
mov ah,2ch ;调用DOS时间调用功能,功能号:2cH,小时,分钟,秒数
;分别保存在CH,CL,DH中
int 21h
mov al,ch ;小时数设定
mov ah,0
call bctd ;调用进制转换子程序
push ax
and al,0f0h ;选取al高四位
mov cl,4 ;设置右循环的次数
rol al,cl ;右循环
or al,30h ;加30h得到ACSII码
mov [bx],al ;将得到的结果送到t_buff缓冲区
inc bx ;BX自加1,指针指向下一个缓冲区的下一个地址pop ax
and al,0fh ;选取低四位
or al,30h
mov [bx],al ;将转换后的低四位值送入缓冲区的第二个地址inc bx
;----------------------------------------------------------
mov al,':' ;显示分隔符号
mov [bx],al
inc bx
;-------------------------------------------------------
mov ah,2ch
int 21h
mov al,cl ;分钟数设定
mov ah,0
call bctd
push ax
and al,0f0h
mov cl,4
rol al,cl
or al,30h
mov [bx],al
inc bx
pop ax
or al,30h
mov [bx],al
inc bx
;------------------------------------------------------------------------- mov al,':' ;显示分隔符号
mov [bx],al
inc bx
;-------------------------------------------------------------------------
mov ah,2ch ;秒设定
int 21h
mov al,dh
mov ah,0
call bctd
push ax
and al,0f0h
mov cl,4
rol al,cl
or al,30h
mov [bx],al
inc bx
pop ax
and al,0fh
or al,30h
mov [bx],al
inc bx
;----------------------------------------------------------------------
mov al,'$' ;将字符串的结束位送至显示缓冲区的最后一位mov [bx],al
;------------------------------------------------------------------------ push bx ;置光标位置,AH=2,BH=0,
; DH跟DL分别为行号与列号,并入栈保护BX
mov ah,2
mov bh,0
mov dh,17
int 10h
pop bx
lea dx,t_buff ;送t_buff偏移地址到DX,并调用DOS显示功能,功能号为9 mov ah,9
int 21h
push bx ;置光标位置
mov ah,2
mov bh,0
mov dh,0
mov dl,0
int 10h
pop bx
lea dx,mess1
mov ah,9
int 21h
push bx ;置光标位置
mov ah,2
mov bh,0
mov dh,17
mov dl,21
int 10h
pop bx
lea dx,mess2
mov ah,9
int 21h
;-----------------------------
call delay1
mov ah,1 ;调用键盘I/O中断功能号1,获取键值到AL
int 16h
cmp al,'c' ;是c键,转到时间修改程序
je Cor
cmp al,'C' ;是C键,转到时间修改程序
je Cor
cmp al,1bh
jz quit ;是ESC键,退出程序
jmp display
quit:
mov ah,4ch ;程序终止功能号
int 21h
ret
Cor: call correct ;调用时间修改子程序
;-------------------------------
bctd proc near ;二进制转BCD码子程序
;AX输入参数
;AX输出参数,存放调整过的BCD码
mov dx,ax
mov ax,0
mov cx,16 ;设循环次数
bctd1:
clc ;清进位标志C
rcl dx,1 ;通过进位的循环右移
adc al,al ;带进位加法
daa ;加法的十进制调整
xchg al,ah ;交换高、低八位
adc al,al
daa
xchg al,ah
loop bctd1 ;循环次数保存在CX里
ret
bctd endp
;-------------------------------------------
clear proc near
push ax ;入栈保护现场
push bx
push cx
push dx
mov ax,0600h ;ah=06(滚动)al=00(全屏空白)
mov bh,2eh ;设置背景颜色(2)和前景颜色(e)
sub cx,cx
mov dx,5f5fh
int 10h
pop dx ;出栈恢复现场
pop cx
pop bx
pop ax
ret
clear endp
;-----------------------------------------
delay1 PROC ;精确延迟时间子程序
MOV DX,04ffh ;循环次数
up: XOR CX,CX
a: NOP
LOOP a
DEC DX
JNZ up
RET
delay1 ENDP
;----------------------------
correct proc ;时间修改子程序
call input ;调用键盘输入子程序输入数据
mov ch,hor
mov cl,min
mov dh,sec
and dl,0h
mov ah,2dh
int 21h
jmp start
ret
correct endp
input proc ;键盘输入子程序
push ax ;入栈保护数据
push bx
push cx
push dx
pushf
mov dx,offset tn ;显示修改时间的格式提示mov ah,09h
int 21h
mov dx,offset t_buff ;数据缓冲区的数据输入mov ah,0ah
int 21h
and dx,0h
lea bx,t_buff
inc bx
inc bx
mov dh,[bx]
sub dh,30h
inc bx
mov dl,[bx]
sub dl,30h
mov cl,10
mov al,dh
mul cl
add al,dl
mov ch,al
mov hor,al
inc bx
inc bx
mov dh,[bx]
sub dh,30h
inc bx
mov dl,[bx]
sub dl,30h
mov cl,10
mov al,dh
mul cl
add al,dl
mov cl,al
mov min,al
inc bx
inc bx
mov dh,[bx]
sub dh,30h
inc bx
mov dl,[bx]
sub dl,30h
mov cl,10
mov al,dh
mul cl
add al,dl
mov dh,al
mov sec,al
popf ;出栈恢复数据
pop dx
pop cx
pop bx
pop ax
ret
input endp
;----------------------------
code ends
end start
七、软件调试
在计算机上建立和运行时,首先用汇编程序建立汇编语言源程序后,在利用软件翻译成目标程序文件,经过连接可以在DOS下调试。

本程序调试:1,按大或小写C,可以根据屏幕显示修改时间的格式提示下,键盘出入更改时间。

2,按DSC,退出程序。

八、课程设计体会与总结
以前从没有学过关于汇编语言的知识,起初学起来感觉很有难度。

现在回想起自己这一学期学的不多,但现在认识到了这节课程潜在的开发利用价值。

同时也发现微机原理课程设计和其他课程设计有共同的地方,那就是不仅加深和巩固了我们的课本知识,而且增强了我们自己动脑,自己动手的能力。

这次实验并不是很难,主要的困难来自对程序的理解。

功夫不负有心人,经过三个人的合作和努
力,我们最后对实验的原理有了清晰的认识。

实验中个人的力量是不及群体的力量的,我们三个人分工合作,做事的效率高了很多。

虽然有时候会为了一些细节争论不休,但最后得出的总是最好的结论。

而且实验也教会我们在团队中要善于与人相处,与人共事,不要一个人解决所有问题。

总之,这次课程设计对于我们有很大的帮助,通过课程设计,我更加深入地理解了,微机原理课程上讲到的各种芯片的功能,以及引脚的作用,同时加深了对于主要芯片的应用的认识,同时在试验室的环境里熟悉了汇编程序的编写过程和运行过程,最后还提高了自己的动手能力。

相关文档
最新文档