您的当前位置:首页正文

电子时钟的设计

2024-06-20 来源:尚车旅游网
目 录

一、设计要求„„„„„„„„„„„„„„„„3 二、设计目的„„„„„„„„„„„„„„„„3 三、设计的具体实现„„„„„„„„„„„„„3

1.系统概述„„„„„„„„„„„„„„„3 (1)设计思路„„„„„„„„„„„„„3 (2)主要工作原理„„„„„„„„„„„4

2.硬件电路设计„„„„„„„„„„„5 (1)8255功能介绍及其内部结构和引脚„„„„„„„„„„„„„„„„„„„„6

(2)8253功能介绍及其内部结构和引脚„„„„„„„„„„„„„„„„„„„„7

(3)8259功能介绍及其内部结构和引脚„„„„„„„„„„„„„„„„„„„„10

(4)protel原理图„„„„„„„„„11

1

3.软件程序设计„„„„„„„„„„„12

(1)主程序图„„„„„„„„„„„12 (2)电子时钟中断处理程序流图„„„13 (3)具体模块设计„„„„„„„„„14 (4)完整程序代码„„„„„„„„„16 四、结论与展望„„„„„„„„„„„„25 五、心得体会及建议„„„„„„„„„„„26 六、附录„„„„„„„„„„„„„„„„27 七、参考文献„„„„„„„„„„„„„„27

2

电子时钟设计报告

一、 设计要求

利用可编程定时\\计数器、中断控制器、可编程并行接口芯片和七段数码管设计电子时钟。

要求:1.显示内容时分秒(或分秒);2.每秒可更新一次显示;3.显示格式自行确定。

二、 设计目的

1. 掌握8255、8259、8253芯片使用方法和编程方法,通过本次课程设计,学以致用,进一步理解所学的相关芯片的原理、内部结构、使用方法等,学会相关芯片实际应用及编程,系统中采用8088微处理器完成了电子钟的小系统的独立设计。同时并了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后搞设计时逻辑更加清晰。 2.通过查阅资料,结合所学知识进行软、硬件的设计,初步掌握应用微机解决问题的步骤及方法,为以后结合专业从事微机应用设计奠定基础。

三、设计的具体实现

1.系统概述 (1)设计思路

该系统是一个简单的利用8253定时器、8255可并行通信接口和中断控制器8259设计的电子时钟系统,在系统中设一个启动键,启动键未按下时,显示初始化界面“HELLO”;当按下启动键时,8253定时器开始计时(8253的初值为10000,接1MHz的

3

脉冲,即当8253计满100时正好是1S),当计时计满100时,8259便产生一次中断,在LED显示器便显示系统预先设计好的初始值“02.59.55”便开始从秒位开始加1,当加到10S时,10s位加1,加到60S时分位加1,同时秒位清零。其中8259只需初始化ICW1,其功能是向8259表明IRx输入是电瓶触发方式还是上升沿触发方式,是单片8259还是多片8259。8259接收到信号后,产生中断信号送CPU处理。 (2)主要工作原理

该系统的主要工作原理为:在主程序中,要对各个用到的芯片进行初始化,在对8253进行初始化时,使它用方式2,每10ms 产生一次脉冲。在系统总8253的输入时钟频率为1MHZ,定时常数设为10000,则定时周期正好为10ms。由于8253的定时输出与8259的IR0相连,所以,系统中每隔10ms便由8253对8259产生一次中断请求,即每隔10ms执行一次中断处理程序。

本系统将与时间密切相关的两个模块即显示模块和计时模块放在中断处理程序中,这样,就保证了LED的数字每隔10ms得到一次刷新,从而保证了数字显示的稳定。中断处理程序完成计时功能要依靠两个方面,因为中断处理程序是每10ms执行一次,但计时并不是一10ms 为单位进行的,而是以秒为单位进行的,所以,计时功能的事项一方面要利用10ms这个基准时间单位,另一方面要借助于一个计数单元。计数单元的初始值为100,每进行一次中断,便使计数单元的内容减1,也就是说,每10ms作一次计数。每当计数单元从100减为0时,说明已经经过了10ms*100=1s时间,于是使秒位加1。秒位加1之后,又须判断由此而可能引起的进位,如有进位,则应实现正确的修改。修改

4

完以后,再将LED显示一遍。 2.硬件电路设计 电路设计:

