微机课程设计数字秒表

微机课程设计数字秒表
微机课程设计数字秒表

目录

1.中文摘要 (2)

2.方案论证 (3)

3.总体设计方案 (4)

3.1硬件系统设计 (5)

3.1.1 8086简介 (5)

3.1.2 8255简介 (6)

3.1.3 8083简介 (8)

3.1.4 硬件系统原理图 (9)

3.2软件系统设计 (10)

3.2.1 软件设计要求及介绍 (11)

3.2.2 程序设计流程 (12)

3.2.3 程序清单 (13)

4.实验结果及分析 (24)

5.总结体会 (25)

6.参考文献 (26)

一、中文摘要

微机原理与接口技术是一门实践性很强的电子信息工程专业的

技术基础课程。因此,微机接口课程设计是一项实践性很强的实训环节,结合运用所学的汇编语言及8086微处理芯片设计一个电子秒表,通过实践能够加深对汇编语言的理解以及对8086微处理器、8253可编程定时器、8259A可编程中断控制器、8255A可编程并行I/O接口芯片等的基本功能的认识。

本实验利用8253可编程定时器等芯片的定时和记数的原理,结合实验箱上的集成电路芯片8086、LED数码管以及实验箱上的按键来设计秒表。将软、硬件有机地结合起来,要求实现计时单位为1/100秒,利用功能键进行启/停控制,上电后计时器清0,当第一次按下KEY1启/停键时开始计数,按一下KEY2键清零,重新开始计时,在系统能够正确地进行计时,使5位LED数码管能够正确地显示时间。

关键字:电子秒表、百分之一秒、停启控制。

二、方案论证

根据课程设计的要求和我们所要增加的功能写好程序流程图,在程序流程图的基础上,结合芯片的功能写出相应的程序。然后再进行程序调试和相应的修改,以达到能够实现所要求实现的功能的目的。

在微机原理定汇编调试软件上编辑源程序,并进行汇编,在汇编成功无误后,选择端口进行调试,然后装入程序,至此,本次设计的软件工作准备完毕。再根据硬件原理设计图完成各芯片之间的连接,打开实验箱电源开关总体进行调试。

在整个实验过程中,在8253可编程定时器CLK端输出管脚处接上一个计数的频率为10KHZ的时钟信号,由8253定时/计数器产生0.01秒的中断并进行计数,可编程并行I/O接口芯片8255A将偏移地址写入内存单元,进中断更新数据,然后将内存数据送给LED数码管显示。定时器中断就是定义初值,然后开中断,剩下的就在中断里写了。保存数据段后,取中断程序入口地址,定义可编程中断控制器8259中断7中断矢量,读8259中断屏蔽字,开8259中断7,六位数码管用动态显示,挨个点亮,六个I/O控制位,十二个I/O控制段码,将8259的定时器设置在0.01秒进入一次中断,交替输出高低电平(形成时钟频率),在计数器输出使用组合逻辑电路连接LED灯的各个控制输入端。

三、总体设计方案

设计一个利用微机原理与接口技术完成秒表的设计方案, 该方案主要是选择8253A的计数器2与计数器1产生一个1Hz的中断脉冲,其输出端与不可屏蔽中断请求信号端相连接。利用1.19318MHz脉冲方波输入CLK2,设置CLK2的初值为59659,将CLK2的输出端连接到CLK1,设置CLK1的初值为20,将OUT1连接到8086CPU的NMI端。将NMI端有一个低电平信号输入时,8086CPU将产生中断进行秒计数。8086通过8255A将PA口作为段选信号输出端,将PB口作为片选信号输出端。

此方案的核心内容是利用微机原理与接口技术完成秒表的设计方案,该方案主要是选择8253A的计数器2和计数器1进行1s的定时,其输出于OUT1与8086的NMI相连,当定时到1s的时候产生一个中断信号,在中断服务程序进行秒的计数,并送入相应的存储单元;8255的A口接七段数码管的段选信号,B口接七段数码管的位选信号,秒的数值通过对8255的编程可以显示在七段数码管上面。该方案是利用微机接口技术的典范案例,就可行性而言,也是行之有效的。

