电子钟计算机接口实验.docx

上传人:b****7 文档编号:11200303 上传时间:2023-02-25 格式:DOCX 页数:31 大小:868.80KB
下载 相关 举报
电子钟计算机接口实验.docx_第1页
第1页 / 共31页
电子钟计算机接口实验.docx_第2页
第2页 / 共31页
电子钟计算机接口实验.docx_第3页
第3页 / 共31页
电子钟计算机接口实验.docx_第4页
第4页 / 共31页
电子钟计算机接口实验.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

电子钟计算机接口实验.docx

《电子钟计算机接口实验.docx》由会员分享,可在线阅读,更多相关《电子钟计算机接口实验.docx(31页珍藏版)》请在冰豆网上搜索。

电子钟计算机接口实验.docx

电子钟计算机接口实验

 

微机原理与接口技术课程设计报告

 

姓名:

班级:

专业:

指导教师:

 

2012年6月

 

目录

一、设计题目3

二、题目要求3

三、设计原理3

1、8259A中断控制器3

2、8254定时/计数器5

3、8255可编程芯片6

4、七段数码管7

四、设计思路8

1、电子钟基本功能的实现8

2、电子钟按键功能的实现9

3、显示的实现10

五、设计电路原理图10

六、流程图11

1、主程序流程11

2、中断处理程序流程12

3、键盘扫描程序流程13

七、程序清单(包括必要的注释)14

八、设计最后实现的功能及结果21

九、设计过程中的问题及解决方案22

十、心得体会22

附录一TD-PIT-B实验系统的硬件环境22

一、设计题目

电子钟

二、题目要求

设计一电子时钟,能在数码管上显示时间并计时。

根据题目和所用的接口电路芯片设计出完整的接口电路,并在实验系统上完成电路的连接和调试通过.

由8254定时,数码管显示时间,小键盘控制计时:

图2-1

1键(清除)显示初值00、00

2键(启动)电子钟计时

3键(停止)电子钟停止计时

4键(终止程序)熄灭数码管,程序退出

5键(设置初始值)设置分、秒值。

同时具有判断错误的能力,若输入有错,则显示错误提示,此时按5可从输入预置值。

前期完成的实验有:

8259A中断控制器实验,8254定时计数器实验,8255并行接口实验,LED数码管测试实验。

三、设计原理

本系统是利用8254定时/计数器产生的固定频率的脉冲作为8255可编程芯片的中断信号,来控制数码管的显示及小键盘的按键处理,从而实现电子钟的计时、按键控制等功能。

1、8259A中断控制器

8259A中断控制器将中断源优先级排队、辨别中断源以及提供中断向量的电路于一片中,因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设置。

同时,在不需增加其他电路的情况下,通过多片8259A的级连,能构成多达64级的矢量中断系统。

8259A的内部结构和管脚如图3-1所示。

3-1

●8259A的中断过程,即微机系统响应可屏蔽中断的过程

(1)将加到引脚IR0~IR7上的中断请求寄存到中断请求寄存器中。

(2)在中断屏蔽寄存器的管理下,没有被屏蔽的中断请求被送到优先权电路判优。

(3)选中当前级别最高的中断源,然后从引脚INT向CPU发出中断请求信号。

(4)CPU满足一定的条件后,向8259A发出两个中断响应信号(负脉冲):

1)8259A从引脚INTA收到第1个中断响应信号之后,立即使中断服务寄存器中与被选中的中断源对应的那一位置1,同时把中断请求寄存器中的相应位清0。

2)从引脚INTA收到第2个中断响应信号之后,8259A把选中的中断源类型码n通过数据线送往CPU。

(5)在实模式下,CPU从4×n~4×n+3单元取出该中断源的中断向量→IP,CS,从而引导CPU执行该中断源的中断服务程序。

●8259A编程

(1)初始化编程

提供了4个(ICW1~ICW4)初始化命令字,写入命令寄存器组后,就建立了8259A的基本工作方式。

系统8259A的初始化编程在微机启动时,由BIOS自动完成。

用户不需再对其初始化,更改它的初始化设置。

BIOS对系统8259A初始化为:

中断触发方式采用边沿触发。

中断屏蔽方式采用常规屏蔽方式。

中断优先级的管理采用完全嵌套即固定优先级方式。

IR0的请求级别最高,IR7的请求级别最低。

中断结束,采用常规结束方式。

(2)操作方式编程

将操作命令字OCW1~OCW3写入操作命令寄存器组,对中断处理过程实现动态控制。