CPU D7 D6 D5 . . D0 D7 PA7 D6 PA6 . PA5 . PA4 D0 PA3 6位七段LED数码管显示器 启动键 。 。 。 200 208 210 I I I 8259 CS A0 WR INTA RD IR7 8253 D7 CLK0 . GATE0 . OUT0 INTR INTA 高电平 1M 图1

该系统主要接口部件有:可并行通信接口8255一片,计数器/定时器8253一片,中断控制器8259一片,七段LED数码管显示器6个以及译码电路等。

(1)8255功能介绍及其内部结构和引脚

5

1.可并行通信接口8255的控制字是方式选择控制字,A口工作在方式0(即基本输入输出方式)下,并且为输出状态,B口工作在方式0下,为输出口,C口为输出口,其初始化为:

8255控制口地址为20bh A端口地址为208h B端口地址为209h C端口地址为20ah mov dx,20bh

mov al,10000001b out dx,al

2.8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种工作方式下工作: 方式0—基本输入/输出方式 方式1—选通输入/输出方式 方式2—双向选通输入/输出方式

8255引脚图如图3.2示,各引脚功能如下。 D7~D0——与CPU侧连接的八条双向数据线; WR(低电平有效)——写输入信号; RD(低电平有效)——读输入信号; CS(低电平有效)——片选输入信号; A0、A1——片内寄存器选择输入信号; PA7~PA0——A口外设双向数据线; PB7~PB0——B口外设双向数据线; PC7~PC0——C口外设双向数据线;

6

图2引脚图 RESET——复位输入信号

(2)8253功能介绍及其内部结构和引脚

1.做为计数器的计数器/定时器8253,在设置好计数初值(即定时常数)后,便开始减1计数,为0时,输出一个信号;控制字设置:BCD为设置为计数值为二进制格式,模式选择为模式2(即为分频器,当控制字写入后,输出段OUT变为高电平作为初始状态,当计数初值写入初值寄存器后,下一个时钟脉冲时,计数初值被写到计数执行部件,然后计数执行部件做减1计数,减到1时,输出端OUT变为低电平;完成一次计数过程后,输出端OUT又变为高电平,开始一个新的计数过程,由此可以周而复始的进行下去),读写指示位为先写低8位字节,在读写高8位字节,计数器选择计数器0。其中8253的计数初值为10000d,当接1MHZ的脉冲时,分频后的输出值为0.01S。8253的初始化为:

8253控制端口地址为203h 计数器0 端口地址为200h mov al , 34h mov dx , 203h

out dx , al mov dx , 200h mov ax , 10000d out dx , al mov al , ah out dx , al

2. 8253可编程定时/计数器是Intel公司生产的通用外围芯片之

7

一,有3个独立的十六位计数器,技术频率范围为0~2MHZ,它所有的技术方式和操作方式都通过编程控制。 8253的功能用途是:

(1)延时中断 (2)可编程频率发生器 (3)事件计数器 (4)二进倍频器 (5)实时时钟 (6)数字单稳 (7)复杂的电机控制器 8253有六种工作方式: (1)方式0:计数结束中断 (2)方式1:可编程频率发生器 (3)方式2:频率发生器 (4)方式3:方波频率发生器 (5)方式4:软件触发的选通信号 (6)方式5:硬件触发的选通信号 8253各引脚功能如下。 D7~D0——八条双向数据线; WR(低电平有效)——写输入信号; RD(低电平有效)——读输入信号; CS(低电平有效)——片选输入信号; A0、A1——片内寄存器地址输入信号;

CLK——计数输入,用于输入定时基准脉冲或计数脉冲; OUT——输出信号,以相应的电平指示计数的完成,或输出脉冲

8

图3 8253引脚图 波形;

GATE——选通输入(门控输入),用于启动或禁止计数器的操作,以使计数器和计测对象同步。

(3)8259功能介绍及其内部结构和引脚

1. 中断控制器8259的初始化为:

ICW1,用来指示ICW1的标志的D4=1,LTIM为0(即中断请求为边沿触发方式),系统只用一片8259,所以SNGL为1,因为初始化程序将用到ICW4,所以,IC4为为1;

ICW2设置中断类型码的初始化命令字,必须写到8259的奇地址端口中,ICW2是任选的,而ICW2一旦确定下来,8259的8个中断请求信号输入引脚IR0~IR7所对应的8个中断类型码也确定了;

ICW4方式控制初始化命令字,它也要求写入奇地址端口,不过ICW4并不总是需要写入的,只有在ICW1的第0位为1时,才有必要设置ICW4,其中,D7~D5三为总是为0,作为ICW4的标识码,SFNM位为0,BUF位为0,M/S位为0,AEOL位为0,D0为为1表示8259当前所在的系统为16位或32位系统;