总体设计方框图

3.1硬件系统设计

3.1.1 8086简介

Intel 8086拥有四个16位的通用寄存器,也能够当作八个8位

寄存器来存取,以及四个16位

索引寄存器(包含了堆栈指

标)。资料寄存器通常由指令隐

含地使用,针对暂存值需要复

杂的寄存器配置。它提供64K,

8位元的输出输入(或32K,16

位元),以及固定的向量中断。大部分的指令只能够存取一个内存位址,所以其中一个操作数必须是一个寄存器。运算结果会储存在操作数中的一个。Intel 8086有四个内存区段(segment)寄存器,可以从索引寄存器来设定。区段寄存器可以让CPU利用特殊的方式存取1MB内存。8086把段地址左移4位然后把它加上偏移地址。而 8086 的寻址方式改变让内存扩充较有效率。8086处理器的时钟频率介于4.77MHz(在原先的IBM PC)和10 MHz之间。8086没有包含浮点指令部分(FPU),但是可以通过外接数学辅助处理器来增强浮点计算能力。其I/O分配如下图所示:

3.1.2 8255简介

Intel 8086/8088 系列的可编程外设接口电路(Programmable

Peripheral Interface)简称PPI,

型号为8255(改进型为8255A及

8255A-5),具有24条输入/输出引

脚、可编程的通用并行输入/输出接

口电路。它是一片使用单一+5V电

源的40脚双列直插式大规模集成

电路。8255A的通用性强,使用灵

活,通过它CPU可直接与外设相连

接。8255A在使用前要写入一个方

式控制字,选择A、B、C三个端口

各自的工作方式,共有三种;方式

0:基本的输入输出方式,即无须

联络就可以直接进行的 I/O方式。

其中A、B、C口的高四位或低四位可分别设置成输入或输出。方式1:选通I/O,此时接口和外围设备需联络信号进行协调,只有A口和B口可以工作在方式1,此时C口的某些线被规定为A口或B口与外围设备的联络信号,余下的线只有基本的I/O功能,即只工作在方式0。方式2:双向I/O方式,只有A

口可以工作在这种方式,该I/O线即可输入又可输出,此时C口有5条线被规定为A口和外围设备的双向联络线,C口剩下的三条线可作为B口方式1的联络线,也可以和B口一起方式0的I/O线。8255A 是一个并行输入、输出器件,具有24个可编程设置的I/O口,包括3组8位的I/O为PA口、PB口、PC口,又可分为2组12位的I/O 口:A组包括A口及C口高4位,B组包括B口及C组的低4位。

3.1.3 8253简介

Intel8253是NMOS工艺制成的可编程计数器/定时器,有几种芯

片型号,外形引脚及功能都是兼容

的,只是工作的最高计数速率有所差

异,例如8253

(2.6MHz),8253-5(5MHz),8253内

部有三个计数器,分别成为计数器0、

计数器1和计数器2,他们的机构完

全相同。每个计数器的输入和输出都

决定于设置在控制寄存器中的控制

字,互相之间工作完全独立。每个计数器通过三个引脚和外部联系,一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。每个计数器内部有一个8位的控制寄存器,还有一个16位的计数初值寄存器CR、一个计数执行部件CE和一个输出锁存器OL。执行部件实际上是一个16位的减法计数器,它的起始值就是初值寄存器的值,而初始值寄存器的值是通过程序设置的。输出锁存器的值是通过程序设置的。输出锁存器OL 用来锁存计数执行部件CE的内容,从而使CPU可以对此进行读操作。顺便提一下,CR、CE和OL都是16位寄存器,但是也可以作8位寄

存器来用:

3.1.

4.硬件系统原理图

