微机原理跑马灯课设报告.docx

上传人:b****3 文档编号:26795222 上传时间:2023-06-22 格式:DOCX 页数:17 大小:108.43KB
下载 相关 举报
微机原理跑马灯课设报告.docx_第1页
第1页 / 共17页
微机原理跑马灯课设报告.docx_第2页
第2页 / 共17页
微机原理跑马灯课设报告.docx_第3页
第3页 / 共17页
微机原理跑马灯课设报告.docx_第4页
第4页 / 共17页
微机原理跑马灯课设报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

微机原理跑马灯课设报告.docx

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

微机原理跑马灯课设报告.docx

微机原理跑马灯课设报告

微机原理

课程设计说明书

设计题目:

跑马灯

学院计算机科学与工程学院

专业计算机科学与技术专业

班级

学生

学号

同组者

指导教师

一、实验简介:

1、基本要求:

采用8254精确定时,LED的点亮规律为LED7--->LED0,每一个LED的点亮时间间隔由逻辑电平开关K1、K2、K3选择,K1的时间间隔为0.5s,K2的时间间隔为1.0s,K3的时间间隔为1.5s。

当主机键盘按下任意键时停止演示。

2、设计提示:

采用8255的A口接LED灯,B口接逻辑电平开关K1、K2与K3。

在8254的中断服务程序中完成对灯的控制,主程序检测灯的变化,改变点亮LED的时间间隔。

3、进一步设计要求:

将LED的点亮规律变为LED7--->LED0--->LED7。

二、实验原理:

1、实验原理描述:

该实验中跑马灯采用8255和8254芯片来实现,利用8254芯片来做定时器,采用8254的方式3(方波发声器),因此在8254芯中采用级联的方法,以此来控制跑马灯中实现0.5s,1.0s,1.5s的效果片;在8255芯片中将A口当做输出口连接LED灯,B口一个输入口来掌控三个逻辑开关的打开与关闭,选择三种不同的时间间隔,C7口作为另一个输入口连接着8254芯片的OUT1口来读从8254芯片传来的三种不同大小的频率之一,以此来实现具有三种不同时间间隔跳转的跑马灯。

2、8254芯片:

2.1、8254芯片组成部分:

(1)数据总线缓冲器:

数据总线缓冲器是一个三态、双向8位寄存器主要作用是与cpu进行数据交换,8位数据线D7~D0与CPU的系统数据总线连接,构成CPU和8254之间信息传送的通道,CPU通过数据总线缓冲器向8254写入控制命令、计数初始值或读取计数值。

(2)读写逻辑:

读写逻辑是芯片的控制部分,编程人员通过控制信号的选择来选择芯片的工作方式。

读/写控制逻辑用来接收CPU系统总线的读、写控制信号和端口选择信号,用于控制8254内部寄存器的读/写操作。

(3)控制字寄存器:

控制寄存器是一个只能写不能读的8位寄存器,系统通过指令将控制字写入控制寄存器,设定8254的不同工作方式。

(4)计数器;

8254内部有三个结构完全相同而又相互独立的16位减“1”计数器,每个计数器有六种工作方式,各自可按照编程设定的方式工作。

2.2、8254芯片工作方式:

8254芯片共有六种工作方式,分别对应与六种不同的用途。

(1)方式0:

计数结束中断方式,写入N后开始计数计数器为0,OUT输出H.

(2)方式1:

可编程单稳态,外部GATE触发OUT输出单拍负脉冲宽度N个CLK.

(3)方式2:

速率发生器,每N个CLK输一个宽度为一个CLK周期的负脉冲,不断重复.

(4)方式3:

方波发生器,N=偶,N/2个1,N/2个0N=奇,(N+1)/2个1,(N-1)/2个0不断重复.

(5)方式4:

软触发选通,写入N后开始计数计数器为0,OUT输出一个宽度为CLK周期的负脉冲.

(6)方式5:

硬触发选通,写入N后GATE上升沿,开始计数计数器为0,写入N后GATE上升沿,开始计数计数器为0,OUT输出一个宽度为CLK,周期的负脉冲,OUT输出一个宽度为CLK,周期的负脉冲.

本次课设中,只是使用到了8254的工作方式3,将其当做一个方波发生器来使用,为8255提供固定频率的方波信号,8255以此来控制灯的点亮情况。

使用8254的计数0和计数器1来进行级联,从out1中输出方波信号。

3、8255芯片:

3.1、8255芯片的组成部分:

8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。

同时必须具有与外设连接的接口A、B、C口。

由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:

与CPU连接部分、与外设连接部分、控制部分。

(一)与CPU连接部分:

根据定义,8255能并行传送8位数据,所以其数据线为8根D0~D7。

由于8255具有3个通道A、B、C,所以只要两根地址线就能寻址A、B、C口及控制寄存器,故地址线为两根A0~A1。

此外CPU要对8255进行读、写与片选操作,所以控制线为片选、复位、读、写信号。

