微机接口设计论文数字秒表.docx

上传人:b****1 文档编号:1990061 上传时间:2023-05-02 格式:DOCX 页数:22 大小:290.08KB
下载 相关 举报
微机接口设计论文数字秒表.docx_第1页
第1页 / 共22页
微机接口设计论文数字秒表.docx_第2页
第2页 / 共22页
微机接口设计论文数字秒表.docx_第3页
第3页 / 共22页
微机接口设计论文数字秒表.docx_第4页
第4页 / 共22页
微机接口设计论文数字秒表.docx_第5页
第5页 / 共22页
微机接口设计论文数字秒表.docx_第6页
第6页 / 共22页
微机接口设计论文数字秒表.docx_第7页
第7页 / 共22页
微机接口设计论文数字秒表.docx_第8页
第8页 / 共22页
微机接口设计论文数字秒表.docx_第9页
第9页 / 共22页
微机接口设计论文数字秒表.docx_第10页
第10页 / 共22页
微机接口设计论文数字秒表.docx_第11页
第11页 / 共22页
微机接口设计论文数字秒表.docx_第12页
第12页 / 共22页
微机接口设计论文数字秒表.docx_第13页
第13页 / 共22页
微机接口设计论文数字秒表.docx_第14页
第14页 / 共22页
微机接口设计论文数字秒表.docx_第15页
第15页 / 共22页
微机接口设计论文数字秒表.docx_第16页
第16页 / 共22页
微机接口设计论文数字秒表.docx_第17页
第17页 / 共22页
微机接口设计论文数字秒表.docx_第18页
第18页 / 共22页
微机接口设计论文数字秒表.docx_第19页
第19页 / 共22页
微机接口设计论文数字秒表.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

微机接口设计论文数字秒表.docx

《微机接口设计论文数字秒表.docx》由会员分享,可在线阅读,更多相关《微机接口设计论文数字秒表.docx(22页珍藏版)》请在冰点文库上搜索。

微机接口设计论文数字秒表.docx

微机接口设计论文数字秒表

数字式秒表

摘要:

介绍了基于8253A定时器计数器,8255A并行接口电路,8259A中断控

制器和7段码显示器的电子秒表的设计与实现

关键字:

8253模块;8255模块;8259模块;7段码显示器;电子秒表

DigitalStopwatch

Abstract:

Thispaperaimstoinrtroducethedesignofthedigitalstopwatch

whichbasedon8253A,8255A,8259Aandthe7segmentleddisplay

Keywords:

8253A;8255A;8259A;7segmentleddisplay;stopwatch

一、引言

在科技高度发展的今天,集成电路和计算机应用得到了高速发展。

尤其是计算机应用的发展。

它在人们日常生活已逐渐崭露头角。

大多数电子产品多是由计算机电路组成。

如智能手机、PDA等。

而且他们的身影已经频繁的出现在我们身边。

各种家用电器多会实现微电脑技术。

电脑各部分在工作时多是一时间为基准的。

本文就是基于计算机电路的时钟脉冲信号、状态控制等原理设计出的数字秒表。

秒表在很多领域充当一个重要的角色。

在各种比赛中对秒表的精确度要求很高,尤其是一些科学实验。

他们对时间精确度达到了几纳秒级别。

此次课程设计所设计的电子秒表,其计时精确度为0.1s。

所使用的芯片主要有8253定时计数器、8255A并行接口电路芯片、8259A中断控制器等。

通过实验板上设计的键盘模块实现开始比赛,记录成绩,显示成绩,结束比赛,退出返回dos,等功能,用系统中的四片七段数码管将计得的时间以XXX(秒十分秒,其中秒占两位,十分秒两位)的形式显示给用户。

计时准确度与现实时间相符。

 

二、设计所用芯片及工作原理

2.18253芯片工作原理

1.工作方式的介绍与选择:

8253有6种可选择的工作方式:

方式0——软件触发计数结束产生中断

方式1——可重触发单稳触发器

方式2——可软件/硬件触发的分频器