OCW1中断屏蔽操作命令字,要求写入8259的奇地址端口; mov al,13h mov dx,210h

out dx,al ;ICW1初始化 mov al,08h mov dx,211h

out dx,al ;ICW2初始化 mov al,01h

9

out dx,al ;ICW4初始化 in al,dx and al,0feh

out dx,al

2. 中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片。它将中断源优先排队、辨别中断源以及提供中断矢量的电路集中于一片中。因此无需附加任何电路,只需对8259A编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。在MD微机系统中,8259芯片工作于单片方式。 8259引脚图如图3.3,各引脚功能如下。 D7~D0——八条双向数据线; WR(低电平有效)——写输入信号; RD(低电平有效)——读输入信号; CS(低电平有效)——片选输入信号; A0——地址信号; INT——中断请求信号;

INTA(低电平有效)——中断响应信号; CAS0~CAS2——级联信号,形成一条专用8259A总线,以便多片8259A的级联;

SP/EN——从编程/允许级联。在缓冲方式

图4 8259A引脚图

中,可用做输出信号以控制总线缓冲器的接收和发送。在非缓冲方式中,作为输入信号用于表示主片还是从片;

IR0~IR7——外部中断请求输入线。要求输入的中断请求信号是由低电平到高电平的上升沿(并保持高电平到CPU响应时为止)或

10

者是高电平。 (4)protel原理图

图5

11

3.软件程序设计 (1)主程序图

Y

开始 8255、8253、8259初始化 显示提示信息 判断启动键的状态是“1”? N 开中断并调用中断处理程序开始计时 调用显示程序显示系统计时结果 图6

12

(2)电子时钟中断处理程序流图

保护寄存器

计数单元减1

N 计满1秒了吗? Y

秒位加1

N

计满10秒了吗?

Y

10秒位加1

N 计满60秒了吗?

Y

分位加1 N 计满10分了吗? Y

10分位加1 N 计满60分了吗?

Y

时位加1 N 计满10小时了吗?

Y 10时位加1

图7

将字符转换为段码 输出段码 输出位码 位码右移1位 恢复寄存器 中断返回 13

(3)具体模块设计

本系统设计的电子钟以8088微处理器作为CPU,用8253做定时计数器产生时钟频率,8255做可编程并行接口显示时钟电路,8259做中断控制器产生中断。

程序由以下模块组成:系统共有4个功能模块,分别为,主控模块,显示模块,定时模块,中断模块。 1.主程序模块

主控模块是系的核心模块,对8253、8255A进行初始化,设置中断向量,主要由软件实现。它的主要功能是调用其它模块对系统工作进行协调。 实现代码如下: 主程序开始 ab: mov dx,20ah in al,dx and al,1

cmp al,01h ;判断时钟是否启动 jz intr1 ;若启动,则开中断 call aab ;没启动,则转显示 cli ;关中断 jmp ab intr1:

sti ;开中断 jmp ab ;检测时钟状态

14

2.显示模块

显示模块是将显示缓冲区的数值送到LED显示的功能模块,显示缓冲区是由六个字节构成,分别保存小时的高位和低位,分钟的高位和低位,秒钟的高位和低位。硬件上由六个LED构成,软件上由扫描显示的方法实现。 实现代码如下: 初始界面显示程序 aab:

lea bx,TABLE lea di,BUFDA

mov cl,11011111b next:

mov dx,208h mov al,cl

out dx,al mov al,[di+06] xlat

mov dx,209h out dx,al push cx mov cx,30h delay1:

loop delay1

;位码 ;输出位码 ;取段码 ;输出段码 ;软件延迟

15

pop cx

cmp cl,11111110b ;判断是否扫完一遍 jz aaaa ;显示完一遍则返回 inc di

ror cl,1 ;循环右移一位 jmp next aaaa: ret 3、定时模块

定时模块是为8259提供中断请求信号的。由一片8253实现,模式选择为模式2,其输出信号可作为8259的中断请求信号。系统中每隔10ms便由8253对8259产生一次中断请求,即每隔10ms执行一次中断处理程序。 4.中断处理模块

中断模块实现动态显示的,硬件为一片8259,由于中断请求信号为每秒一次,中断程序该为时间按秒增加,并显示,只要开中断,便可实现每秒显示时间增加一秒,从而达到动态显示的效果。

(4)完整程序代码如下: code segment

assume cs:code,ds:code start:

mov ax,cs mov ds,ax

16

mov bp,0064h ;设置计数初值 jmp start1 portbit equ 208h portseg equ 209h start1:

mov dx,20bh mov al,10000001b

out dx,al ;8255初始化

******************************************************** mov al,34h mov dx,203h

out dx,al ;8253写控制字 mov dx,200h mov ax,10000d out dx,al mov al,ah

out dx,al ;8253初始化

******************************************************** mov al,13h

;8259初始化

mov dx,210h

out dx,al ;ICW1初始化

17

mov al,08h mov dx,211h

out dx,al ;ICW2初始化 mov al,01h

out dx,al ;ICW4初始化 in al,dx and al,0feh

out dx,al ;OCW1打开非屏蔽位

******************************************************** push ds mov ax,0 mov ds,ax mov ax,offset intr mov ds:word ptr[4*8],ax mov ax,cs

mov ds:word ptr[4*8+2],ax ;设置中断向量 pop ds

***************************************************** ;主程序开始 ab: mov dx,20ah in al,dx and al,1

18

cmp al,01h ;判断时钟是否启动 jz intr1 ;若启动,则开中断 call aab ;没启动,则转显示 cli ;关中断 jmp ab intr1:

sti ;开中断 jmp ab ;检测时钟状态 ******************************************************** ;初始界面显示程序 aab:

lea bx,TABLE lea di,BUFDA

mov cl,11011111b ;位码 next:

mov dx,208h mov al,cl

out dx,al ;输出位码 mov al,[di+06] ;取段码 xlat

mov dx,209h ;输出段码

19

out dx,al push cx mov cx,30h delay1:

loop delay1 ;软件延迟 pop cx

cmp cl,11111110b ;判断是否扫完一遍 jz aaaa ;显示完一遍则返回 inc di

ror cl,1 ;循环右移一位 jmp next aaaa: ret

******************************************************** 中断处理程序 intr proc near push si

push ax ;保存寄存器的内容 dec bp ;计数单元减1 jnz display ;如未计到100,则直接转显示 mov di,offset BUFDA

mov bp,0064h ;计数单元设置初值 mov al,[di+05]

20

inc al ;秒位加1 mov [di+05],al

cmp al,0ah ;是否引起进位 jnz display ;无进位则转显示 mov al,00 mov [di+05],al mov al,[di+04]

inc al mov [di+04],al

cmp al,06 jnz display mov al,00 mov [di+04],al mov al,[di+03]

inc al mov [di+03],al

cmp al,0ah jnz display mov al,00 mov [di+03],al mov al,[di+02] inc al

有进位则本位清零,前一位加1 ;是否满60秒 ;否,则转显示 ;是则本位清零,而分位加1 ;是否引起分位有进位 ;否,则转显示 21

; mov [di+02],al ;有进位,则本位清零,前一位加1 cmp al,06 ;是否满60分 jnz display ;否,则转显示 mov al,00 mov [di+02],al mov al,[di+01]

inc al mov [di+01],al

cmp al,04 jnz display mov al,00 mov [di+01],al mov al,[di]

inc al mov [si],al

cmp al,02 jnz display mov al,00

mov [di],al display:

call displ mov dx,210h

有进位,则本位清零,前一位加1 ;是否引起时位有进位 ;否,则转显示 ;是则本位清零,前一位加1 ;是否满24小时 ;否,则转显示 ;是则本位清零 ;调用显示程序 22

; mov al,20h

out dx,al ;手动结束中断 pop ax pop si iret

intr endp 理程序调用的显示程序 displ proc near push dx push cx push bx push si

mov cx,0006 mov bx,offset TABLE mov si,offset BUFDA mov ah,11011111b displ1:mov dx,portbit mov al,0ffh

out dx,al push cx mov cx,0100h

wait1: loop wait1 mov dx,portseg mov al,[si]

xlat

;被中断处 ;显示位数 ;关显示 ;软件延时 ;转换

23

out dx,al ;输出段码 mov dx,portbit mov al,ah

out dx,al ;输出位码 mov cx,0100h

wait2: loop wait2 ;延时 pop cx ror ah,1 inc si loop displ1 pop si pop bx pop cx pop dx ret displ endp

******************************************************** TABLE:

db 3fh ;“0”的段码 db 06h ;“1”的段码 db 5bh ;“2”的段码 db 4fh ;“3”的段码 db 66h ;“4”的段码 db 6dh ;“5”的段码 db 7dh ;“6”的段码

24

