课程设计 8253的脉冲计数器分频器设计报告Word文件下载.docx

上传人:b****6 文档编号:19763905 上传时间:2023-01-09 格式:DOCX 页数:17 大小:383.29KB
下载 相关 举报
课程设计 8253的脉冲计数器分频器设计报告Word文件下载.docx_第1页
第1页 / 共17页
课程设计 8253的脉冲计数器分频器设计报告Word文件下载.docx_第2页
第2页 / 共17页
课程设计 8253的脉冲计数器分频器设计报告Word文件下载.docx_第3页
第3页 / 共17页
课程设计 8253的脉冲计数器分频器设计报告Word文件下载.docx_第4页
第4页 / 共17页
课程设计 8253的脉冲计数器分频器设计报告Word文件下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

课程设计 8253的脉冲计数器分频器设计报告Word文件下载.docx

《课程设计 8253的脉冲计数器分频器设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《课程设计 8253的脉冲计数器分频器设计报告Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。

课程设计 8253的脉冲计数器分频器设计报告Word文件下载.docx

1.2设计期望实现的目标

在计算机应用系统中,常常需要实时时钟,有时也需要对外部事件进行计数,而可编程计数器的计数范围可由软件来设定改变,不占用CPU大量时间,所以使用方便,且功能较强。

本次课程设计所选题目为基于8253的脉冲计数器/分频器设计,设计的基本目的是:

(1)设计一个能对2MHZ以下的脉冲信号进行分频的器件。

(2)分频系数由试验箱中的K1~K8逻辑开关控制输入

(3)由LED数码管显示分频系数,为简便设计本次设计只使用四个数码管,即分频系数最大值为9999(十进制)

1.3目标的可行性分析

通过微机原理与接口课程的学习,在理论上设计目标是可以实现的,结合学校用的AEDK8688ET实验教学系统在设计合适的软硬件模块能够实现此课程设计的目标。

1.4使用的技术和方法

通过在AEDK8688ET实验教学系统上搭建硬件环境,通过外设计算机提供软件编译环境两者结合起来,由汇编实现编程控制。

第二章硬件设计

2.1设计原理与分析

一、分频(8253芯片)

可编程定时器/计数器8253可以作为分频器使用。

让其工作在方式3,在这种方式下,8253可以根据输入的分频系数N,把从CLK口输入的高频率脉冲进行分频。

分频的具体方法是,先输入分频系数,保存起来,开始时,OUT输出的是高电平,向WR输入一个负脉冲后,从该负脉冲上升后CLK第一个下降沿开始,每过一个CLK输入波形的周期将输入的分频系数N减一,当减到分频系数的一半N/2时,OUT输出低电平,分频系数减到1时,再输入高电平,并重复,这样,频系数为N,OUT就输出周期为CLK周期的N倍,换句话说,就是把CLK方波的频率分成了原来的1/N。

由于8253输入的最高频率是2MHZ,分频系数最大输入的数值是65536(采用十进制),而此次实验N≤9999,分频后频率将近200HZ,这样的频率肉眼是无法分开的,输入小一点的值就更看不出来了,所以,要把2MHZ的脉冲经过两次分频,才能达到肉眼可以分辨的程度。

所以,这里要用到8253的两个计数器,第一个计时器的CLK输入接2MHZ的固定频率脉冲,OUT口接第二个计数器的CLK输入接口,OUT口输出。

二、输入输出(8255A芯片)

分频器的输入输出要用到8255A芯片。

在本设计中,8255A设置为方式0,方式0的工作特点是,不用联络信号,不使用中断,三个通道中的每一个都有可以由程序选定作输入或输出。

在方式0下,CPU采用无条件读写方式与8255A交换数据,8255的每个口都作为基本的输入/输出口,用来在设计中输入和输出显示分频系数,其中PC口接8位开关,用来输入分频系数。

PB和PA用来输出显示,一个位选,一个段选,在LED数码管上显示分频系数。

因本设计中的分频系数在2~9999,所以要用到4位LED显示位。

PC接8位开关,头4位用来输入二进制数值,第五六位输入用来表示这次输入的数值是十进制分频系数的哪一位。

第七八位用来控制输入输出。