方式3——可软件/硬件触发的方波发生器

方式4——软件触发的选通信号发生器

方式5——硬件触发的选通信号发生器

本系统设计采用的工作方式是8253的方式3,工作方式3被称作方波发生器。

任一通道工作在方式3,只在计数值n为偶数,则可输出重复周期为n、占空比为1:

1的方波。

进入工作方式3,OUTi输出低电平,装入计数值后,OUTi立即跳变为高电平。

如果当GATE为高电平,则立即开始减“1”计数,OUTi保持为高电平,若n为偶数,则当计数值减到n/2时,OUTi跳变为低电平,一直保持到计数值为“0”,系统才自动重新置入计数值n,实现循环计数。

这时OUTi端输出的周期为n*CLKi周期,占空比为1:

1的方波序列;若n为奇数,则OUTi端输出周期为n*CLKi周期,占空比为((n+1)/2)/((n-1)/2)的近似方波序列。

 如果在操作过程中,GATE变为无效,则暂停减“1”计数过程,直到GATE再次有效,重新从初值n开始减“1”计数。

  如果要求改变输出方波的速率,则CPU可在任何时候重新装入新的计数初值n,并从下一个计数操作周期开始改变输出方波的速率。

图2-18253芯片引脚图

8253的初始化程序:

moval,36h

movdx,43h

outdx,al

movax,11930

movdx,40h

outdx,al

moval,ah

outdx,al

2.28255芯片工作原理

在本次系统设计当中,本次设计采用的是软件定时(即通过汇编指令)实现的。

而灯的亮与灭以及闪烁是用8255的A口和B口控制的,工作在方式0,A口和B口均为输出。

并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。

CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位、32位等。

8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:

方式0--基本输入/出方式、方式1--选通输入/出方式、方式2--双向选通工作方式。

8255的内部结构及引脚如图2-1所示,8255工作方式控制字和C口按位置位/复位控制字格式如图2-2所示。

图2-28255的内部结构及引脚

图2-38255工作方式控制字和C口按位置位/复位控制字格式

8255的初始化程序:

moval,81h

movdx,0c803h

outdx,al

2.38259芯片工作原理

8259是一种可编程的中断控制器。

每块芯片可管理8级向量中断,同时,可通过多片级连实现多达64级的中断管理。

一个8259A芯片主要由数据总线缓冲器、中断请求寄存器IRR、中断服务寄存器ISR、中断屏蔽寄存器IMR、优先级分析器PR、读写逻辑电路、控制电路、级联缓冲器/比较器8个部分组成。

1.引脚介绍:

D7~D0为数据线,双向,三态,可与系统数据总线直接相连。

IR7~IR0为中断请求输入线,接收来自外界的中断请求。

INT为送至CPU的中断请求输出线。

高电平有效。

INTA为中断响应输入线,接收CPU在中断响应周期中发来的中断响应信号。

RD为读信号线,低电平有效。

有效时,使信息由8259读至CPU。

WR是写信号线,低电平有效。

有效时,控制信息由CPU写入8259。

A0是片内端口选择输入线。

对8259内部寄存器的操作需要通过端口进行。

一片8259占用两个端口地址,用A0来选择。

一般情况下,A0直接接系统地。

址总线的最低位A0,在8086系统中,一般接系统地址总线的A1。

CAS2~CAS0为级联信号线,当8259作为主片时,这三条线是输出线

作为从片时,则为输入线。

SP/EN为从片编程/允许缓冲器信号。

2.8259的中断工作过程

当一条或多条中断请求线(IRQ0~IRQ7)变成高电平,则使IRR相应位置“1”。

可用IMR对IRR进行屏蔽。

通过优先级判别器(PR)把当前未屏蔽的最高优先级的中断请求从INT输出送到CPU的INTR端。

若CPU处于开中断状态,则在执行完当前指令后用INTA作收到CPU的第一个中断应答INTA信号后,将ISR中的中断优先级最高的那一位置“1”,而将IR中的相应位复位为“0”。

