湖南科技大学微机原理课程设计Word格式.docx
《湖南科技大学微机原理课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《湖南科技大学微机原理课程设计Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
当然目前自己的知识与水平是非常有限的,设计报告中还存在很多的不足与错误,恳请老师与读者批评指正。
第一章绪论
1.1设计的目的及意义
微机原理和接口技术是一门实践性强的学科,不但要求有较高的理论水平,而且还要求有实际的动手能力,其中很多的原理、规则、现象等仅仅靠学习教科书是无法完全掌握的,必须通过实践才能比较直观和深刻的理解。
本课程设计任务和目的是:
帮助学生巩固和加深理解所学的理论知识,训练学生的实验技能,使其树立工程观点和严谨的科学作风,初步具有运用理论知识分析问题、解决问题的能力。
培养学生运用所学的理论解决实际问题的能力,使学生初步掌握分析简单电路,调试简单汇编程序以及撰写课程设计报告的能力。
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
致谢
最后在此感谢各位指导老师以及研究生学长的帮助与指导。