微机原理课程设计.docx
《微机原理课程设计.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
微机原理课程设计
课程设计报告
课程名称:
微机原理课程设计
课题:
简易电子广告牌设计
专业班级:
计算机系13101班
学号:
姓名:
指导老师:
日期:
2013年6月24日
教师评语:
成绩评定:
指导教师(签名):
目录
1.课题简介3
2.设计方案3
3.具体设计3
3.1硬件设计3
3.2软件设计7
4.测试13
4.1测试过程中遇到的问题记录13
4.2测试结果14
5.总结15
6.参考文献15
1.课题简介
通过课程设计,进一步巩固所学的知识,并将所学的内容加以综合运用。
将所学的理论与实际问题或应用相结合,进一步培养自主学习的能力,综合运用知识的能力,以及创新实践的能力。
并且了解双色点阵LED显示器的基本原理,掌握PC机控制双色点阵LED显示程序的设计方法。
2.设计方案
本次设计利用双色8×8LED点阵制作简易电子广告牌。
为了实现课程设计的基本要求,我利用红色LED点阵滚动显示汉字,利用黄色LED点阵实现迅速变化的流水灯边框,使用8253定时器实现延时子程序的延时功能,并把黄色LED点阵与红色LED点阵分别设置成不同的变化速度。
我们的创新之处在于,利用流动变化的黄色LED点作为显示屏的动态边框,为黄色LED流水动态效果设置为红色点阵变化速度的16倍,并使黄色的光点留有余晖,画面极具动态效果。
3.具体设计
3.1硬件设计
(1)元件与仪器:
8255芯片、8253芯片、8×8双色LED点阵、CPU、(储存器)、PCI连接线、主板
(2)硬件工作原理:
系统以CPU为中心,CPU通过地址、数据、控制总线连接存储器、LED点阵、8253芯片和8255芯片,作为逻辑枢纽控制着外设的协调运作,另外8255芯片与8253芯片单独相连接,将8253芯片的输出端连接到8255芯片的一个I/O口.
CPU按照一定的顺序将点阵信号发送到LED点阵,由于LED点阵显示需要一定的暂留时间,通过8353定时器可以设置延时,使点阵发光的时间足够长;CPU通过查询8255的端口了解8253的工作状态。
(3)框图说明:
(4)地址分配表:
8255A口:
2A0H
8255控制口:
2A3H
8253时钟0:
298H
8353控制口 :
29BH
LED点阵行线 寄存器片选:
280H
LED点阵红列线 寄存器片选:
288H
LED点阵黄列线 寄存器片选:
290H
(5)电路图:
(6)硬件电路连接:
LED
8253
1MHZ
+5V
(7)重要芯片功能说明:
8*8LED显示器:
三个片选端,分别为行片选,红色列片选,黄色列片选。
8253可编程定时/计数器:
本实验中只使用计数器0,并将其设置为工作方式0,16为计数。
8255可编程并行接口:
8255有3种工作方式,在8255中有一个控制字用来选择工作方式和A、B、C三个端口。
D6
D5
工作方式
0
0
方式0
0
1
方式1
1
0
方式2
1
1
方式2
按图1虚线连接电路,将计数器0设置为方式0,计数器初值为N(N≤0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。
1、用8253的计数器0和计数器1作为1MHz时间的的分频,使间脉冲变成1Hz,由计数器1的OUT口输出,并把OUT口接到8255的PA0端口,目的是让8255去读这个端口的值,为程序中的定时,当时间到时就变换字。
2、8253的两个计数器用工作方式2(分频器)和工作方式3(方波发生器),8255采用工作方式0,输出口为A口的第一个口PA0。
3、显示块的三个片选端口分别接的是实验板上I/O口地址的298h(行显示),288h(红色列显示线),290h(黄色列显示线)
4、接通电源,运行测试程序,由8253计时,8255检测8253OUT口的电平值,直到低电平就显示下一个字,并且中间有一定的器件延时。
(8)设计原理及思路:
a.红帧的处理方法:
将要显示的点阵按列存储,每一列用一个八位二进制数a[n]来存储,因此,‘信工五班’四个字的字模大概需要45个二进制数来表示,其中记n=i+k,i为红帧的第i帧,k为该帧的第k列。
由于LED点阵的显示方式为逐行扫描,因此,每显示一帧需要做k=0到7的for循环,循环内容为,把a[i,k]输出到“led红行寄存器”,并使点阵的第k列点亮。
记imax=45-7,当i=imax帧循环显示结束后,程序重新开始。
b.黄帧的处理方法
如图所示,黄色两点沿着图示的轨迹运动,对黄帧处理的关键是把帧显示和帧调整两个模块分开。
对于帧显示模块,显示黄帧模块可以和显示红帧模块放在一起,红帧每显示一次,黄帧也显示一次。
但对于帧调整,由于设计的效果为红黄帧以不同的速度运动,因此,在红帧调整和黄帧调整之间需要加入for循环——黄帧每改变16次,红帧才改变一次。
黄帧调整子程序(设黄点处于(x,y)坐标):
①如果x=0,y②如果x③如果x=N,y>0,那么y—
④如果x>0,y=0,那么x—
此程序可使(x,y)坐标始终绕着边框移动
c.要注意的地方
①由于CPU写入行寄存器信息和写入列寄存器信息不是同步进行的,如果在对行寄存器赋值后列寄存器仍保存着上一次的值,那么,前后两次扫描之间就会产生干扰,出现类似数字电路中经常出现的“竞争与冒险现象”,因此,在切换显示内容的时候要注意先把行列寄存器清零,再重新赋值,这个过程称为“消影”。
②由于LED点阵的亮度取决于点亮的时间,因此,要使LED点阵亮度尽可能的高,需要在点亮每列的时候进行延时。
延时子程序使用了8253芯片和8255芯片进行定时
3.2软件设计
(1)程序流程图:
(2)关键代码段源码及分析:
protequ0ec00h-280h
prothequprot+280h
protlrequprot+288h
protlyequprot+290h
io8253aequprot+298h;计数器1
io8253a1equprot+299h;计数器1
io8253bequprot+29Bh;计数器控制
io8255aequprot+2A0h;并行1
io8255bequprot+2A3h;并行控制
;io0832aequprot+290h;DA口
DATASEGMENT
rhdb0eeh
rldb0eeh
yydb01h
xxdb01h
xdb0
ydb0
cntdb0,0
ddb0,0
jdw0
testpdb0
delaytimedw1h
;min1DB00h,01h,02h,03h,04h,05h,06h,07h,08H,09H,0AH,0BH,0CH,0DH,0EH
countdb0
BUFFDB0,0,0,0,0,0,0,0,20H,7FH,80H,47H,7DH,0FDH,7DH,47H,0H,02H,42H,42H,42H,7EH,42H,42H,02H,0H,02H,52H,52H,7eH,52H,52H,5eH,02H,0H,91H,0FFH,91H,38H,0FEH,91H,0FFH,91H,0,0,0,0,0,0,0,0
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA;初始化程序
MOVDS,AX
moval,00h;对LED行列寄存器进行初始化
movdx,proth
outdx,al
movdx,protly
outdx,al
movdx,protlr
outdx,al
main:
incj;红帧调整
cmpj,2ch
jlifend
movj,0
ifend:
movcx,0fh
zhenloop:
pushcx;
movcx,00fh
callyellowxy;黄帧调整
loop1:
pushcx
movcx,8
looph:
movbx,offsetbuff;显示红列
movax,8
subax,cx
movsi,ax
addax,j
xlat
movdx,proth
outdx,al
movdx,protlr
pushcx
movah,80h
movcx,si
shrah,cl
popcx
moval,ah
outdx,al
calldelay3
moval,00h;红帧消余辉
movdx,proth
outdx,al
moval,00h
movdx,protlr
outdx,al
looplooph
popcx
;显示黄帧
moval,xx
movdx,proth
outdx,al
moval,yy
movdx,protly
outdx,al
calldelay3
moval,00h;黄帧消余晖
movdx,proth
outdx,al
moval,00h
movdx,protly
outdx,al
looploop1
popcx;for帧循环end
loopzhenloop
jmpmain
;-------------------
delay3procnear;延时子程序
ccc:
movdx,io8253b;置8253通道0为方式0工作
moval,30h
outdx,al
movdx,io8253b;1M时钟接到这,两个gate都接高电平
moval,74H
outdx,al
movdx,io8255b;设8255A口输入
moval,90h
outdx,al
movdx,io8253a1
movax,700
outdx,al;向8253通道1输出
moval,ah
outdx,al
movdx,io8253a
movax,100
outdx,al;向8253通道0输出
moval,ah
outdx,al
kkk:
movdx,io8255a
inal,dx;从8255A口读一字节
testal,01;判PA0口是否为1
jzkkk;若不为1,则转KKK
ret;子程序返回
delay3endp
;-------------------
yellowxyprocnear;黄帧调整子程序
pushax
moval,cnt
incal
movcnt,al
ifa1:
moval,x
cmpal,0
jeifa2
jmpifb1
ifa2:
moval,y
cmpal,7
jlifa
jmpifb1
ifa:
incy
jmpifout
ifb1:
moval,y
cmpal,7
jeifb2
jmpifc1
ifb2:
moval,x
cmpal,7
jlifbe
jmpifc1
ifbe:
incx
jmpifout
ifc1:
moval,x
cmpal,7
jeifc2
jmpifd1
ifc2:
moval,y
cmpal,0
jgifc
jmpifd1
ifc:
decy
jmpifout
ifd1:
moval,y
cmpal,0
jeifd2
jmpifout
ifd2:
moval,x
cmpal,0
jgifd
jmpifout
ifd:
decx
jmpifout
ifout:
nop
popax
callxy2grid
ret
yellowxyendp
;-------------------
;-------------------;将黄帧(x,y)坐标用one-hot形式表示
xy2gridprocnear
pushcx
pushax
movcl,x
moval,1
shlal,cl
movxx,al
movcl,y
moval,1
shlal,cl
movyy,al
popax
popcx
ret
xy2gridendp
;-------------------
CODEENDS
ENDSTART
4.测试
4.1测试过程中遇到的问题记录
(1)显示图像较暗。
这个问题发生的原因在于,LED点阵的显示方式为逐列扫描,在某列点亮的时候,其余的列均为关闭状态,于是,每行的停留时间决定了最终图像的亮度。
当我们把延时程序的延时值设成一个更大的值之后,问题得以解决。
(2)显示的文字旁边出现影子或多余的亮点。
出现这个问题的原因在于,CPU写入行寄存器信息和写入列寄存器信息不是同步进行的,如果在对行寄存器赋值后,列寄存器仍保存着上一次的赋值,那么,前后两次扫描之间就会产生干扰,出现类似数字电路中经常出现的“竞争与冒险现象”,显示的混乱图像实质上是当前的列信息与上一组行信息的混合体。
解决方法是,显示完某一列之后,分别对行列寄存器进行清空,再进行下一列的显示。
(3)某行全亮,但其他行正常显示。
造成这个问题的原因,有可能是LED点阵损坏,另一种原因是类似第二点故障的原因——由于行列寄存器没有清空造成显示混乱。
在更换实验板以及加入消影操作之后,问题得到解决。
(4)第一次调试正常运作,在不改动的情况下进行第二次调试,屏幕上却出现了混乱的图像。
这是因为程序开始时没有对寄存器进行初始化赋初值操作,以至于寄存器还保存着上一次运行时的值,于是造成错乱。
(5)loop跳转范围过大出错。
解决这个问题,可以把loop改写成比较指令cmp加比较跳转指令je加上无条件跳转指令jmp。
另外,在调试过程中,我们还得到了很多经验与教训。
比如说,
(1)编写汇编程序时应该利用好变量,因为寄存器的个数对于编写一个较为复杂的程序而言太少了,而变量是近乎无限的,它的作用可以代替寄存器,解决临时储存空间不足的问题。
对于一个结构化的程序而言,寄存器的工作范围应该仅限于一个动作——一个规模最小的模块,进出模块都需要对寄存器进行入栈出栈操作,避免把寄存器的工作范围扩大化,这样不利于程序的模块化。
(2)学会了如何运用汇编语言编写各种经典的分支循环结构(if…else分支及其嵌套、case分支、for循环、while循环、repeat循环)以及子程序的编写方法,对跳转指令也有了更深的认识,
(3)学会了利用8253芯片进行计时和利用8255芯片作为i/o口扩展,学会了LED点阵的工作方式,对于进一步学习类似工作方式的器件如键盘阵列很有帮助。
4.2测试结果
设计作品最后调试成功,运行情况理想。
实现了当初设计的要求——红色的文字滚动显示,在显示滚动文字的同时,有一黄色光点在屏幕的边上旋绕。
5.总结
在这次课程设计过程中我学到了很多东西。
调试程序的过程是辛苦的,当一个故障发生的时候,往往不知道故障是发生在什么地方,来自硬件还是软件?
如果是硬件,是接触不良还是器件损坏?
如果是接触不良,是哪里接触不良?
如果是器件损坏,是哪里损坏了?
如果故障来自软件,是实验环境出错了还是编写的代码出错了?
出错的地方在哪里?
我们在调试的过程中遇到的最大的问题在于实验板的可靠性不高,有的时候原本正常运行的程序,在第二次运行的时候出现了显示结果混乱,更换一块实验板后恢复正常。
另外,实验环境存在bug,表现为不能生成目标文件,重启环境后能够恢复正常。
通过一次综合的小型微机应用系统的软硬件设计,通过课程设计,进一步巩固所学的知识,并将所学的内容加以综合运用。
将所学的理论与实际问题或应用相结合,进一步培养了我们自主学习的能力,综合运用知识的能力,以及创新实践的能力。
并且了解双色点阵LED显示器的基本原理,掌握PC机控制双色点阵LED显示程序的设计方法。
6.参考文献
[1]周明德.微型计算机系统原理及应用.北京:
清华大学出版社
[2]唐朔飞.计算机组成原理.北京:
高等教育出版社