微机接口课程设计 电子时钟设计报告

17. January 2016 笔记 0

1、         设计题目:电子时钟设计 

2、设计内容和要求

利用8253定时器设计一个具有时、分、秒显示的电子时钟,并定义一个启动键,当按下该键时电子时钟从当前设定值开始走时。 

3、设计任务和要求:

3.1.1  接口设计、连接和调试2

该系统选择8253的CS接2f0h,Gate1接开关高电平,CLK1接1M,OUT1接8259的IR0, A0接地址总线的A0,A1接地址总线的A1。8255的CS接2f8,A0接地址总线的A0,A1接地址总线的A1,PA0-PA5接LED显示管的位码,PB0-PB7接LED显示管的段码,PC0接一个开关,作为启动键。8259的CS接300,AO接地址总线的A0,INTA接控制总线的INTA,INTR接控制总线的INTR.(设计图见下面)

3.1.2程序连线图:

3.2  程序设计、调试

3.2.1 程序框图

3.2.2 程序代码及注释

程序源码:

data segment

TABLE:

db        0c0h                      ;”0″的段码

db        0f9h                      ;”1″的段码

db        0a4h                      ;”2″的段码

db        0b0h                      ;”3″的段码

db        99h                       ;”4″的段码

db        92h                       ;”5″的段码

db        82h                       ;”6″的段码

db        0f8h                      ;”7″的段码

db        80h                       ;”8″的段码

db        90h                       ;”9″的段码

db            0ffh                   ;不显示

db            89h                   ;”H”的段码

db            86h                   ;”E”的段码

db            0c7h                  ;”L”的段码

db            0c7h                  ;”L”的段码

db            0c0h                  ;”o”的段码

db            0ffh                   ;不显示

 

BUFDA:

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

data ends

code segment   ;代码段定义

assume  cs:code,ds:data   ;代码段声明

start:

mov ax,data

mov ds,ax

mov bp,0064h     ;设置计数初值100

jmp start1

portbit  equ 2f8h  ;LED位地址

portseg  equ 2f9h  ;LED段地址

start1:

mov dx,2fbh

mov al,10000001b

out dx,al          ;8255初始化完成

mov al,01110100b

mov dx,2f3h

out dx,al          ;8253初始化完成

mov dx,2f1h

mov ax,10000d

out dx,al

mov al,ah

out dx,al          ;8253写控制字完成,10000赋值给ax

mov al,13h            ;8259初始化开始

mov dx,300h

out dx,al          ;ICW1初始化

mov al,08h

mov dx,301h

out dx,al          ;ICW2初始化

mov al,01h

out dx,al          ;ICW4初始化

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,2fah                      ;主程序开始

in  al,dx

and al,1

cmp al,01h                            ;判断时钟是否启动

jz  intr1                              ;若启动,则开中断

call showhello                          ;没启动,则转显示

cli                                    ;关中断

jmp  ab

intr1:

sti                                     ;开中断

jmp ab                                 ;检测时钟状态

;———————————————————————

showhello:                           ;初始界面显示程序

lea  bx,TABLE

lea  di,BUFDA

mov  cl,00100000b             ;位码

next:

mov  dx,2f8h

mov  al,cl

out  dx,al                        ;输出位码

mov  al,[di+06]                   ;取段码

xlat                              ;把al+bl放到al

mov  dx,2f9h                     ;输出段码,B口地址

out  dx,al

push cx

mov  cx,30h

delay1:

loop delay1                          ;软件延迟

pop  cx

cmp  cl,00000001b                   ;判断是否扫完一遍

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]

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                               ;有进位则本位清零,前一位加1

mov  [di+04],al

cmp  al,06                           ;是否满60秒

jnz  display                          ;否,则转显示

mov  al,00

mov  [di+04],al

mov  al,[di+03]

inc  al                               ;是则本位清零,而分位加1

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                    ; 有进位,则本位清零,前一位加1

cmp  al,06                             ;是否满60分

jnz  display                            ;否,则转显示

mov  al,00

mov  [di+02],al

mov  al,[di+01]

inc  al                           ;有进位,则本位清零,前一位加1

mov  [di+01],al

;——————————————————————–

mov ah,[di]                                   ;时钟小时位判断程序

cmp ah,2

jb  xyg                                ;小于2 跳转

cmp al,4                       ;首位是2时才判断第二位是否等于4

jnz  display

mov al,0

mov [di+1],al

mov [di],al

jmp display

;——————————————————————–

xyg:

cmp  al,0ah                       ;是否引起时位有进位   第二位

jnz  display                      ;否,则转显示

mov  al,00

mov   [di+01],al

mov al,[di]

inc al

mov [di],al

display:

call displ                              ;调用显示程序

mov  dx,300h

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,00100000b

displ1:mov  dx,portbit                          ;  //portbit equ 2f8H

mov  al,00h

out  dx,al                              ;关显示

push cx

mov  cx,0100h

wait1: loop wait1                            ;软件延时

mov  dx,portseg                     ; //portseg equ 2f9H

mov  al,[si]

