微机原理跑马灯课设报告.docx
《微机原理跑马灯课设报告.docx》由会员分享,可在线阅读,更多相关《微机原理跑马灯课设报告.docx(17页珍藏版)》请在冰豆网上搜索。
微机原理跑马灯课设报告
微机原理
课程设计说明书
设计题目:
跑马灯
学院计算机科学与工程学院
专业计算机科学与技术专业
班级
学生
学号
同组者
指导教师
一、实验简介:
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、这次课设,再次告诉我,做实验或是其他事情,都要有足够的细心和耐心。
在实验过程中,总会碰到许多实际的问题,因此,我们不仅要有比较扎实的基础知识,还要有比较强的心里素质。
当实验的结果无法与理论值相一致时,不要烦躁,泄气,而是应该和自己的情绪交流,理清思路,分析导致出错的原因。
必要时,可以把自己的想法和老师交流,请老师给予提示和指导。
附录