8259在收到第2个INTA信号后,将把对应的中断向量送到数据线,CPU读入该中断向量即可转入执行相应的中断子程序。

中断响应结束后,在自动结束中断(AEOI)方式下,8259会将ISR中原来在第一个INTA脉冲到来时设置的“1”在第2个INTA脉冲结束时自动复位为“0”。

若是非自动结束中断(EOI)方式,则该位的“1”将一直保持到中断过程结束,由CPU发EOI命令才能复位为“0”。

图2-48259芯片引脚图

 

8259工作程序:

moval,inttype

movah,35h

int21h

pushes;将es,bx,ds入栈保护

pushbx

pushds

movax,@data

moves,ax

movdx,offsetintp;取intp的偏移量

movcx,segintp;取intp的段地址

pushds

movds,cx

moval,inttype;设置inttpye的新中断向量

movah,25h

int21h

popds;将ds出栈

inal,21h;CPU开中断(开IR0)

andal,11111110b

out21h,al

movax,ds

moves,ax

三、硬件系统的构成

3.1线路设计

系统设计时,8255做并口芯片,键盘和LED共用PA0-PA7,PB0-PB3,并单独使用PC0-PC3,PA口及PB口均工作在输出方式。

进行输入输出,分别接键盘和LED。

总体硬件图如下:

图3-1总体硬件图

3.2键盘的设计

键盘的接口一般分为独立式和矩阵式。

独立式按键就是各按键相互独立、每个按键各接一根输入线,一根输入线上的按键是否按下不会影响其他输入线上的工作状态。

因此,通过检测输入线的电平状态可以很容易判断哪个按键被按下了。

独立式按键电路配置灵活,软件结构简单。

但每个按键需占用一根输入线,在按键数量较多时,输入口浪费大,电路结构显得很繁杂。

故此种键盘适用于按键较少或操作速度较高的场合。

若采用此方式,,各按键开关均采用上拉电阻,这是为了保证在按键断开时,各IO口线有确定的高电平。

当然如输入口线内部已有上拉电阻,则外电路的上拉电阻可省去。

矩阵式键盘适用于按键数量较多的场合,它由行线和列线组成,按键位于行、列的交叉点上,一个4*4的行、列结构可以构成一个含有16个按键的键盘。

很明显,在按键数量较多的场合,矩阵键盘与独立式按键键盘相比,要节省很多的I/O口。

行、列线分别接到按键的两端。

行线通过上拉电阻接到+5V上。

平时无按键时,行、列线处于高电平状态,而当有键按下时,行、列线将导通,因此行线电平状态将由与此行线相连的列线电平决定。

按键的识别一般采用扫描法。

让所有的列线处于低电平,当有键按下时,按键所在的行电平将被拉成低电平,根据此行电平的变化,便能判定此行有键被按下。

为了进一步判定到底哪一列的键被按下,可在某一时刻只让一条列线处于低电平,而其余所有列线处于高电平。

3.3LED显示原理

LED的显示使用动态显示方式,通过一位一位点亮数码显示管,各位显示管的段码相应并联在一起,由8个I/O口控制,各位的位选线分别由相应的I/O口的不同控制位控制,分时选通。

动态扫描即在同一时刻只选通一个显示器,并送出相应的段码,而在下一时刻再选通另一个显示器,并送出相应的段码,如此循环下去,就可以使各位显示出将要示的字符,虽然这些字符在不同时刻分别显示的,但由于人眼有视觉暂留现象,只要每位显示间隔足够短,就可以给人同时显示的感觉。

3.4键盘及LED显示模块原理图

图3-2键盘及LED显示模块原理图

四、软件系统构成

4.1参数的设置

4.1.1常量的设置

inttypeequ08h;设置中断类型码

p8253ctr1equ43h;8253的控制口

p8253ctr0equ40h;8253的数据口

cnt0equ11930;用来计算频率

4.1.2变量的置

buff1db36dup(?

);定义一个数组用来存放前八个成绩

pmdb1;定义名次

numdb1;个数

flagdb0;标志位

