logo资料库

微机原理课程设计-电子时钟.doc

第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
资料共10页,剩余部分请下载后查看
一、设计的目的要求 学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识 对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。 通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解, 使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得 到全面提高。 该系统的要求利用 8253 定时器设计一个具有时、分、秒显示的电子时钟, 并定义一个启动键,当按下该键时时钟从当前设定值(可在显示缓冲区中予 置)开始走时。 二、系统的主要功能 该系统是一个简单的利用 8253 定时器、8255 可并行通信接口和中断控制 器 8259 设计的电子时钟系统,在该系统中设有一个启动键,启动键未按下时, 显示初始化界面“HELLO”;当按下启动键时,8253 定时器开始计时(8253 的初值为 10000,接 1MHz 的脉冲,即当 8253 计满 100 时正好是 1S),当计时 计满 100 时,8259 便产生一次中断,在 LED 显示器便显示系统预先设计好的初 始值“02.59.55”便开始从秒位开始加 1,当加到 10S 时,10s 位加 1,加到 60S 时分位加 1,同时秒位清零。 该系统主要接口部件有:可并行通信接口 8255 一片,计数器/定时器 8253 一片,中断控制器 8259 一片,七段 LED 数码管显示器 6 个以及译码电路等。 其中各个部件的初始化如下: 1、可并行通信接口 8255 的控制字是方式选择控制字,A 口工作在方式 0 (即基本输入输出方式)下,并且为输出状态,B 口工作在方式 0 下,为输出 口,C 口为输出口,其初始化为: 8255 控制口地址为 20bh A 端口地址为 208h B 端口地址为 209h C 端口地址为 20ah mov dx,20bh mov al,10000001b 1
out dx,al 2、做为计数器的计数器/定时器 8253,在设置好计数初值(即定时常数) 后,便开始减 1 计数,为 0 时,输出一个信号;控制字设置:BCD 为设置为计 数值为二进制格式,模式选择为模式 2(即为分频器,当控制字写入后,输出 段 OUT 变为高电平作为初始状态,当计数初值写入初值寄存器后,下一个时钟 脉冲时,计数初值被写到计数执行部件,然后计数执行部件做减 1 计数,减到 1 时,输出端 OUT 变为低电平;完成一次计数过程后,输出端 OUT 又变为高 电平,开始一个新的计数过程,由此可以周而复始的进行下去),读写指示位 为先写低 8 位字节,在读写高 8 位字节,计数器选择计数器 0。其中 8253 的计 数初值为 10000d,当接 1MHZ 的脉冲时,分频后的输出值为 0.01S。8253 的初 始化为: dx , al 8253 控制端口地址为 203h 计数器 0 端口地址为 200h mov al , 34h mov dx , 203h out mov dx , 200h mov ax , 10000d out dx , al mov al , ah out dx , al 3、中断控制器 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 2
位为 0,AEOL 位为 0,D0 为为 1 表示 8259 当前所在的系统为 16 位或 32 位系 统; ;ICW1 初始化 OCW1 中断屏蔽操作命令字,要求写入 8259 的奇地址端口; mov al,13h mov dx,210h out dx,al mov al,08h mov dx,211h out dx,al mov al,01h dx,al out in al,dx al,0feh and out dx,al 该系统的主要工作原理为:在主程序中,要对各个用到的芯片进行初始 ;ICW2 初始化 ;ICW4 初始化 化,在对 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 之 后,又须判断由此而可能引起的进位,如有进位,则应实现正确的修改。修改 完以后,再将 LED 显示一遍。 三、系统设计 1、接口电路设计 3
CPU D7 D6 D5 . . D0 200 I 207 。 。 。 210 I 217 208 I 20F 译码器 PA7 D7 PA6 D6 PA5 . PA4 . PA3 D0 PA2 WR PA1 RD PA0 CS PB7 A1 A0 PB6 RESET PB5 PC7 PB4 PB3 PC6 PB2 . PB1 . PC0 PB0 6 位七段 LED 数码管显示器 启动键 8259 A0 CS INTA WR IR7 RD IR6 D7 IR5 D6 . . . . IR0 D0 CAS0 INT CAS1 SP/EN GND CAS2 D7 . . D0 8253 CLK0 OUT0 GATE0 CLK1 OUT1 GATE1 CLK2 OUT2 GATE2 CS 2、 程序设计 主 程序框图 INTR INTA 高电平 1M 开始 8255、8253、8259 初始化 显示提示信息 Y 判断启动键的状 态是“1”? N 开中断并调用中断 处理程序开始计时 调用显示程序显示 系统计时结果 4 电子时钟中断处理程序流程图
将字符转换为段码 输出段码 输出位码 位码右移 1 位 恢复寄存器 中断返回 保护寄存器 计数单元减 1 计满 1 秒了吗? Y 秒位加 1 计满 10 秒了吗? Y Y 10 秒位加 1 计满 60 秒了 分位加 1 计满 10 分了 Y 10 分位加 1 计满 60 分了 Y 时位加 1 计满 10 小时了吗? Y 10 时位加 1 N N N N N N 四、源程序清单: 5
code segment assume cs:code,ds:code start: mov ax,cs mov ds,ax mov bp,0064h jmp start1 portbit equ 208h portseg equ 209h start1: ;设置计数初值 ;8255 初始化 ;8253 初始化 ;8259 初始化 ;ICW1 初始化 ;8253 写控制字 mov dx,20bh mov al,10000001b out dx,al ************************************************************ mov al,34h mov dx,203h out dx,al mov dx,200h mov ax,10000d out dx,al mov al,ah out dx,al ************************************************************ mov al,13h mov dx,210h out dx,al mov al,08h mov dx,211h out dx,al mov al,01h out dx,al in al,dx and al,0feh out dx,al ************************************************************ 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 ;OCW1 打开非屏蔽位 ;ICW2 初始化 ;ICW4 初始化 in al,dx and al,1 6
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 pop cx cmp cl,11111110b jz aaaa inc di ror cl,1 jmp next ;位码 ;输出位码 ;取段码 ;输出段码 ;软件延迟 ;判断是否扫完一遍 ;显示完一遍则返回 ;循环右移一位 cmp al,01h jz intr1 call aab cli jmp ab intr1: sti jmp ab ;判断时钟是否启动 ;若启动,则开中断 ;没启动,则转显示 ;关中断 ;开中断 ;检测时钟状态 ************************************************************ ;初始界面显示程序 aab: aaaa: ret ************************************************************ ;中断处理程序 intr proc near push si push ax dec bp jnz display mov di,offset BUFDA mov bp,0064h mov al,[di+05] inc al mov [di+05],al cmp al,0ah jnz display ;保存寄存器的内容 ;计数单元减 1 ;如未计到 100,则直接转显示 ;计数单元设置初值 ;秒位加 1 ;是否引起进位 ;无进位则转显示 7
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 mov [di+02],al cmp al,06 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 call displ mov dx,210h mov al,20h out dx,al pop ax pop si iret display: intr endp displ proc near push dx ;有进位则本位清零,前一位加 1 ;是否满 60 秒 ;否,则转显示 ;是则本位清零,而分位加 1 ;是否引起分位有进位 ;否,则转显示 ;有进位,则本位清零,前一位加 1 ;是否满 60 分 ;否,则转显示 ;有进位,则本位清零,前一位加 1 ;是否引起时位有进位 ;否,则转显示 ;是则本位清零,前一位加 1 ;是否满 24 小时 ;否,则转显示 ;是则本位清零 ;调用显示程序 ;手动结束中断 ;被中断处理程序调用的显示程序 8
分享到:
收藏