微机原理课程设计.docx

上传人:b****8 文档编号:23890127 上传时间:2023-05-21 格式:DOCX 页数:20 大小:334.09KB
下载 相关 举报
微机原理课程设计.docx_第1页
第1页 / 共20页
微机原理课程设计.docx_第2页
第2页 / 共20页
微机原理课程设计.docx_第3页
第3页 / 共20页
微机原理课程设计.docx_第4页
第4页 / 共20页
微机原理课程设计.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

微机原理课程设计.docx

《微机原理课程设计.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计.docx(20页珍藏版)》请在冰豆网上搜索。

微机原理课程设计.docx

微机原理课程设计

课程设计报告

课程名称:

微机原理课程设计

课题:

简易电子广告牌设计

专业班级:

计算机系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]唐朔飞.计算机组成原理.北京:

高等教育出版社

 

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

当前位置:首页 > 党团工作 > 其它

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

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