3.2软件系统设计

3.2.1软件设计要求及介绍

这是一个利用微机原理与接口技术完成秒表的设计方案,该方案主要是选择8253A的计数器2与计数器1进行1s的定时,其输出于OU1与8086的NMI相连,当定时到1s的时候产生一个中断信号,在中断服务程序进行秒的计数,并送入相应的存储单元;8255的A口接七段数码管的段选信号,B口接七段数码管的位选信号。我的数值通过对8255的编程可以显示在七段数码管上面。因此可以利用8086等器件的功能来完成设计。

EMU8086是学习汇编必不可少的工具,它结合了一个先进的原始编辑器、组译器、反组译器、具除错功能的软件模拟工具(虚拟PC),还有一个循序渐进的指导工具。该软件包含了学习汇编语言的全部内容。Emu8086集源代码编辑器,汇编/反汇编工具以及可以运行debug 的模拟器(虚拟机器)于一身,此外,还有循序渐进的教程。

这里是软件设计的流程,首先对所要用到的逻辑元器件的控制端口,I/O口进行初始化,接着通过按下按键“1”来调用赋值子程序,这中间必须要应用一个延时程序来防抖,完成后就开始中断,接着判断按键“2”按下去的次数,如果是奇数次的话就继续进行秒表计时,如果按下去的是偶数次的话,那么暂停,显示当前秒表的计数值。

3.2.2程序设计流程

3.2.3程序清单

DIS MACRO LOCAT,CODE ;设置图形显示宏定义

PUSH DX

PUSH BX

PUSH AX

MOV DX,LOCAT ;设置光标位置

MOV BH,00

MOV AH,02H

INT 10H

MOV DL,CODE ;输出字符串

MOV AH,02H

INT 21H

POP AX

POP BX

POP DX

ENDM

DAT SEGMENT ;设置数据段

BUF DB 'INPUT START RESET END CONTINUE $' ;设置功能说明BUFFER DB 10 DUP(?) ;定义缓存区

TIP DB 'M E M O R Y$' ;定义记忆提示

NUM DB 1

LOD EQU 0929H

DAT ENDS

COD SEGMENT ;定义代码段

START PROC FAR

ASSUME CS:COD,DS:DAT

MOV AX,DAT

MOV DS,AX

MOV DX,OFFSET BUF ;输出功能说明

MOV AH,09H

INT 21H

CALL DISMER ;记忆区提示符置光标

MOV DX,OFFSET TIP ;输出记忆提示字符

MOV AH,09H

INT 21H

CALL CLR ;图形区清屏并设置颜色CALL CLRDAT ;秒表数字区清屏并设置颜色CALL CLRMER ;记忆区清屏并设置颜色DIS 0419H,'<' ;通过宏调用显示图形

DIS 0517H,'<'

DIS 0715H,'<'

DIS 0914H,'<'

DIS 0B14H,'<'

DIS 060EH,'_'

DIS 0710H,'_'

DIS 0812H,'_'

DIS 0913H,'_'

DIS 0A14H,'_'

DIS 0915H,'_'

DIS 0816H,'_'

DIS 0718H,'_'

DIS 061AH,'_'

DIS 071CH,'*'

DIS 081EH,'*'

DIS 091FH,'*'

DIS 0B20H,'*'

DIS 0D21H,'*'

DIS 0F21H,'*'

DIS 1120H,'*'

DIS 131FH,'*'

DIS 141EH,'*'

DIS 151DH,'*'

DIS 161BH,'*'

DIS 1719H,'*'

DIS 1717H,'_'

DIS 1616H,'_'

DIS 1514H,'_'

DIS 1612H,'_'

DIS 1711H,'_'

DIS 170EH,'*'

DIS 160CH,'*'

DIS 150BH,'*'

DIS 140AH,'*' DIS 1309H,'*'

DIS 1108H,'*'

DIS 0F07H,'*'

DIS 0D07H,'*'