OCW1~OCW3各命令格式如图3-2所示。

OCW1——写中断屏蔽字(对奇地址操作)

某位Mi为1,表示对应的中断源IRQi被屏蔽;Mi为0,IRQi被开放。

OCW2——写中断方式命令字(对偶地址操作)

设置优先级是否进行循环,循环的方式及中断结束的方式。

OCW3——(对偶地址操作)

用来设置特殊屏蔽方式、查询方式

用来读8259A的中断请求寄存器IRR,中断服务寄存器ISR、中断屏蔽寄存器IMR的当前状态。

3-2

2、8254定时/计数器

8254是Intel公司生产的可编程间隔定时器。

是8253的改进型,比8253具有更优良的性能。

●8254具有以下基本功能:

(1)有3个独立的16位计数通道;

(2)每个计数器可按二进制或十进制(BCD)计数;

(3)每个计数器可编程工作在6种不同工作方式;

(4)每个计数器允许的最高计数频率为10MNZ(8253为2MHZ);

(5)有读回命令(8253没有),可以读出当前计数单元的内容和状态寄存器内容;

图3-3

图3-3是8254的内部结构框图和管脚图。

它是由与CPU的接口、内部控制电路和三个计数器组成。

●8254的工作方式:

方式0——计数结束输出正跃变信号(可作为中断请求信号),

方式1——单脉冲发生器(形成负脉冲,宽度=N×CLK脉冲周期)

方式2——分频器(输出固定频率的脉冲)

方式3——方波发生器

方式4——软件触发的单脉冲发生器(输出负脉冲,宽度为一个CLK周期)

方式5——硬件触发的单脉冲发生器(输出负脉冲,宽度为一个CLK周期)

●8254的方式控制字格式,如图3-4:

图3-4

3、8255可编程芯片

8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,具有A、B、C三个并行接口,用+5V单电源供电,其内部结构及管脚,如图3-5:

图3-5

●8255的工作方式:

方式0——基本输入/输出方式,其工作特点为:

1)即为无条件输入/输出方式,端口与外设之间不需要联络信号。

2)A口、B口、C口可由控制字规定为输入/输出。

方式1——选通型输入/输出方式

方式2——双向选通方式

●8255工作方式控制字和C口按位置位/复位控制字格式如图3-6所示:

图3-6

4、七段数码管

数码的显示方式中最常应用的是分段式,主要器件是七段发光二极管(LED)显示器。

它可以分为两种,一种是共阳极显示器(发光二极管的阳极都接在一个公共点上),另一种是共阴极显示器(发光二极管的阴极都接在一个公共点上,使用时公共点接地)。

我们的电子钟是由4个“七段数码管”排列组成,分别显示对应数字,如“00.00”。

七段数码管a、b、c、d、e、f、g如图3-7所示:

图3-7

当显示“1”时b、c段亮,“2”时a、b、g、e、d亮,依次推导。

下面是数码转换图3-8,其中包括七段码中共阴部分对应关系。

汇编中显示0、1、2、3、4、5、6、7、8、9对应编码依次是3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、67H。

3-8

四、设计思路

本系统所要完成的是电子钟的计时等功能,其中最基本的就是实现计时功能,并把相应的数值送到数码管上显示出来。

1、电子钟基本功能的实现:

在本系统中,用到的8254的功能只是相当于一个定时计,采用计数器0,工作于方式2,使8254的OUT0端输出周期性的负脉冲信号。

我们给定时器输入10KHz频率的脉冲,这样每隔一秒就会在OUT0端产生0到1的跃变,作为中断IRQ的请求信号。

当然,时钟的计数也有其特定的规则,那就是秒、分的个位逢十进一,十位逢六进一,所以,我们可以通过中断处理程序来控制其进位。

这样我们便完成了计时功能。

然而,如果仅仅将计时得到的相应数据送入数码管,我们会发现,四个数码管同时显示,无法完成其时钟的显示功能。

但是,我们知道,四个数码管的亮灭与小键盘X1,X2,X3,X4各列是否为低电平是相对应的(即:

X1,X2,X3,X4依次对应从左到右的四个数码管,若X1为低电平,则数码管1亮;若X2为低电平,则数码管2亮;•••),于是,我们就可以将低电平输出到相应的键盘上,来实现对应数码管的显示。

通过以上分析,我们可以用四位二进制码分别对应表示X4X3X2X1的逻辑值(1--高电平,0--低电平),这样要实现时钟的显示功能,便可以按照以下方法来进行:

首先将秒的个位数据通过8255的B端口送给数码管,同时将二进制码“0111”通过8255的A端口送给小键盘X4X3X2X1,这样通过计算机的扫描后,就会在数码管4上显示秒的个位值;接着将秒的十位数据送给数码管,同时将二进制码“1011”送给小键盘X4X3X2X1,这样就会在数码管3上显示相应的数值;同样的道理,分别将分的个位、十位送给数码管,“1101”、“1110”送给小键盘X4X3X2X1,就会依次在数码管2、1上显示分的个位、十位数值。

另外,必须注意的一点就是,显示的时间应该是:

XX.XX,中间的一点显示在分的个位上,也就是说在数码管2上显示那一点,以区分分与秒。

所以,我们将显示分个位的数码管的二进制码最高位置“1”,其他数码管置“0”,便达到了显示点的功能。

从上面的方法我们可以看出,电子钟分秒各位的显示并不是同时进行的,而是按顺序依次循环显示的,它利用的就是人的视觉暂留现象来欺骗人们的眼睛,造成一种“四位数值同时显示”的假象。

2、电子钟按键功能的实现:

观察小键盘,我们会发现它其实有两行(对应Y1、Y2)四列(对应X1、X2、X3、X4)共八个键,前面我们在实现时钟的显示功能时,就是分别将相应的二进制编码送到小键盘,来实现对应数码管的显示。

其实,它是一个循环扫描的过程,当它扫描到对应的X列为低电平时就显示相应的数码管,同时把Y1、Y2的逻辑值读回。

所以,我们就可以利用这点,仅仅判断Y1、Y2的逻辑值就可以辨别究竟按下了哪个键,并通过相应的编程来完成不同键的按键功能。

具体实现过程是这样的,我们将Y1、Y2的逻辑值送到8255的C端口,通过清零仅留下最低两位来实现Y2Y1的逻辑值判别。

假如Y2Y1的逻辑值是“01”,说明是Y2行的键被按下,假如是“10”,则Y1行的键被按下。

在判别了哪行键被按下后,我们将X4X3X2X1列的逻辑值前面增加一位作为按键的二进制编码,就可以用来判别究竟是哪个键被按下了,其中“0”---Y1行,“1”---Y2行。

我们按照从左到右、从上到下的顺序将小键盘的各键定义为1-8键,具体编码如下:

1-4键在Y1行:

01110 01101 01011 00111

5-8键在Y2行:

11110 11101 11011 10111

●1键清除功能的设置:

在判别了按键的逻辑值为01110后,将存储时间的每一个内存单元赋0,这样在数码管显示的就是00.00,便达到了清除功能的目的。

●2键启动、3键停止计时功能的设置:

在进行2键和3键功能设置之前,我们必须定义一个暂停标志位:

PAUSE,它用标准的逻辑值(0、1)来表示,假如PAUSE=0,在进行计时设置的时候,让其自动加1,依次显示时间的各位;假如PAUSE=1,我们就将其返回,停止加1,即暂停计时。

接着,假如我们判别的是2键被按下,就令PAUSE=0,让计数器计时,自动加1;假如我们按下的是3键,就令PAUSE=1,让计数器暂停计时,即停止加1。

●4键终止程序功能的设置:

从上面的分析,我们已经知道,只有同时将对应键盘X列的低电平送到相应的数码管才会使得数码管亮,所以我们在判别了是4键被按下后,只要将键盘对应的二进制码全部赋高电平,并送到数码管,同时结束程序,就可以实现熄灭数码管、退出程序的功能。

●5键重置初始值功能的设置:

在这里我们设置了两个标志位:

调整位标志ADJUST和闪烁标志FLASH。

它们的具体设置如下:

ADJUST初始设置为00H,表示非调整状态,01H表示调整秒的个位,02H表示调整秒的十位,03H表示调整分的个位,04H表示调整分的十位。

FLASH设置为逻辑值,初始设置为00H,表示非闪烁状态,0FFH表示闪烁,其闪烁功能实现的过程为:

假如FLASH=0FFH,则将00H送给数码管,让数码管不显示。

然后,在中断计时程序里面,加入FLASH取反语句,由于计时程序每秒加1循环一次,这样FLASH也实现了每秒改变逻辑值一次。

也就是说,数码管闪烁的周期是1秒。

当然,闪烁标志位只是在有对应位需要调整的时候才用的着。

要实现5键设置初始时间的功能,我们就必须增加一个键(6键)来控制时间的增加。

