课程设计报告Word文件下载.docx
《课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《课程设计报告Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
6.2源程序及注释9
6.3使用元器件一览表14
6.4参考文献14
一.前言
1.1设计背景
汽车信号灯的作用是大家所熟知的,汽车通过显示不同的信号灯来告诉前后左右的行车者本汽车正在进行的操作。
如果不能正确识别汽车信号灯的表示的含义,就不能了解开车者的意图,就很有可能会造成交通事故。
据报道,每年有20多万起交通事故,并且每年有近9万人因为交通事故死亡。
所以,我们应该普及交通法规知识。
我们设计这个汽车信号灯有助于帮助我们了解汽车信号灯的工作原理,也帮助我们学习部分交通安全法规。
在什么样的情况下应该打出怎样的信号灯。
1.2系统设计目的
1、了解汽车信号灯的控制原理。
2、掌握8086CPU和并行接口芯片8255A、8254逻辑功能及使用方法。
3、掌握一定的汇编语言知识,培养自己的动手操作能力。
4、学习程序设计的基本思路和方法。
1.3设计任务与要求
1.以8086CPU为核心、并行接口芯片8255A、4个逻辑电平开关和8个发光二极管设计一个汽车信号灯控制系统
2.该系统通过开关控制的信号灯有汽车左转、汽车右转、汽车出现紧急状况、汽车刹车、汽车停靠等十类灯.
二.总体方案设计分析、讨论
2.1总体方案设计分析
2.1.1问题描述分析
问题描述分析:
汽车行驶时一共有五种状况:
汽车左转
汽车右转
汽车出现紧急状况
汽车刹车
汽车停靠
在进行课程设计时,可以考虑到9种组合模式如下:
输入状态输出状态
00001000汽车左转弯头灯和尾灯闪烁
00000001汽车右转弯头灯和尾灯闪烁
00000010汽车刹车,刹车头灯和尾灯亮
00000100汽车出现紧急情况,左右转弯头灯和尾灯均闪烁
00001010汽车左转时刹车,左转弯头灯和尾灯闪烁,刹车灯亮
00000011汽车右转时刹车,右转弯头灯和尾灯闪烁,刹车灯亮
00000110汽车出现紧急情况刹车,左右转弯头灯和尾灯闪烁,刹车灯亮
00001111汽车已经停靠,所有灯亮,没有闪烁,并退出系统
其他情况错误。
所有灯均不闪烁也不亮
2.1.2问题的解决方案分析
通过对以上问题描述的深入分析,我们可以总结出以下几点:
1.通过8个发光二极管,分析模拟两个转弯头灯、两个转弯尾灯、四个刹车灯。
2.利用4个拨码开关,可以产生16种情况,我们实际需要9种情况来分别模拟上述问题中提到的9种情况,开关的其他情况均显示为错误情况。
3.由于要求灯闪烁的频率为1Hz,所以我们讨论了使用程序还是定时/计数器来控制频率,经过综合讨论,为了更加精确地控制频率,所以决定使用加入8254来控制灯闪烁的频率,而放弃使用程序控制。
2.2系统的主要功能
灯状态
开关状态
左头灯(L7)
左刹车灯(L6)
右刹车灯(L5)
右头灯(L4)
左尾灯(L3)
左刹车尾灯(L2)
右刹车尾灯(L1)
右尾灯(L0)
00001000
闪
灭
00000001
00000010
亮
00000100
00001010
00000011
00000110
00001111
其他情况
表1.汽车信号灯状态表
三.详细设计
3.1硬件设计
3.1.1芯片选择
根据课题所要实现的功能,结合所学的知识进行分析,系统要用到8086微处理器芯片和可编程的并行接口芯片8255A和可编程定时/计数器8254。
8086是Intel系列的16位微处理器,它有16根数据线和20根地址线,本系统采用它作为处理器。
8255是可编程I/O口扩展芯片。
对8255输入不同的指令可改变I/O口的工作方式。
8255内部有4个寄存器:
分别为寄存器A、B、C和控制寄存器。
A、B、C寄存器的数据就是引脚PA7~PA0、PB7~PB0、PC7~PC0上输入或输出的数据。
而控制寄存器的数据则表明PA、PB、PC的工作方式。
通过CS、A0、A1、RD和WR对4个寄存器进行操作。
(1)CS为低电平时选通8255;
(2)A1、A0为地址选通;
(3)RD和WR为读、写信号:
RD为低、WR为高时为读方式,RD为高、WR为低时为写方式。
(4)D0~D7为数据口。
向控制寄存器写入不同的数据可以使8255工作在三种不同的方式下。
8254有3个计数器,计数器的计数频率是2~10MHz,每个计数器都可以按照二进制或十进制计数,每个计数通道都有6种工作方式,可由程序设置或改变,所有输入/输出引脚都与TTL兼容。
3.1.2系统电路图
3.1.3电路图说明分析
由于我们使用了8255和8254两个芯片,所以,在系统总线中使用两个端口地址,分别是IOY0和IOY1。
两个地址分别是3000H和3040H。
我们把这个地址分别接在8255和8254两个的片选(CS)端。
同时系统总线的A2,A3端都接到8254和8255的A0,A1端口;
系统总线的/XIOR,/XIOW端口分别接到8255和8254的/RD,/WR端口。
系统总线的XD0~XD7端口接到8254和8255的AD0~AD7。
因为8254是用来计时的,所以8254的CLK2接时钟源的1.8432MHz,OUT2接到CLK0,OUT0接到8255的PC0,GATE2和GATE0都接+5V。
同时,8255的A端口作为输出,B、C端口作为输入,所以A端口接LED显示单元,B端口接拔码开关,因为只用到PC0,所以C端口的其他输入都接地。
3.2软件设计
3.2.1程序流程图
四.系统调试与实现
4.1实验步骤
(1)准备好PC机、实验箱和导线若干。
(2)用导线按照事先画好的实验电路图将以上各个实验电路模块连接起来,就是硬件控制的汽车信号灯控制系统。
(3)在PIT++程序中编写程序。
(4)汇编调试、运行。
(5)记录运行结果,以及调试中遇到的问题。
4.2调试结果与分析
在调试过程中,我们遇到了很多情况,通过我们不断地调试、修正,最终还是成功了。
现在说一下我们遇到的情况:
1.硬件连接。
刚开始,我们没有使用8254来延时,使用软件延时,经过再次查看课程设计指导书,发现要求使用1Hz频率,所以觉得用软件延时不精确,就确定采用8254来使用硬件延时。
在第一次的时候没有成功,以为是延时错误,但是经过模块调试后发现延时没有错误,再仔细排查再发现是硬件连接错误,因为引脚默认为高,而我们在判断的时候要求是低。
所以当我们把其他引脚接低的时候,就正确了。
2.程序退出。
在最开始的时候,我们就注意到一个完整的程序应该能控制退出,但是到后来,经过几次调试验证,整个程序都变成了死循环,无法正常退出了。
最后,我们通过分析程序运行的情况,发现可以通过停车的情况时,跳转到QUIT标号然后就可以退出程序了。
3.程序优化。
在一开始时,我们的程序代码冗长,看起来不好看,并且没有注释清楚,给阅读程序增加了一定难度。
所以,我们通过对代码的优化,增加了一些注释,使程序更加清楚,容易阅读。
五.总结
5.1课程设计小结
本次课程设计是我们小组是要设计一个汽车信号灯控制系统,主要通过8255A模拟汽车信号灯的亮灭闪烁情况,闪烁的频率使用8254来控制。
通过本次的设计以此来加深对微机接口技术的理解,提高了自己的动手能力。
首先我们小组是着手对硬件电路的设计,本次课程设计主要采用了8255A和8254接口电路。
我们通过课本了解到了各个芯片的引脚及功能、工作方式、内部结构和控制字。
对各个功能的熟悉便于了硬件电路的设计。
然后就是对程序的设计,通过这次课程设计,我们知道了,想要设计出一个完整实用的控制系统需要弄懂程序流程,要对课程设计的要求进行需求分析,而且必须先画出了流程图,然后对代码进行编写、总结、优化,最终才能实现我们想要的目的。
最后,就是通过这次课程设计,不仅巩固了我们的理论知识,使我们更加透彻过理解了书本上的内容,还增加了我们对硬件的了解,了解了要设计一个系统需要经过哪些步骤,对我们以后的发展有很大的帮助。
5.2课程设计体会
经过一周的努力,我们终于完成了这次课程设计。
虽然遇到不少的困难,但是我们都坚持下来了,并且努力去解决我们所遇到的困难。
比如,我们常常在调试的过程中发现要不灯不亮,要不灯不闪,这就需要我们去进一步调试,找出是因为什么原因导致不亮或不闪的。
并且,我们为了更加精确地去控制灯光的闪烁频率,放弃使用不准确的软件延时,而改进使用硬件控制,一方面体现了我们追求课程设计的完整性,另一方面也体现了我们的迎难而上的品质。
当然,本次课程设计的结果还是有一定的缺陷,如在显示屏上显示当前运行状态时始终是1s显示一次,就算是同一个状态也是重复显示,需要改进为如果是相同状态,只需要显示一次就好。
总之,我们顺利完成了这次课程设计,也学到了很多东西,这些是不能从课本上学到的。
我们都有很大收获。
六.附录
6.1电路原理图
6.2源程序及注释
IOY0EQU3000H;
片选IOY0对应的端口始地址
MY8255_AEQUIOY0+00H*4;
8255的A口地址
MY8255_BEQUIOY0+01H*4;
8255的B口地址
MY8255_CEQUIOY0+02H*4;
8255的C口地址
MY8255_MODEEQUIOY0+03H*4;
825的控制寄存器地址
IOY1EQU3040H;
片选IOY1对应的端口始地址
MY8254_COUNT0EQUIOY1+00H*4;
8254的计数器0地址
MY8254_COUNT1EQUIOY1+01H*4;
8254的计数器1地址
MY8254_COUNT2EQUIOY1+02H*4;
8254的计数器2地址
MY8254_MODEEQUIOY1+03H*4;
8254的控制寄存器地址
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
DATASEGMENT
STR1DB0AH,0DH,'
TURNINGLEFT...'
0AH,0DH,'
$'
;
输出信息:
左转弯
STR2DB0AH,0DH,'
TURNINGRIGHT...'
右转弯
STR3DB0AH,0DH,'
EMERGENCY...'
紧急情况
STR4DB0AH,0DH,'
BREAKING...'
刹车
STR5DB0AH,0DH,'
TURNINGLEFTANDBREAK...'
左转且刹车
STR6DB0AH,0DH,'
TURNINGRIGHTANDBREAK...'
右转且刹车
STR7DB0AH,0DH,'
EMERGENCYANDBREAK...'
紧急且刹车
STR8DB0AH,0DH,'
ERROR!
...'
错误
STR9DB0AH,0DH,'
STOP...'
停止
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK1
START:
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVES,AX
CONTINUE:
MOVDX,MY8254_MODE;
初始化8254
MOVAL,0B6H;
计数器2,方式3
OUTDX,AL
MOVDX,MY8254_COUNT2;
装入计数初值
MOVAL,64H;
100分频
MOVAL,00H
MOVDX,MY8254_MODE
MOVAL,36H;
计数器0,方式3
MOVDX,MY8254_COUNT0;
MOVAL,00H;
18432分频
MOVAL,48H
MOVDX,MY8255_MODE;
初始化8255
MOVAL,10001011B;
A口输出,方式0;
B口输入,方式0;
C口(低四位)输入10001010
MOVDX,MY8255_B;
读取8255端口B内容
INAL,DX
LEFTM:
;
CMPAL,00001000B
JNZRIGHTM;
不为0,则跳转至RIGHTM
MOVDX,OFFSETSTR1;
将STR1的偏移地址送给DX
MOVAH,09H;
输出显示字符串内容
INT21H
MOVDX,MY8255_A
LEFT:
MOVAL,10001000B;
控制左头灯和左尾灯亮
OUTDX,AL;
输出到A端口显示
CALLTST;
调用下降沿子程序,
MOVDX,MY8255_A
MOVAL,00H;
控制左头灯和左尾灯灯灭
CALLTST
JMPCONTINUE;
程序结束,无条件跳转回CONTINUE
RIGHTM:
CMPAL,00000001B
JNZEMERM
MOVDX,OFFSETSTR2
MOVAH,09H
INT21H
MOVCX,0001H
RIGHT:
MOVAL,00010001B
MOVAL,00000000B
JMPCONTINUE
EMERM:
;
CMPAL,00000100B
JNZBREAKM
MOVDX,OFFSETSTR3
EMER:
MOVAL,10011001B
BREAKM:
CMPAL,00000010B
JNZLBREAKM
MOVDX,OFFSETSTR4
BREAK:
MOVAL,01100110B
LBREAKM:
;
左转弯且刹车
CMPAL,00001010B
JNZRBREAKM
MOVDX,OFFSETSTR5
LBREAK:
MOVAL,11101110B
RBREAKM:
右转弯且刹车
CMPAL,00000011B
JNZEBREAKM
MOVDX,OFFSETSTR6
RBREAK:
MOVAL,01110111B
EBREAKM:
CMPAL,00000110B
JNZSTOPM
MOVDX,OFFSETSTR7
EBREAK:
MOVAL,11111111B
STOPM:
CMPAL,00001111B;
当四个控制开关全部为1时,车停靠
JNZNEXT
MOVDX,OFFSETSTR9
MOVAH,09H;
显示“STOP”信息
STOP:
MOVAL,11111111B;
所有信号灯全亮
JMPQUIT;
当四个控制开关全部为1,程序结束,退出整个系统
NEXT:
其余情况,显示出错提示
MOVDX,OFFSETSTR8
JMPCONTINUE
RET
QUIT:
程序结束
MOVAX,4C00H
TSTPROCNEAR;
下降沿检测子程序
MOVDX,MY8255_C
HEAD:
INAL,DX;
检测C端口状态
CMPAL,00000001B;
判断端口C的引脚PC0是否是下降沿
JZTSTT;
若是,则跳转
JMPHEAD;
否则,程序跳回继续检测C口状态
TSTT:
读取C口状态,判断是否还是高电平
若是,继续输出高电平,延时1S
TSTENDP
CODEENDS
ENDSTART
6.3使用元器件一览表
序号
名称
型号
规格
数量
备注
1
可编程并行接口芯片
8255A
0648XD006
2
定时/计数器
8254C
0338H2685
6.4参考文献
[1]何宏主编《微型计算机原理与接口技术》[M].天津大学出版社2007.3
[2]何宏主编《微型计算机原理与接口技术》[M].西安电子科技大学出版社2009.4
[3]《32位微机原理及接口技术实验教程》西安唐都科技仪器公司.2009