各信号的引脚编号如下:

(1)数据总线DB:

编号为D0~D7,用于8255与CPU传送8位数据。

(2)地址总线AB:

编号为A0~A1,用于选择A、B、C口与控制寄存器。

(3)控制总线CB:

片选信号、复位信号RST、写信号、读信号。

当CPU要对8255进行读、写操作时,必须先向8255发片选信号选中8255芯片,然后发读信号或写信号对8255进行读或写数据的操作。

(二)与外设接口部分:

根据定义,8255有3个通道A、B、C与外设连接,每个通道又有8根线与外设连接,所以8255可以用24根线与外设连接,若进行开关量控制,则8255可同时控制24路开关。

各通道的引脚编号如下:

(1)A口:

编号为PA0~PA7,用于8255向外设输入输出8位并行数据。

(2)B口:

编号为PB0~PB7,用于8255向外设输入输出8位并行数据。

(3)C口:

编号为PC0~PC7,用于8255向外设输入输出8位并行数据,当8255工作于应答I/O方式时,C口用于应答信号的通信。

(三)控制器:

8255将3个通道分为两组,即PA0~PA7与PC4~PC7组成A组,PB0~PB7与PC0~PC3组成B组。

相应的控制器也分为A组控制器与B组控制器,各组控制器的作用如下:

(1)A组控制器:

控制A口与上C口的输入与输出。

(2)B组控制器:

控制B口与下C口的输入与输出。

3.2、8255芯片工作方式:

8255芯片共有三种不同的工作方式

方式0:

基本输入输出方式适用于无条件传送和查询方式的接口电路

方式1:

选通输入输出方式适用于查询和中断方式的接口电路

方式2:

双向选通传送方式

适用于与双向传送数据的外设

适用于查询和中断方式的接口电路

4、实验原理图:

三、实验流程图与源程序:

1、流程图:

1.1、主程序流程图:

1.2Appmain子程序流程图:

1.3灯跳转阶段流程图:

2、源程序:

.modelsmall

.586

.stack

.data

p8255a=288h;A口地址

p8255b=p8255a+1;B口地址

p8255c=p8255a+2;C口地址

p8255Ctrl=p8255a+3;控制口地址

p8254a=280h;通道0地址

p8254b=p8254a+1;通道1地址

p8254c=p8254a+2;通道2地址

p8254Ctrl=p8254a+3;控制口地址

msgdb'PressanykeytoExit',0dh,0ah,'$'

.code

mainproc

movax,@data

movds,ax;建立数据段

movdx,offsetmsg

movah,09h;显示字符串

int21h

callinit8255

callAppmain

movah,4ch;返回DOS

int21h

ret

mainendp

 

init8255proc

movdx,p8255Ctrl;控制口地址

moval,8ah;设置8255为B,C口输入,A为输出

outdx,al;控制字:

10001010B

ret

init8255endp

Appmainproc

movdx,p8255b;检测B口状态

inal,dx

movcl,al

test:

movcl,al

cmpal,01h

jnzjudge1

initk0:

movdx,p8254Ctrl;初始化计数器0,1,实现定时0.5s

moval,36h

outdx,al

movdx,p8254a

movax,500

outdx,al

moval,ah

outdx,al

movdx,p8254Ctrl

moval,76h

outdx,al

movdx,p8254b

movax,1000

outdx,al

moval,ah

outdx,al

movbl,80h;点亮L7

change:

movdx,p8255a

moval,bl

outdx,al;输出

next:

movdx,p8255c

inal,dx

andal,80h

jnzhight;判断是否c口为下降沿

cmpah,1

jnznext

movah,0

jmpx

hight:

movah,1

jmpnext

x:

movdl,0ffh;直接控制台IO,相当于C中while(!

kbhit())

movah,06h;等待按键

int21h;al=输入字符

jnzdone;若无按键,则继续

moval,bl

cmpal,01h;判断是否到达L0

jzchange1

movdx,p8255a

outdx,al;输出

rorbl,2

movdx,p8255b;检测B口状态

inal,dx

 

cmpal,cl

jnztest

jmpnext

change1:

movdx,p8255a

moval,bl

outdx,al;输出

 

next1:

movdx,p8255c

inal,dx

andal,80h

jnzhight1;判断是否c口为下降沿

cmpah,1

jnznext1

movah,0

jmpout1

hight1:

movah,1

jmpnext1

out1:

;movdx,offsetmsg

;movah,09h;显示字符串

;int21h

movdl,0ffh;直接控制台IO,相当于C中while(!

kbhit())

movah,06h;等待按键

int21h;al=输入字符

jnzdone;若无按键,则继续

moval,bl

cmpal,80h

jzchange

movdx,p8255a

outdx,al;输出

rolbl,1

movdx,p8255b;检测B口状态

inal,dx

cmpal,cl

jnztest

jmpnext1

judge1:

cmpal,02h