●6键时间位加1功能的设置

这里,我们再引进一个标志位:

按键标志KEYMARK。

其设置为逻辑值,初始设置为0,表示允许响应此次按键,并在响应过后,将其置1;KEMARK为1时,表示不响应此次按键。

之所以要设置此标志位,是因为键盘扫描的速度非常快,假如我按下6键需要调整时间加1,我按下的时间再怎么短,计算机一定已经扫描了无数次,这样一来,我只按了一次,时间位就会响应无数次,实现了无数次的加1,从而无法实现6键的功能。

3、显示的实现:

使用8259控制,用数码管的显示功能来设计,显示部分用四只LED为显示管,这些LED发光二极管的阴极是互相连接在一起的,所以称为共阴极数码管。

通过在这八只发光二极管的阳极加+5V或0V的电压使不同的二极管发光,形成不同的字符和数字。

电子时钟用到的是0-9十个数字,它们所对应的字符表依次是3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、6FH。

五、设计电路原理图

系统的连线图主要由五个部分构成。

8259中断控制器、8255并口控制器、8254定时计数器、键盘及数码管显示单元、开关及LED显示单元构成。

如图5-1所示:

图5-1

六、流程图

1、主程序流程(图5-2):

主程序的流程图是对整个程序的逻辑的图象表示。

首先是设置8254、8255、8259的各个端口地址。

接着初始化各个芯片,开始计时,并通过8259中断控制时间的正确显示。

在整个过程中都在检测是否有铵键响应。

有则停止,没有则返回继续执行。

如图5-2。

图5-2

2、中断处理程序流程(图5-3):

图5-3

3、键盘扫描程序流程(图5-4):

图5-4

七、程序清单(包括必要的注释)

INTCSR_BYTE0EQU0D838H;设置PC机内部8259的端口地址

INTCSR_BYTE1EQU0D839H

INTCSR_BYTE2EQU0D83AH

INTCSR_BYTE3EQU0D83BH

IMB4_BYTE3EQU0D81FH

MY8254_COUNT0EQU0E040H;8254计数器0端口地址

MY8254_COUNT1EQU0E041H;8254计数器1端口地址

MY8254_COUNT2EQU0E042H;8254计数器2端口地址

MY8254_MODEEQU0E043H;8254控制寄存器端口地址

MY8255_AEQU0E060H;8255的A口地址

MY8255_BEQU0E061H;8255的B口地址

MY8255_CEQU0E062H;8255的C口地址

MY8255_MODEEQU0E063H;8255的控制寄存器地址

IRQEQU01CCH

DATASEGMENT

CSBAKDW?

;保存INTR原中断处理程序入口段地址的变量

IPBAKDW?

;保存INTR原中断处理程序入口偏移地址的变量

MKBAKDB?

;保存INTR原中断屏蔽字的变量

ADJUSTDB00H;调整位标志

FLASHDB00H;闪烁标志位

PAUSEDB0B;暂停标志位

KEYMARKDB0B;按键标志位

INKEYDB00H;按键

SECONDADB00H;秒个位

SECONDBDB00H;秒十位

MINUTEADB00H;分个位

MINUTEBDB00H;分十位

LEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

;数码管显示“0-9”编码

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

CLI

MOVAX,DATA

MOVDS,AX

MOVDX,INTCSR_BYTE0;初始化PCI卡中断控制寄存器

MOVAL,00H;向PCI卡中断控制寄存器中写入003F1F00H

OUTDX,AL

MOVDX,INTCSR_BYTE1

MOVAL,1FH

OUTDX,AL

MOVDX,INTCSR_BYTE2

MOVAL,3FH

OUTDX,AL

MOVDX,INTCSR_BYTE3

MOVAL,00H

OUTDX,AL

MOVAX,0000H;替换INTR的中断矢量

MOVES,AX

MOVDI,01CCH

MOVAX,ES:

[DI]

MOVIPBAK,AX;保存INTR原中断处理程序入口偏移地址

MOVAX,OFFSETMYINT

CLD

STOSW

MOVAX,ES:

[DI]

MOVCSBAK,AX

MOVAX,SEGMYINT;设置中断矢量

STOSW

INAL,0A1H

MOVMKBAK,AL

ANDAL,0F7H

OUT0A1H,AL

STI

MOVDX,MY8254_MODE;初始化8254工作方式

MOVAL,17H

OUTDX,AL

MOVDX,MY8254_COUNT0;装入计数初值