db 07h ;“7”的段码 db 7fh ;“8”的段码 db 6fh ;“9”的段码 db 0h;

db 76h ;“H”的段码 db 79h ;“E”的段码 db 38h ;“L”的段码 db 38h ;“L”的段码 db 5ch ;“o”的段码

BUFDA:

db 0,2,5,9,5,5,11,12,13,14,15,16

code ends end start

四、结论与展望

本设计是基于《微机原理与接口技术》的基础知识来实现电子时钟的,首先应该画出硬件设计图,这个过程是基础,然后是流程图,这个是重点,流程图的完成在很大程度上等于程序的完成,然后是程序的编写。

在完成该设计的过程中使我的编程水平提高了一大步,使我认识到合作的可贵。这次设计涉及到很多芯片的应用,最大特点是软,硬件的结合,对动手能力的要求很大,使我大大增强了自己动手的能力,也对自己所学到的知识作一次巩固,也认识到在一定程度和科技水平上,硬件和软件是可以实现对等转化的,同时我也认识到学好这门课程在自己今后的学习和工作中都有很大

25

的作用,对自己以后的帮助也很大。这次课程设计给我的最大的体会就是做什么事情都要用脑去想,动手去做,这样任何困难都能克服。

五、心得体会及建议

为期一周的微机原理课程设计在紧张的期末复习期间匆忙的结束了,时间虽然很短暂,但是我却收获了不少。之前大半个学期的学习都是些理论知识,这次的课程设计才使我对微机原理的应用有了一次真正的感悟。

在本次设计的时候,我们已经学完了《微型计算机原理及应用》这本教材,所以对于微机原理的一些基础知识也有所掌握,但这离一个完整设计的距离还有很大的一步。这次课设的题目是简单电子钟课程设计,为了更好的完成这次课程设计,我去图书馆查阅了很多相关资料,并对课本进行了一次重新的学习,这一切让我对微机原理知识有了进一步的认识,并丰富了我的相关知识。我真的很庆幸我有机会着手设计这么一个题目,它所应用到的知识覆盖面很广,所以本次课程设计让我学习到了很多新的微机知识,并从中获益良多。

在刚开始设计的时候,我真的是一头雾水,不知道从何下手,于是就借来了以前学长的程序设计作个参考,我先将他们的程序设计看懂,然后再自己尝试着去设计。首先应该画出硬件设计图,这个过程是基础,然后是流程图,这个是重点,流程图的完成在很大程度上等于程序的完成,然后是程序的编写。在整个设计的过程中真的遇到了很多的困难,总有自己想不明白的问题,多亏了王老师的批评指正和我组热心的同学们对我的关心帮助,让我

26

学到了正确的知识。在这里,我要特别感谢你们!

这次设计让我收获了很多,既是对自己所学到的知识作一个肯定,也是对《微型计算机原理及应用》的复习,更主要的是通过设计增强了自己动手的能力。在这次课程设计中涉及到很多芯片的应用,最大特点是软,硬件的结合,对动手能里的要求很大,设计完成后我的编程水平提高了一大步。这次设计,更增加了我对微机原理的兴趣,为我将来的学习明确了目标。

令我遗憾的是,由于时间的限制以及自身能力的不足,我这次的设计方案没有任何的创新。虽然我在设计的时候有很多想法想去尝试,并且参阅了大量的专业资料,然而最后都因为自身学识的不足而放弃,很遗憾。但是,在这个设计的期间激发了我很多学习的乐趣,并准备在以后的课余时间多学习相关知识,多作这方面的研究,补全这次设计不足的遗憾。

最后,我认真地完成了课程设计的论文。希望这次能取得好成绩!

六、附录

元件清单: 元件 CPU 8253定时器 8259中断控制器

型号 8088 ———— ———— 数量 1 1 1 27

8255并口 七段译码显示管 译码器 非门 电阻 开关键 ———— DPY-7-SEG 74LS138 _________ RES2 SW-PB 表1

8253定时器:用于产生秒脉冲,其输出信号可作为中断请示信号送IRQ2。

8255并口:用做接口芯片。 8259中断控制器:用于产生中断。 LED:六个LED用于显示时:分:秒值。

1 6 1 2 1 1 七、参考文献

《微机原理实验与课程设计指导书》.陆红伟编.中国电力出版社.2006年

《微型计算机原理及应用》.吕淑萍等.哈尔滨工程大学出版社.2004年

《微型计算机技术及应用》.徐晨等.清华大学出版社.2005

28

因篇幅问题不能全部显示,请点此查看更多更全内容