DIS 0B08H,'*'

DIS 0909H,'*'

DIS 080AH,'*'

DIS 070CH,'*'

DIS 0C12H,'_'

DIS 0C13H,'_'

DIS 0C14H,'_'

DIS 0C15H,'_'

DIS 0C16H,'_'

CALL GO ;设置初植

LOAD: CALL IOSET ;光标定位

CALL HALT ;等待输入

MOV DX,0

MOV CH,0

AGAIN: CALL TIME ;调用延时程序MOV AL,DL ;百分之一秒加一

ADD AL,1

DAA

JC NEXT1 ;满一百进位

MOV DL,AL

JMP DISPY ;不满一百显示

NEXT1: MOV DL,0

MOV AL,DH ;秒位加一

ADD AL,1

DAA

MOV DH,AL

CMP AL,60H

JNE DISPY

CALL BELL ;满60提示铃声并进位

MOV DH,0

MOV AL,CH ;分位加一

ADD AL,1

DAA

MOV CH,AL

CMP AL,60H

JNE DISPY ;满60清零

MOV CH,0

DISPY: ;显示电子秒表

MOV BX,OFFSET BUFFER ;取缓冲区地址

MOV AL,CH

CALL TRAN ;将分位转变为ASCII码并送缓冲区

INC BX

INC BX

MOV AL,DH ;将秒位转变为ASCII码并送缓冲区

CALL TRAN

INC BX

INC BX

MOV AL,DL ;将百分之一秒位转变为ASCII码并送缓冲区

CALL TRAN

PUSH BX

PUSH CX

PUSH DX

CALL IOSET ;光标置位

MOV DX,OFFSET BUFFER ;输出缓冲区字符串

MOV AH,09H

INT 21H

POP DX

POP CX

POP BX

MOV AH,0BH ;等待键盘输入

INT 21H

AND AL,AL

JZ AGAIN

MOV AH,08H

INT 21H

CMP AL,'R' ;判断输入是否为R

JNE NEXT2 ;不是则判断是否为E

CALL MEMORY ;若是则调用记忆功能保存当前值

MOV CH,0 ;初值清零重新计数

MOV DL,0

MOV DH,0

JMP AGAIN

NEXT2:

CMP AL,'E' ;判断是否为E

JNE AGAIN ;不是则继续计数

NEXT3: ;若是则暂停计数

MOV AH,08H

INT 21H

CMP AL,'C' ;判断是否输入C

JE AGAIN ;若是则继续计数

CMP AL,'R' ;判断是否输入R

JNE NEXT3 ;若不是则继续等待输入

CALL MEMORY ;若是则调用记忆功能

CALL GO ;重新设置初值等待重新启动

CALL IOSET

MOV DX,OFFSET BUFFER

MOV AH,09H

INT 21H

JMP LOAD

RET

START ENDP

GO PROC ;设置初值子程序MOV BX,OFFSET BUFFER

MOV AL,'0'

MOV [BX],AL

INC BX

MOV AL,'0'

MOV [BX],AL

INC BX

MOV AL,':'

MOV [BX],AL

INC BX

MOV AL,'0'

MOV [BX],AL

INC BX

MOV AL,'0'

MOV [BX],AL

INC BX

MOV AL,':'

MOV [BX],AL

INC BX

MOV AL,'0'

MOV [BX],AL

INC BX

MOV AL,'0'

MOV [BX],AL

INC BX

MOV AL,'$'

MOV [BX],AL

RET

GO ENDP

IOSET PROC

MOV DX,0F10H

MOV BH,00

MOV AH,02H

INT 10H

RET

IOSET ENDP

HALT PROC

MOV AH,08H

INT 21H

CMP AL,'S'

JNE HALT

RET

HALT ENDP

TRAN PROC ;十六进制转ASCII码子程序MOV CL,AL

SHR AL,1

SHR AL,1

相关主题
相关文档
最新文档