xlat                                ;转换,查码

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

code ends

end start

 

3.3本次课程设计的目的和意义。

通过一个学期对《微机原理及接口技术》学习,掌握的知识还停留在理论的上。但是这是一门实践性较强的课程,让学生在学完该课程之后,进行一次课程设计,将课堂所学的知识和实践有机结合起来,初步掌握计算机应用系统设计的步骤和接口设计的方法,提高分析和解决实际问题的能力。通过设计实践,培养学生查阅专业资料,工具书或参考书,了解有关工业标准,掌握现代设计手段和软件工具,并能以图纸和说明书表达设计思想和结果的能力。

3.4 编译过程

链接好电路图,在电脑中编译->全速运行后,程序开始运行,默认状态下,开关是向上,LED数码管显示HELLO字样,把最右边的开关向下拨动,程序开始运行,默认显示的数值是23:59:55秒,然后程序每秒加一,五秒钟后变成00:00:00,然后继续开始加一。

3.5 程序设计

在该系统中设有一个启动键,启动键未按下时,显示初始化界面“HELLO”;当按下启动键时,8253定时器开始计时(8253的初值为10000,接1MHz的脉冲,即当8253计满100时正好是1S),当计时计满100时,8259便产生一次中断,在LED显示器便显示系统预先设计好的初始值“23.59.55”便开始从秒位开始加1,当加到10S时,10s位加1,加到60S时分位加1,同时秒位清零,加到24点时全部清零。在主程序中,要对各个用到的芯片进行初始化,在对8253进行初始化时,使它用方式2,每10ms 产生一次脉冲。在系统总8253的输入时钟频率为1MHZ,定时常数设为10000,则定时周期正好为10ms。由于8253的定时输出与8259的IR0相连,所以,系统中每隔10ms便由8253对8259产生一次中断请求,每隔10ms执行一次中断处理程序。由于8253的读/写操作对系统时钟没有特殊的要求,因此它几乎可以应用与由任何一种微处理器组成的系统中,可作为可编程的方波频率发生器、分频器、实时时钟、事件计数器和单脉冲发生器等。

3.6 程序原理及实现过程

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

刚开始设计系统的时候,进展很慢,第一天学习了LED数码管的显示,懂得了共阳极和共阴极以及段码和位码的显示,位码接A口,段码接B口,所有数码管的8个段a-dp同一个I/O端口相连,每个COM引脚与另一个I/O端口相连。CPU向PA口送段码值时,所有的数码管接收到相同的段码。但究竟哪个数码管会显示图形,取决于PB口对COM端的控制。第二天设计了电路图,手绘图如下,正确连接了电路,可并行通信接口8255、计数器/定时器8253及中断控制器8259的编程原理和7段LED数码管显示器连接到了一起,用程序控制他们真的是一件很酷的事情。中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片。它将中断源优先排队、辨别中断源以及提供中断矢量的电路集中于一片中。因此无需附加任何电路,只需对8259A编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。在MD微机系统中,8259芯片工作于单片方式。

第三天写程序,主程序位初始化8255,8253,8259,然后检测开关的状态,当开关向上时候,处于低电平,显示HELLO,最后一位不显示,共阳极0ffh.当开关处于高电平时候,产生中断信号,然后显示秒表。

3.7 设计总结

通过本次课程设计,加深了我对课本知识的理解,使我在课堂中学到的东西应用到实践当中,掌握8255、8259、8253等芯片使用方法和编程方法,通过本次课程设计,学以致用,进一步理解所学的相关芯片的原理、内部结构、使用方法等,学会相关芯片实际应用及编程,系统中采用8086微处理器完成了电子秒表系统的独立设计。同时并了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后搞设计时逻辑更加清晰。我明白了理论与实践相结合的重要性。进一步的熟悉了可并行通信接口8255、计数器/定时器8253及中断控制器8259的编程原理和7段LED数码管显示器的工作原理,以及把它们,结合到一块一起使用的方法。为以后独立的设计系统提供了丰富的实践经验。

4、工作安排:(设计进度及完成情况)

第一阶段:根据题目要求查阅资料构思设计方案、进行接口电路原理图设计和程序设计以及其它准备工作。

第二阶段:对第一阶段完成的设计内容进行详细的检查或修改无错后,按照接口电路原理图的设计自行在实验系统上进行接线和连接,确保无错后再进行程序的输入和调试,为便于调试和查错,程序最好采用模块化结构,一部分一部分的调试,通过反复的调试或修改直到达到设计要求为止。

第三阶段:按照3中的内容和要求撰写课程设计说明书。

 

日  期 内               容
20160111 查阅资料,构思设计方案,学习LED显示器的使用方法。
20160113 设计电路图,以及测试元器件是否损坏。
20160115 编程程序代码以及调试。
20160117 撰写课程设计说明书。

5、实验参考书

微机原理与接口技术

韩慧开放实验指导书4-22

微机原理及接口技术A模块实验指导

电子时钟程序设计报告


Leave a Reply

Your email address will not be published. Required fields are marked *