MOVAL,0

OUTDX,AL

MOVDX,MY8255_MODE;初始化8255工作方式

MOVAL,81H;A口,B口均为方式0,输出;C口:

低四位输入,高四位输出。

其实只用到了最低两位来判断Y1、Y2的逻辑值。

OUTDX,AL

A1:

NOP;等待

MOVCX,32H

A2:

MOVDX,MY8255_B

MOVAX,DATA

MOVDS,AX

MOVBX,OFFSETLED

MOVAL,SECONDA

XLATLED

CMPADJUST,01H;是否调整秒的个位

JNEDIS_SECONDA

CMPFLASH,0FFH;是否闪烁

JNEDIS_SECONDA

ANDAL,00H;熄灭数码管

DIS_SECONDA:

OUTDX,AL;显示秒的个位

MOVDX,MY8255_A

MOVAL,0111B

OUTDX,AL

CALLKEYCTR;调用按键处理程序

CALLDELAY;调用延迟程序

MOVDX,MY8255_B

MOVAX,DATA

MOVDS,AX

MOVBX,OFFSETLED

MOVAL,SECONDB

XLATLED

CMPADJUST,02H;是否调整秒的十位

JNEDIS_SECONDB

CMPFLASH,0FFH

JNEDIS_SECONDB

ANDAL,00H

DIS_SECONDB:

;显示秒的十位

OUTDX,AL

MOVDX,MY8255_A

MOVAL,1011B

OUTDX,AL

CALLKEYCTR

CALLDELAY

MOVDX,MY8255_B

MOVAX,DATA

MOVDS,AX

MOVBX,OFFSETLED

MOVAL,MINUTEA

XLATLED

CMPADJUST,03H;是否调整分的个位

JNEDIS_MINUTEA

CMPFLASH,0FFH

JNEDIS_MINUTEA

ANDAL,00H

DIS_MINUTEA:

ADDAL,80H;显示分的个位

OUTDX,AL;显示“XX.XX”中的“.”

MOVDX,MY8255_A

MOVAL,1101B

OUTDX,AL

CALLKEYCTR

CALLDELAY

MOVDX,MY8255_B

MOVAX,DATA

MOVDS,AX

MOVBX,OFFSETLED

MOVAL,MINUTEB

XLATLED

CMPADJUST,04H;是否调整分的十位

JNEDIS_MINUTEB

CMPFLASH,0FFH

JNEDIS_MINUTEB

ANDAL,00H

DIS_MINUTEB:

;显示分的十位

OUTDX,AL

MOVDX,MY8255_A

MOVAL,1110B

OUTDX,AL

CALLKEYCTR

CALLDELAY

LOOPSK1

JMPSK2

SK1:

JMPA2

SK2:

JMPA1

MYINT:

PUSHDS

PUSHAX

PUSHDX

MOVDX,IMB4_BYTE3

INAL,DX

MOVDX,INTCSR_BYTE2

MOVAL,3FH

OUTDX,AL;清8259中断标志

MOVAL,63H;根据中断号修改

OUT0A0H,AL

MOVAL,62H

OUT20H,AL

MOVAX,DATA

MOVDS,AX

NOTFLASH;中断处理程序

MOVKEYMARK,0B

CMPPAUSE,0B

JNEL1

INCSECONDA

CMPSECONDA,0AH;秒的个位与10比较

JCL1

MOVSECONDA,00H;如果大于等于10,则清零

INCSECONDB

CMPSECONDB,06H;秒的十位与6比较

JCL1

MOVSECONDB,00H;秒的十位清零

INCMINUTEA

CMPMINUTEA,0AH

JCL1

INCMINUTEB

MOVMINUTEA,00H

CMPMINUTEB,06H

JCL1

MOVMINUTEB,00H

L1:

POPDS

POPAX

POPDX

IRET

KEYCTRPROCNEAR;键盘扫描子程序

MOVINKEY,AL

MOVDX,MY8255_C

INAL,DX

ANDAL,03H;是否高6位清零

CMPAL,10B;是否按下Y1行

JNEINY2

ADDINKEY,00H

JMPJUDGKEY

INY2:

CMPAL,01B;是否按下Y2行

JNESKIP

ADDINKEY,10000B

JUDGKEY:

CMPINKEY,01110B;是否按下1键

JNEKEY2

ANDSECONDA,00H;时间清零

ANDSECONDB,00H

ANDMINUTEA,00H

ANDMINUTEB,00H

SKIP:

JMPBACK

KE

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1