jnzjudge2

initk1:

movdx,p8254Ctrl;初始化计数器0,1,实现定时1s

moval,36h

outdx,al

movdx,p8254a

movax,100

outdx,al

moval,ah

outdx,al

movdx,p8254Ctrl

moval,76h

outdx,al

movdx,p8254b

movax,10000

outdx,al

moval,ah

outdx,al

movbl,80h;点亮L7

jmpnext

judge2:

cmpal,04h

jnzjudgeelse

 

judgeelse:

movdx,p8254Ctrl;初始化计数器0,1,实现定时1s

moval,36h

outdx,al

movdx,p8254a

movax,100

outdx,al

moval,ah

outdx,al

movdx,p8254Ctrl

moval,76h

outdx,al

movdx,p8254b

movax,10000

outdx,al

moval,ah

outdx,al

movbl,80h;点亮L7

jmpnext

 

initk2:

movdx,p8254Ctrl;初始化计数器0,1,实现定时1.5s

moval,36h

outdx,al

movdx,p8254a

movax,1500

outdx,al

moval,ah

outdx,al

movdx,p8254Ctrl

moval,76h

outdx,al

movdx,p8254b

movax,1000

outdx,al

moval,ah

outdx,al

movbl,80h;点亮L7

jmpnext

done:

ret

Appmainendp

endmain

四、实验结果与测试:

在这次试验中共有四种结果出现:

1.开关K0闭合:

七个灯相互间隔0.5s从L7开始依次被点亮,当L0被点亮时,又跳转到L7继续循环;

2.开关K1闭合:

七个灯相互间隔1.0s从L7开始依次被点亮,当L0被点亮时,又跳转到L7继续循环;

3.开关K2闭合:

七个灯相互间隔1.5s从L7开始依次被点亮,当L0被点亮时,又跳转到L7继续循环;

4.除了以上三种外其他开关闭合情况:

默认七个灯相互间隔1.0s从L7开始依次被点亮,当L0被点亮时,又跳转到L7继续循环.

总之,以上四种情况均实现了LED灯从LED7依次跳转到LED0。

五、实验提高与扩展:

对该实验所做的改进和提高之处有两处:

1、实现了LED7--->LED0--->LED7

实验基本要求为实现从LED7变化到LED0即可,我们在实现这个基本要求的基础上还实现了当LED灯被依次点亮到L0时,又从L0依次跳转到LED7。

2、错误处理

除了题目要求中的K0,K1,K2三个逻辑开关闭合的情况外,我们还对这三种情况除外的所有情况均进行了处理,在程序中默认出现其他情况后均跳转到1.0s的状态,使LED灯依次按照间隔1.0s来点亮。

六、个人心得与体会:

在本次课设中,我总共有以下六处体会:

1、在这次实验中,我们是两个人一组的合作实验,所以我们都有着自己的任务。

我的任务是分析题目,设计原理图,连接电路以及测试效果。

2、本次课设在上学期所学的微型计算机的基础上,提出了比较高的起点和要求,充分检查了我们对理论知识的的掌握程度和实践动手的能力。

即不但巩固了原有的理论知识,还在设计过程中锻炼了我们的思维能力,以及全局的思想。

3、通过本次课设的设计,我们进一步了解和掌握了各种理论知识,如微机的汇编语言的程序设计方法;8254和8255两种芯片的工作原理以及各种工作方式;以及两种芯片对实现跑马灯的作用。

4、在这次课设中,我们也遇到了不少的错误,在刚开始时对两种芯片的不透彻理解,导致我们走了不少弯路;还有在实现三种时间间隔的效果时,我们没有想到运用8254芯片接口之间的级联来实现,浪费了我们不少的时间;在编写程序的过程中,我们因为锻炼的次数较少,编写程序时比较吃力;在审题时不够仔细,在最初未实现从L0又再次跳转到L7这一步。

虽然我们遇到了问题,但是经过我们询问老师,以及与同学不停的探讨,这些问题都有了很好的解决,所以本次课程不仅加强了我们对知识的在学习,还让我们加强了与同学之间的思想交流。

5、在本次实验中,我们还有做的不足的地方,就是在老师验收时,被检查出我们缺少了错误处理这个功能,经过老师的点拨,我们也最终对各种各种不同的错误有了比较好的处理方法,所以它还让我们学会了全面的思考问题,把所有可能出现的结果都实现化。

6、这次课设,再次告诉我,做实验或是其他事情,都要有足够的细心和耐心。

在实验过程中,总会碰到许多实际的问题,因此,我们不仅要有比较扎实的基础知识,还要有比较强的心里素质。

当实验的结果无法与理论值相一致时,不要烦躁,泄气,而是应该和自己的情绪交流,理清思路,分析导致出错的原因。

必要时,可以把自己的想法和老师交流,请老师给予提示和指导。

附录

 

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

当前位置:首页 > 外语学习 > 法语学习

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

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