pointdwbuff1;定义指针

point1dwbuff1;定义指针

buffdb0,0,0,0;初始化数据缓冲区

bitdb1;位码置1

messdb'0-暂停计时1-开始比赛2-记录成绩3-比赛结束

4-显示成绩r-:

退出返回DOS',0dh,0ah,'$'

dsegdb0c0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;

数据‘0’~‘9’

ASCTABDB"0123456789abcder"

countdb0;用来计时,初始化为0

4.2程序流程图

4.2.1主程序流程图如下

程序

.code;代码段

.startup;开始

movah,9;9号调用显示mess中的内容

leadx,mess

int21h

moval,36h;写8253的方式字

movdx,p8253ctr1

outdx,al

movax,cnt0

movdx,p8253ctr0;写初值

outdx,al

moval,ah

outdx,al

moval,81H;8255初始化

movdx,0c803H

outdx,al

moval,inttype

movah,35h

int21h

pushes;将es,bx,ds入栈保护

pushbx

pushds

movax,@data

moves,ax

movdx,offsetintp;取intp的偏移量

movcx,segintp;取intp的段地址

pushds

movds,cx

moval,inttype;设置inttpye的新中断向量

movah,25h

int21h

popds;将ds出栈

inal,21h;CPU开中断(开IR0)

andal,11111110b

out21h,al

movax,ds

moves,ax

sti

ab:

callbutton调用键盘模块

cmpal,'r';退出

jzreturn

cmpal,'0';停止计数

jzac

cmpal,'1';开始计数

jzac1

cmpal,'2';记录数据

jzac2

cmpal,'3';比赛结束

jzac3

cmpal,'4';显示数据

jzac4

popdx;将dxds出栈

popds

moval,inttype;设置新的中断向量

movah,25h;25号dos调用

int21h

.exit0;主程序结束

4.3秒表功能键流程图

4.3.1开始比赛程序框图:

程序

movpm,1;重置名次

movnum,1;重置个数

movbuff,0;将缓冲区清空

movbuff+1,0

movbuff+2,0

movbuff+3,0

orflag,01h;标志位置1

jmpab

 

4.3.2名次存储程序框图:

程序

ac2:

moval,pm;将第一位的名次先放到buff,然后一起放入数组

movbuff,al

leasi,buff

movdi,point

movcx,4;传送次数cx次

cld;df=0

repmovsb;重复搬移

cmppm,8;如果名次到了8个,则将标志位置零,然后就不能存储了

jznext1

incpm

addpoint,4

jmpab

next1:

andflag,0feh

leabx,buff1

movpoint,bx

jmpab

4.3.3显示成绩程序框图:

程序

ac4:

andflag,0feh

cmpnum,9;判断是否按过8次,是退出,否则继续

jzac5

incnum

movdi,offsetbuff

movsi,point1

movcx,4

cld

repmovsb

addpoint1,4

jmpab

ac5:

movpoint1,offsetbuff1

movnum,1

jmpab

4.3.4比赛结束及返回DOS程序框图:

程序

andflag,0;标志位置0

movpm,1;重置名次

movnum,1;重置个数

movbuff,0;将缓冲区清空

movbuff+1,0

movbuff+2,0

movbuff+3,0

jmpab

popdx;将dxds出栈

popds

moval,inttype;设置新的中断向量

movah,25h;25号dos调用

int21h

return:

cli;关中断

4.4中断程序框图:

中断程序

intp:

pushsi;入栈

pushdi

pushax

pushbx

pushcx

pushdx

testflag,01h;判标志位,为1则记数

jziexit

inccount;次数自加

cmpcount,10;将count和10比较

jnziexit;若count不等于10,则转iexit

movcount,0;否则count置0

incbuff+3;0.1秒位自加

cmpbuff+3,10;将0.1秒位和10相比较

jnziexit;若0.1秒位不等于10,则转iexit

incbuff+2;否则向秒位进1

movbuff+3,0;将0.1秒位置0

cmpbuff+2,10;将秒位和10相比较

