合肥工业大学
微机原理与接口技术课程设计报告
课题名称:数据采集仪的日历时钟接口电路的设计学生班级:
姓名学号:
指导教师:
完成时间:
成绩评定:
摘要:本设计是以8086CPU为控制核心,本设计以微机原理与接口技术为基础,以8086CPU为核心,利用INTER 8253可编程定时/计数器,通过引入时钟发生器产生标准时钟进行精准定时,经定时器产生中断源,采用可编程中断控制器8259A 进行中断扩展,用可屏蔽中断方式进行时间的采集,以可编程并行I/O接口芯片8255A扩展接口,驱动数码管进行时间显示。
关键词:8086CPU、8253、定时、中断8259A、8255A、数码管
正文:近年来随着科技的飞速发展,微机原理的应用正在不断深入,计算机系统由计算机硬件和软件两部分组成。硬件包括中央处理机、存储器和外部设备。中央处理机是计算机的核心部部件,由运算器的控制器两部分组成,主要功能是解释指令、控制指令执行、控制和管理机器运行状态,以及实时处理中央处理机内部和外部出现和各种应急事件;存储器分为主存储器和辅助存储器,主存储器的主要功能是存储信息和与中央处理机直接交换信息;辅助存储器包括磁盘机、磁带机和光盘机等,通常只与主存储器交换信息;外部设备包括输入和输出设备、转换设备、终端设备等,如键盘、打印机、绘图仪和鼠标器等。软件通常分为两大类:系统软件和应用软件。系统软件最靠近硬件层,是计算机的基础软件,如操作系统、高级语言处理程序等。系统软件是计算机厂家预先设计好的。操作系统主要用于组织管理计算机系统的所有便件和软件资源,使之协调一致、高效地运行;高级语言处理程序包括编译程序和解释程序等。编译程序能将高级语言编写的源程序翻译成计算机执行的目标程序,解释程序是边解释边执行源程序。应用软件处于计算机系统的最外层,是按照某种特定的应用而编写的软件。
本设计是根据利用数据采集仪来显示日历,它用到8253可编程定时/计数器产生时钟脉冲,根据时钟脉冲的边沿触发来使8259可编程中断控制器产生中断,再以可编程并行I/O接口芯片8255A扩展接口,驱动数码管进行时间显示,进而在数据采集仪上进行显示。
本设计的基本要求:根据题目要求编写实验源程序;再根据所编写的程序连接硬件电路图,本设计要达到的目的:1、软件程序能够无错误的运行;2、硬件电路有显示,能够自动产生年、月、日、时、分、秒等时间信息;3、具有功工作稳定可靠、外围接口简单。
一、总体设计思路
本设计以微机原理与接口技术为基础,以8086CPU 为核心,利用INTER 8253可编程定时/计数器,通过引入时钟发生器产生标准时钟进行精准定时;经定时器产生中断源,采用可编程中断控制器8259A 进行中断扩展,用可屏蔽中断方式进行时间的采集;以可编程并行I/O 接口芯片8255A 扩展接口,驱动数码管进行时间显示,共分为四个主要模块,8086中央处理器,8253时间定时器,8259中断发生器,8255数码管显示器。各模块之间关系如下图所示:
图1.1 系统整体结构
键盘输入,时钟初始化
主控制器 8086
8253定时
8259中断 数码管显示
8255初始
化
个人PC
主程序流程图如下:
开始
系统初始化
时钟定时
秒+1
数码管显示
执行
图1.2主程序流程图
(备注:详细流程图见附录二。)
二、设计方案论证
1.本课程设计在驱动数码管显示的过程中,我们选择了两种方案。
方案一:用8255的PA口和PB口接数码管的字码端和位码端驱动其显示时间,通过对它进行编程,芯片可工作于不同的工作方式下。8255A芯片有三种工作方式,在本课程设计中,通过控制字,使其工作在方式0下,通过PA口给数码管送字码,让其显示世世纪、年、月、日、时、分、秒,同时通过PB口给数码管送位码,并不断的扫描8个数码管的片选段,让其显示连续的时间,但是本课题要求实现的功能中需要显示世纪,年、月、日,时、分、秒。同时需要键盘设置时间初值,而8255的端口有限,同时在键盘的扫描过程中,要有防抖的功能,这就大大加大的软件编程的难度,可实现性差。
方案二:8279A芯片是一种通用的可编程序的键盘/显示接口器件,单个芯片就能完成键盘输入和LED显示控制两种功能。可与任何8位机接口。8279A芯片包括键盘输入和显示输出两个部分。若采用8279作为键盘/显示器接口,则可以实现对键盘、显示器自动扫描,8279主要是管理键盘输入和显示器输出的。8279
可编程键盘显示器接口芯片具有动态显示驱动电路简单、不占用CPU 的时间、可自动进行键盘扫描、与计算机接口方便、编程容易、系统灵活等特点.所以用8279来驱动显示更容易实现。
基于上述论证,本次设计采用方案二。
2.在本次课题的审题中,我们用了两种方案。
方案一:原先我们的思路是把数据采集仪的系统时间提取出来放在显示模块上显示,如果按这样的思路,我们在制作的过程中只需用到8255这块芯片用来驱动数码管显示就行,可是我们在实际的制作过程中遇到了无法解决的困难:在利用DOS系统功能调用(功能号位2AH、2CH)的时候出现了麻烦,在软件调试的时候采用单步调试,当调试的2A号去系统时间时,PC机自动重启,重新试了几次,结果一样,后来经推测,可能是星研环境不支持该功能号调用。
方案二:题目要求:能够自动产生世纪、年、月、日、时、分、秒等时间信息,具有功耗低、精度高、工作稳定可靠、外围接口简单等优点。我们着眼于产生时间的功能上,再次把该题定位于电子钟类型的时钟发生器。重新确定思路,选定器件,经过两个星期的团结合作,基本完成任务。
在本次课题的审定上,我们选择了方案二。
三、软件设计思路
在数据采集仪的日历时钟的设计过程中,我们需要用到的电子芯片主要有8255和8253、8259。他们的工作原理和功能如下所述。
(一)8253芯片
Intel8253芯片是一种可编程定时器/计数器,它可以利用硬件电路和中断方法控制定时,定时时间和范围完全由软件来确定和改变。在8253芯片内部具有3个独立的16位计数器通道,通过对它进行编程,最高计数频率能达到2MHz。8253还适用于许多其它的场合,如用作可编程方法频率产生器、分频率、程控单脉冲发生器等。在本课程设计中,8253芯片的通道0工作在方式2下,外接1M的时钟频率 ,同时与通道1级联,实现两节分频,通过软件编程使通道1工作在方式3下,产生周期为1S的方波,触发8259的可屏蔽中断IR0,进行时钟秒的+1。8253初始化编程如下:
MOV DX,COM_ADDR ;8253的控制端口
MOV AL,00110101B ;计数器T0设置在模式2状态,BCD码计数
OUT DX,AL
MOV DX,T0_ADDR
MOV AL,00H
OUT DX,AL ;CLK0/1000
MOV AL,10H
OUT DX,AL
MOV DX,COM_ADDR ;计数器T1为模式3状态,输出方波,BCD码计数MOV AL,01110111B
OUT DX,AL
MOV DX,T1_ADDR
MOV AL,00H
OUT DX,AL
MOV AL,20H
OUT DX,AL
(二)8255A芯片
8255A是一种通用的可编程并行I/O接口芯片,它是为Intel系列微处理器设计的配套电路,也可用于其它微处理器系统连接。通过8255A芯片,CPU可直接同外设相连接,其负责CPU和外设之间数据传送。通过对它进行编程,芯片可工作于不同的工作方式下。8255A芯片有三种工作方式,在本课程设计中,通过控制字,使其工作在方式0下,通过PA口给数码管送字码,让其显示世世纪、年、月、日、时、分、秒,同时通过PB口给数码管送位码,并不断的扫描8个数码管的片选段,在人眼的分辨率外,看到的是一个连续的显示过程。
8255A初始化编程如下:
LED_TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;共阴数码管0-9的
代码值
MOV DX, COM_ADD
MOV AL,10000000B ; PA PB PC为基本输出方式
OUT DX,AL
转化为可显示的16进制数的子程序:
ToChar PROC NEAR
ADD AL,'0'
CMP AL,'9'
JBE ToChar1
ADD AL,07H
ToChar1: RET
ToChar ENDP
(三)8259A芯片
8259A是专门为了对8085A和8086/8088进行中断控制而设计的芯片,它是可以用程序控制的中断控制器。单个的8259A能管理8级向量优先级中断。在不增加其他电路的情况下,最多可以级联成64级的向量优先级中断系统。8259A 有多种工作方式,能用于各种系统。各种工作方式的设定是在初始化时通过软件进行的。在总线控制器的控制下,8259A芯片可以处于编程状态和操作状态.编程状态是CPU使用IN或OUT指令对8259A芯片进行初始化编程的状态循环等待中断。
8259初始化编程:
Init8259 PROC NEAR
MOV DX,IO8259_0
MOV AL,13H
OUT DX,AL
MOV DX,IO8259_1
MOV AL,80H
OUT DX,AL
MOV AL,09H
OUT DX,AL
MOV AL,FE ;屏蔽寄存器
OUT DX,AL
RET
Init8259 ENDP
中断服务程序:
INT_0: PUSH DX
PUSH AX
CALL ClearInt
JC INT_0_0
MOV DX,RD_IO8259
IN AL,DX
IN AL,DX ;判断由哪个中断源引起的中断
MOV AL,Counter
ADD AL,1
DAA
MOV Counter,AL
MOV ReDisplayFlag,1
INT_0_0: MOV DX,IO8259_0
MOV AL,20H
OUT DX,AL
POP AX
POP DX
IRET ;中断结束
四、硬件设计思路
本次课程设计硬件全部由星研实验板STAR-ES598PCI提供。为确保连线正确,必须熟悉实验板上各个模块的线路连接,地址总线、数据总线及片选端等的线路结构;同时要对自己设计的电路有清晰的认识,脑海中有个整体的来龙去脉,这样在布线时才可做到游刃有余。
具体各模块连线如下所示:
1、8253连线说明:
C5区:CS、A0、A1 ——A3区:CS5、A0、A1
C5区:CLK0 ——B2区:2M
C5区:OUT0 ——C5区:CLK1
C5区:OUT1 ——B3区:IR0
——C1区的VCC
C5区:GATE0、
GATE1
2、8259连线说明:
B3区:CS、A0 ——A3区:CS1、A0
B3区:INT、INTA ——ES8688:INTR、INTA
B3区:IR0 ——C5区:OUT1
E5区:CS、A0 ——A3区:CS5、A0
E5区:CLK ——B2区:2M
E5区:A、B、C、D ——G5区:A、B、C、D
3、8279连线说明:
E5区:CS、A0 ——A3区:CS5、A0
E5区:CLK ——B2区:2M
E5区:A、B、C、D ——G5区:A、B、C、
D
(备注:详细硬件电路图见附录一)
五、功能模块分析
该模块设计思路是将世纪年月日时分秒分别保存至变量:century, year, month,day,hour, minute,second中,每个数字对应与一个字节,通过8253定时我们在8255的portA0口检测到低电平时调用INCSCD子程序,子程序中我们将更新century,year,month,day,hour,minute,second内的值,使秒加1,然后调用displaytime将century,year,month,day,hour,minute,second内的数据转化为十六进制并显示到数码管上。
六、课程设计总结
本次课程设计在制作过程中,我们从审题到确定思路、组员分工,再到设计进程安排、查找资料,最后到着手软硬件调试。我们组员都配合的也比较不错,并在规定时间内按质、按量完成任务。但是这之间我们也遇到许多的困难,但是经过努力都一一解决。
通过这次课程设计,加强了我们的动手、思考和分析解决问题的能力。在整个设计过程中,我们按照老师给出的总体方案设计了一套电路原理和电路连接图。通过查阅各方面资料我们编写了程序代码,并通过了调试,最终证实了该系统方案确实可行。在设计过程中,了解了很多元器件的功能,并且对于其在电路中的使用有了更多的认识。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做,难免会遇到过各种各样的问题,同时也在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。这次课程设计使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只
有把所学的理论知识与实践相结合起来,才能够真正掌握理论知识,从而提高自己的实际动手能力和独立思考的能力以及团队合作精神。
在此我们真诚的感谢王敬生老师对本组的悉心指导,在王老师的帮助下,我们克服了重重困难,并最终取得理想的成果。
参考文献:
[1]《微型计算机原理及接口技术》吴秀清、周荷琴著中国科技大学出版社
[2]《微型计算机原理及接口技术》实验指导书王敬生、刘伟著合肥学院
[3]《16-32位微型计算机技术及应用》清华大学出版社戴梅萼史嘉权编著
[4]《汇编语言程序设计》南京大学出版社姚君遗编著
[5]《汇编语言程序设计教程》清华大学出版社杨记文编
附录:附录一:硬件电路图
A 1
B 2C
3
E 14E 25E 36
Y 015
Y 114Y 213Y 312Y 411Y 510Y 69Y 7
7
74L S 138R D 32A D 016L O C /W R 29A D 115Q S 0A L E 25A D 214Q S 1I N A
24
A D 313A D 412S 0,D E N 26A D 511S 1D T /R 27A D 610S 2M /I O
28
A D 79A D 88R Q /G T 031A D 97R Q /G T 1
30
A D 106A D 115A D 124N M I 17A D 133I N T R
18
A D 142A D 15
39
M N /M X 33T E S T 23A 16/S 338R E A D Y
22
A 17/S 437A 18/S 536A 19/S 6
35
C L K 19R E S E T
21
B H E /S 7
348086C P U
8286
数据总线收发器地址锁存器8282
储存器D A T A
地址总线
数据总线
D 011D 110D 29D 38D 47D 56D 65D 74A 027C S 1R D 3W R 2S P /
E N 16I N T 17I N T A
26
I R 018I R 119I R 220I R 321I R 422I R 523I R 624I R 7
25
C A S 012C A S 113C A S 2
15
8259
A 0A 3A 4
A 1A 5A 61
2
3A
74A L S 03
A 2
A 7D 08O U T 010D 17G A T E 011D 26C L K 09D 35D 44D 53D 62O U T 113D 7
1G A T E 114C L K 115
C S 21R
D 22W R
23O U T 217A 019G A T E 216A 120C L K 2
18
8253D 034D 133D 232D 331D 430D 529D 628D 727P A 04P A 13P A 22P A 31P A 440P A 539P A 638P A 737P B 018P B 119P B 220P B 321P B 422P B 523P B 624P B 7
25P C 014P C 115P C 216P C 317P C 413P C 512P C 611P C 7
10R D 5W R 36A 09A 18R E S E T 35C S
6
8255
a b f c g d e D P Y 1234567a b
c d e f g
8
d p
d p a b f c g d
e D P Y 1234567a b
c d e f g
8
d p
d p a b f c g d
e D P Y 1234567a b
c d e f g
8
d p
d p A 1B 2C 3
E 14E 25E 36Y 015Y 114Y 213Y 312Y 411Y 510Y 69Y 7
7
74L S 138A 0A 3A 4123A 123A
12
3A A 9A 8
A 6
A 7A 5A 2A 1M /I O
F /C 13R E A D Y 5E F I 14C L K 8C S Y N C 1P C L K 2A S Y N C
15
O S C 12
R E S E T
10
X 1
17X 2
16
R D Y 14R D Y 26A E N 13R E S
11
A E N 2
7
8284
V C C V C C
1M
C R Y S T A L R 1
V C C Y 0/R D /R D /R D /R D /W R /W R /W R /W R A 1A 2
附录二:软件流程图
附录三:部分源程序:
************************************************************************************************************************************************************** .MODEL TINY
PCIBAR1 EQU 14H ;PCI9052 I/O 基地址(用于访问局部配置寄存器) PCIBAR3 EQU 1CH ;8位I/O 空间基地址(它就是实验仪的基地址,也为DMA & 32 BIT RAM 板卡上的8237提供基地址)
PCIIPR EQU 3CH ;IRQ 号 INTCSR EQU 4CH ;PCI9052 INTCSR 地址 mask_int_9052 EQU 24H
Vendor_ID EQU 10EBH ;厂商ID 号 Device_ID EQU 8376 ;设备ID 号 .STACK 100 .DATA IO8259_0 DW 00F0H IO8259_1 DW 00F1H RD_IO8259 DW 0000H
时间显示
8253初始化
定时1秒
8259初始化 8086初始化
8255初始化
Y
N 产生中断
中断服务程序:秒+1
IO_Bit8_BaseAddress DW ?
PCI_IO_BaseAddress0 DW ?
PCI_IRQ_NUMBER DB ?
INT_MASK DB ?
INT_Vector DB ?
INT_CS DW ? ;保护原中断入口地址
INT_IP DW ?
msg0 DB 'BIOS不支持访问PCI $'
msg1 DB '找不到Star PCI9052板卡$'
msg2 DB '读PCI9052 I/O基地址时出错$'
msg3 DB '读8位I/O空间基地址时出错$'
msg4 DB '读IRQ号出错$'
msg5 DB '8259中断00H 次$'
BUFFER DB ' $'
Counter DB ?
ReDisplayFlagDB 0
.CODE
START: MOV AX,@DA TA
MOV DS,AX
MOV ES,AX
NOP
CALL InitPCI
CALL ModifyAddress ;根据PCI提供的基地址,将偏移地址转化为实地址
CALL ModifyVector ;修改中断向量、允许中断
MOV AH,00H
MOV AL,03H
INT 10H ;清屏
MOV AH,09H
LEA D X,msg5
INT 21H
CALL Init8259
MOV Counter,0 ;中断次数
MOV ReDisplayFlag,1 ;需要显示
STI ;开中断
START1: CALL IfExit
CMP ReDisplayFlag,0
JZ START1
CALL LedDisplay
MOV ReDisplayFlag,0
JMP START1
Init8259 PROC NEAR
MOV DX,IO8259_0
MOV AL,13H
OUT DX,AL
MOV DX,IO8259_1
MOV AL,80H
OUT DX,AL
MOV AL,09H
OUT DX,AL
MOV AL,FE ;屏蔽寄存器
OUT DX,AL
RET
Init8259 ENDP
******************************************************************************* *******************************************************************************