PB口用来输出位选信号,PB口输出的信号决定把当前要显示的数值显示在LED显示屏四位数值的哪一位上。

PA口用来输出要输出的数值。

四位数值经过程序组成四位的十进制数值,作为分频系数。

2.2硬件功能模块

实验系统:

本实验系统由AEDK8688ET实验机外配计算机和其他一些附件及选配件组成:

AEDK688ET教学实验系统集微处理器8088和外配PC/80286/386/486/586及其兼容机于一体的高科技实验系统,具有实验、开发、自诊断等功能。

该实验系统自带键盘、八位七段数码管、微处理器8088和RS-232通讯接口,可以接PC机做实验,也可以无须任何辅助设备而独立做实验。

综合下来,它具有如下性能特点:

独立运行的单板机配置方式。

ISA总线配置方式。

串行监控配置方式。

本次设计将用到的主要模块:

(1)可编程定时/计数器模块8253

(8253内部结构)

8253芯片由以下几个部分组成:

(1)数据总线缓冲器(8位、三态、双向;

(2)读/写控制逻辑:

CS:

片选信号,低电平有效;

RD:

读信号,低电平有效;

WR:

写信号,低电平有效

A1,A0:

端口选择信号

(3)三个通道(0~2);

(4)一个控制字寄存器;

8253芯片一些主要功能设置如下:

(1)读/写控制逻辑及控制引脚

CS*A1A0

I/O地址

读操作RD*

写操作WR*

000

001

010

011

40H

41H

42H

43H

读计数器0

读计数器1

读计数器2

无操作

写计数器0

写计数器1

写计数器2

写控制字

(2)控制字寄存器,控制字格式如下:

(3)计数器

8253内部共有三个一样的计数器,其每个计数器的引脚作用:

a.CLK时钟输入信号

在计数过程中,此引脚上每输入一个时钟信号,计数器的计数值减1

b.GATE门控输入信号

控制计数器工作,GATE为高电平时计数器工作。

c.OUT计数器输出信号

当一次计数过程结束(计数值减为0或1),OUT引脚上将产生一个输出信号

(4)六种工作方式

1.方式0—计数结束中断方式

2.方式1—可编程但稳态方式

3.方式2—频率发生器

4.方式3—方波发生器

OUT输出方波,若N为偶数,则输出对称波,前N/2计数器期间OUT输出高电平,后N/2计数周期OUT输出低电平:

若n为奇数,则前(N+1)/2计数器期间OUT输出高电平,后(N-1)/2计数周期OUT输出低电平。

5.方式4—软件触发选通

6.方式5--硬件触发选通

(5)编程设置方式

1.写控制字:

MOVDX,控制寄存器地址

2.写计数值:

MOVAL,DATA

3.写入:

MOVDX,AL

(2)频率源电路

该电路对从8284的第5脚来的4.77MHZ的频率进行分频以产生适合串行通讯波特率的频率以及供其它分频器和A/D转换器等电路使用的频率。

(3)可编程并行口8255模块

一、8255A的基本性能

8255A具有三个相互独立的输入/输出通道:

通道A、通道B、通道C。

A,B,C三通道可以联合使用,构成单线、双线或三线联络信号的并行接口。

此时C口完全服务于A、B口。

A口有三种工作方式:

方式0、方式1、方式2。

B口有两种工作方式:

方式0、方式1。

二、8255A内部结构

8255A内部结构由以下四部分组成:

数据端口A、B、C;

A组控制和B组控制;

读/写控制逻辑电路;

数据总线缓冲器。

三方式选择控制字格式:

 

(C端口置1置0控制字)

四,各方式功能

方式0是一种基本输入或输出方式,它适用于无需握手信号的简单输入输出应用场合,端口A、B、C都可作为输入或输出数据使用,输出有锁存而输入无锁存。

方式1也称选通的输入/输出方式。

在这种方式下,无论是输入还是输出都通过应答关系实现,这时端口A或B用作数据口,端口C的一部分引脚用作握手信号线与中断请求线

3.3设计原理图与PCB

(原理图)

(译码电路)

YO地址-204H~~207H

Y3地址-214H~~217H

(PCB版)

第三章软件设计

3.1程序分析

输入数值,要初始化8255芯片。

使其以PC口为输入,PB口输出段选,PA口输出位选,控制字为10001001b。

然后输入PC口的值,判断PC口的第八位是否等于1,如果等于1,则设置初值,否则循环,继续判断PC口的第八位。

这样,把PC7扳为1,就表示开关的数值写到内存里了。

前面已经说道了,PC口的前四位,即PC0,PC1,PC2,PC3是用二进制表示要输入的数,第五六位,即PC4,PC5用来表示这个数是整个四位十进制数的哪一位,所以,要把这两个数分开,分别放到两个寄存器中。

这里用到的方法是,先把PC口的数字送到AL中,然后把AL复制到AH,它们组成了AX。

然后把AX和二进制数0000111100110000进行与运算,这样,AH中保留了原先PC口的前四位数据,AL中保留了PC口的第五六位数,这样,就可以把AH中的数按照AL的数值把它放到四位十进制计数值的相应的位。

这里说下PC6即PC口第七位的作用,这一位是用来显示数据的。

把PC6扳为1,则调用显示函数。

输入完数据以后,计数值的四位数字还是分散的四个数,要把它们结合成一个四位数。

之前输入的四个数分别在以BEGINT为首地址的四个单元内,这里调用together函数,先去第四位数(左边第一位数),把它乘以10,再加上第三位数,然后把它们的和乘以10,再加上第二位数,再乘以10,再加上第一位数,这样就成了一个整的十进制数N。

在程序设计中,这个过程用三个循环来实现,具体见后面的程序。

上面的步骤完成后,8253计时器开始分频,要分两次,先使用计数器#0,把它进行初始化,让它工作再模式3,控制字为00110101B,然后输入计数初值N,这是第一次分频。

然后初始化计数器#1,也让其工作再模式3,BCD码计数,然后输入计数初值,完成第二次分频。

分频之后,判断PC6是否等于1,如果等于0,从新读取计数初值。

前面提到了数码管显示子程序,这里介绍它执行的过程。

前面再PC口输入的数据,一一存到以BEGINT为首地址的四个单元内。

再这里,按位一次再LED数码管上显示这四个数。

先显示第一位(右边第一位),此时位选码位11111110,(要显示右边第二位就是11111101,依次类推)由PA口送出。

程序将BEGINT的第一位数据和数码管显示数组相结合,生产相应的段选码,送到PB口进行段选,即再数码管显示屏上的第一位显示BEGINT的第一位数字。

然后,将位选吗循环左移一位,来显示第二位数。

这样,循环执行,知道显示四个数。

3.2程序代码

(由于对汇编语言的生疏,在编写中遇到极大的麻烦,因此查阅借鉴引用了部分已有程序代码)

源程序:

.MODELTINY

.STACK100

.DATA

COM_ADDDW217H;

控制口偏移量

PA_ADDDW214H;

PA口偏移量

PB_ADDDW215H;

PB口偏移量

PC_ADDDW216H;

PC口偏移量

COM_ADDRDW207H

T0_ADDRDW204H

T1_ADDRDW205H

T2_ADDRDW206H

TIMEdb

3fh,06h,5bh,4fh,66h,6dh,7dh,27h,7fh,6fh,76h,76h,76h,76h,76h,76h;

段选码表

BEGINTdb00h,00h,00h,00h

NUMBERdw0000h

moval,10001001b;

8255芯片初始化以PC

口为输入,PB口输出段选,PA口输出位选

movdx,COM_ADD

outdx,al;

将初始化信息写入8255芯片控制口

loop3:

movdx,PC_ADD;

取8255C口地址

inal,dx;

将从C口打入的开关量输入至AL

andal,80h;

取PC口第七位的状态

cmpal,80h;

判断PC7=1?

jesettime;

等于1则设置初值

loop4:

callTDISP;

否则显示编码

jmploop3;

继续查看C口状态

;

设置初值子程序

settime:

movbx,offsetbegint;

BX存放的要显示的数据值的偏移地址

送pc口地址

inal,dx

movah,al;

低位不变,ah、al中内容用于判断和存据

andax,0f70h;

0000111100110000b,屏蔽保4,5位后,用于位选LED八位的高低位

movcl,4;

设置左移位数

shral,cl;

循环左移4位00110000,

movcx,0;

CX清零,利用低8位传送

movcl,al;

循环后对应00,01,10,11

addbx,cx;

BX里存放是从逻辑开关

打入的数据的偏移地址bx是begint的首地址,加上cx表示第几个数

movbyteptr[bx],ah;

将AH中的内容以字节的形式存放到指定元

andal,40h;

取PC口第六位的状态

cmpal,40h;

判断PC6=1?

jegoon

转换为16位数据并显示

jmploop3

goon:

CALLTOGETHER

movdx,com_addr

moval,35h

计数器#0设置在模式2

movdx,T0_addr

movax,number

outdx,al

moval,ah

moval,77h

计数器#1设置在模式3状态

movdx,T1_addr

START1:

movdx,PC_ADD;

inal,dx

jeSTART1

数码管显示子程序,完成显示功能。

TDISPproc;

显示4位10进制,因此设四次循环

loop1:

movsi,offsetbegint

movcx,4

movah,11111110b;

设置位选码,即LED0显示,如FEFFH

loop2:

moval,byteptr[si]

movbx,offsettime;

取time偏移地址如

0151H

xlat;

查数据段表,

[al+bx]->

alal决定是time中的第几个数

movdx,PB_ADD;

送PB口地址段选

moval,ah;

送位选码

movdx,PA_ADD;

送PA口地址进行位选

calldelay;

执行子程序,显示灯

moval,0ffh;

禁止显示

addsi,1

rolah,1;

设置下次显示的位选码

looploop2;

循环

从开关读取另一组16位二进制数据

ret

TDISPendp

延迟子程序

delayproc;

延迟子程序,实现延时的功能。

pushcx

movcx,100h

loop5:

nop

looploop5

popcx

delayendp

togetherproc;

计算分频值子程序

leasi,begint

addsi,3

movbx,0

loop8:

movax,[si]

cbw

movdx,10

xchgax,bx

muldx

addbx,ax

decsi

looploop8

movnumber,bx

togetherendp

Exit:

MOVAH,4CH

INT21H

ENDSTART

编程感触:

汇编语言作为最基本的程序语言之一,汇编语言虽然应用的范围不算很广,但重要性却勿庸置疑,因为它能够完成许多其它语言所无法完成的功能。

学习汇编语言,向上可以理解软件,向下能够感知硬件,是我们理解整个计算机微机系统的最佳起点和最有效途径。

第四章总结

本次课程设计的结果基本达到了要求,实现了由二进制开关输入数据,并转换为十进制数的字型码输出,循环显示编码结果。

利用指示灯来显示分频的效果,可以输入数值来改变指示灯闪烁的频率。

这次微机原理与接口技术的课程设计既有硬件设计,又有软件设计,而且两者有机的结合在一起,是一次意义深刻的经历。

在两个星期的设计时间里,我们从刚开始的不知如何下手到慢慢的找到门道并对课题原理也渐渐理解,在设计的过程中我们明白到遇到问题不是不加思考的就问老师问学长,而是通过自己的思考探索查阅资料并得以解决,这对我们的独立解决问题的能力有很大的帮助,折射到我们面对生活也是一样的道理。

在课程设计的过程中也遇到很多的困难,如对汇编语言的不熟悉,实验系统的不稳定性等这些问题,在老师与研究生学长的指导下加上自己查阅资料大部分都得到解决。

在设计初期并没有加入8255A以及LED显示的,后经学长的提示才加入进来,从而加大了设计的含金量,这也加大了设计实现难度,在时间上感到有些紧迫,但最后还是完成了设计目标,

同时,通过这次课程设计对微机原理这门课程的认识也得到了加深,初学课程是感觉摸不着头脑,面对陌生的名词,陌生的汇编语言感觉这就是最难的课程,但随着学习的深入感觉到原来这是一门都么有趣的课程,通过学习能对生活中的一些设备的认识不再是停留在它的外观,而是有了科学的理解等等。

在今后的学习中我们更应该注重理论与实践的结合,努力加强自己的综合素质培养。

参考文献

[1]朱晓华.微机原理与接口技术(第二版)

[2]欧青立,沈洪远.微机原理与接口技术实验指导书

[3]XX

致谢

最后在此感谢各位指导老师以及研究生学长的帮助与指导。

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

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

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

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