jnziexit;若秒位不等于10,则转iexit

incbuff+1;10秒位自加

movbuff+2,0;将秒位置0

cmpbuff+1,6;将10秒位和6相比较

jnziexit;若10秒位不等于6,则转iexit

movbuff+1,0;将10秒位置0

iexit:

leabx,dseg;取数据表的首地址

leasi,buff;取缓冲区的首地址

agi:

moval,[si];将si的内容送给al

xlat;将ASCII码转换成数据

cmpbit,04h;判断是否为第二位,是则加上点,否则继续

jnzac6

andal,07fh

ac6:

movdx,0c800h;取相应的段和位

outdx,al

movdx,0c801h

moval,bit

outdx,al

movdi,30;延时

movcx,0

delay:

loopdelay

decdi

jnzdelay

incsi;缓冲区地址加1

shlbit,1;将位加1

cmpbit,10h;将bit和10h相比

jnzagi;不等于则循环

movbit,1;否则将bit置1

moval,0

outdx,al

moval,20h;将8259偶口中的数据输出

out20h,al

popdx;出栈

popcx

popbx

popax

popdi

popsi

iret

五、课程设计心得体会

历时两周的课程设计圆满结束了,本次课程设计我们选作的课题是数字式秒表,该计价器设计包括线路设计,键盘设计、LED显示三个主要部分组成。

其中键盘包括六个功能键:

0-暂停计时,1-开始比赛,2-记录成绩3-比赛结束4-显示成绩r-:

退出返回DOS.

通过这次课程设计,我获益匪浅,不仅对微机系统的接口篇有了系统的认识,而且弥补了平时上课和做实验时遗留下的漏洞,掌握了具体系统设计的基本方法和模块化设计的思想。

实验开始时首先理清硬件设计的主要架构,清楚主要的设计流程,有模块的主要思想,然后将程序分成几个小的模块,这样设计就比较方便,修改错误时也更加方便,然后再逐步实现每个模块的功能,从每一个小模块做起,最终完成整个秒表的设计。

本次实验遇到了很多问题,如我们的程序运行的时候总会当机,后来发现设置8253的频率时频率设置的过低,导致中断程序执行的时间超过了中断的时间,最后将频率扩大了十倍才解决了问题,这个问题说明我们的中断程序一定要尽量的简短,不要什么功能都在中断程序内实现.

本次实验还学到一个今后汇编编程中相当有用的方法,单步调试,这样不仅能发现到底是在哪条程序出错,还能防止程序跑飞掉造成当机等不必要的麻烦.

我们在编写程序的时候一定要考虑硬件本身的问题和难以突破的瓶颈,在编写程序的时候就想办法用软件来解决,如我们实验箱上的键盘按键不灵,虽然做了键盘的延时去抖动,但还是按一下出现很多个字母,后来老师教了一种用软件解决的方法,再加一个判释放的程序,这样就解决了键盘的问题,我们今后在做项目的时候一定要将软件和硬件结合起来,不能将任何一个孤立起来,写程序的时候一定要考虑硬件本身的因素,要对硬件相当的熟悉,不能只为了写程序而写.

最后老师还要求我们以写论文的格式来写这篇课程设计报告,并且所有用到的图标都要用visio来画,不仅教会了我们怎样写一篇规范的科技论文,而且为我们明年做毕业设计时打下了坚实的基础.

总的来说,通过两周的动手实践,对一个课题的线路设计到实现这个流程有了初步的了解。

对汇编语言有了系统的认识,对一些汇编语句的使用更加熟悉,对8255,8253和8259的联合设计开发也有了深入的理解,同时通过与老师的交流对自己的专业方向和以后的就业方向也有了一些了解,清楚了自己专业的前景,使自己更加有信心在这个方向上走下去.

六、参考文献

1.《微机原理与接口技术》韩雁徐煜明,电子工业出版社,2007年1月

2.《微型计算机接口技术》李大友,清华大学出版社,2000年

3.《微型计算机系统原理及应用》周明德,清华大学出版社,1996年

 

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

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2