8086实现交通灯实时控制系统.docx
- 文档编号:25955202
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:14
- 大小:133.26KB
8086实现交通灯实时控制系统.docx
《8086实现交通灯实时控制系统.docx》由会员分享,可在线阅读,更多相关《8086实现交通灯实时控制系统.docx(14页珍藏版)》请在冰豆网上搜索。
8086实现交通灯实时控制系统
1需求分析
1.1课程设计题目
交通灯实时控制系统。
伴随着社会的发展以及人们生活水平的提高,汽车的数量在不断的增加,交通的问题日益突出,单依靠人力来指挥交通已经不可行了,所以,设计交通灯来完成这个需求就显的越加迫切了.为了确保十字路口的行人和车辆顺利、畅通地通过,往往采用电子控制的交通信号来进行指挥。
以下就是运用数字电子设计出的交通灯:
用红灯来控制支路的交通通行,用绿灯来控制主干道的交通通行(说明:
本设计不遵循红灯停,绿灯行的交通规则,只要灯亮就表示可以通行)。
1.2设计目的
1)巩固和加深课堂所学知识;
2)学习掌握一般软硬件的设计方法和查询、运用资料的能力;
3)通过在TDN集成开发环境中对交通灯实时控制系统的设计与制作,综合应用8253、8259、8255芯片,深入了解和掌握利用可编程8255A进行控制的原理与方法;
4)通过这次课程设计,将课本上的理论知识和实际的应用有机的结合起来,以提高分析和解决问题的实际能力,通过对汇编语言程序代码的设计,编写,修改以提高自己实际编程能力。
1.3设计任务
1)任务:
设计一个交通灯控制系统
要求综合运用8259、8253、8255芯片设计十字路口的交通信号灯控制系统。
支线与主干线允许通车25秒,当支线允许通车时(25秒)中,若主干线25秒内已有10辆车到来,则申请中断,允许主干线通车,实现无交叉点通过。
如图1.1所示。
图1.1模拟通行示意图
2)设计任务要完成实验方案论证,进行十字路口的交通信号灯控制电路设计,画出电路原理图及实验电路图;搭建实验电路,进行软件编程、调试、运行以及使用说明文档的建立等一整套工作任务。
进行十字路口的交通信号灯控制程序设计(采用汇编语言);系统联调,提交一个符合上述功能要求的十字路口的交通信号灯控制系统设计。
1.4软硬件运行环境及开发工具
1.4.1软硬件运行环境
TDN88实验平台,PC机,导线,汇编语言编译软件。
1.4.2开发工具
TDN86/88教学实验系统,PC机。
2概要设计
2.1交通灯实时控制系统设计原理及方法
2.1.1设计原理
通过并行接口芯片8255和计算机的硬件连接,通过8253计数,来实现十字路口交通灯的模拟控制,用8259芯片,得到CPU的中断响应后,提供中断类型号,从而快速寻找到该中断源的中断服务程序的入口地址,转去执行中断服务程序。
实验中各个信号灯的含义如表2.1所示:
表2.1各信号灯含义
红灯
绿灯
含义
D7D6D5D4
D3D2D1D0
1111
1001
表示主干路直通
1111
0110
表示主干路大小拐
1001
1111
表示支路直通
0110
1111
表示支路大小拐
2.1.2设计方法
本实验设计的8255端口地址为60H~63H,即0110000B~01100011B。
因此A0、A1为选片信号,所以CUP的A0、A1引线直接接到8255的A0、A1。
作为译码器74SL138的输出口。
详细分析如下:
A7A6A5(C)A4(B)A3(A)A2A1A0
0110000060H
1161H
2062H
1163H
所以,74SL138译码器的接线方式为A3—A,A4—B,A5—C,A6—G1,A7—
。
红、绿灯分别接在8255的A口的高四位和低四位端口。
PA0~PA7分别连接到D0~D7。
8253的门控端GATE2接+5V,CLK2接KK1,OUT2接到8259的IRQ7。
这里采用8253计数/定时器结合中断服务程序计数的方法来实现定时计数的功能。
它是这样工作的:
当我们输入信号,即每按动一次开关KK1+,计数器门控信号GATE2便开始计数,此时计数器时钟信号CLK2开始工作,每输入1个时钟脉冲信号CLK2,便使计数值减1,当计数值减为0时就使用输出信号OUT2,在输出线上输出OUT信号,以表示计数已到,发出中断请求信号。
在8259接收到OUT2发出的中断请求信号之后,便开始执行中断,实现主干道和支干道路线上通车的切换。
2.2设计原理图
设计原理图如图2.1所示
图2.1设计原理图
3详细设计
3.1硬件设计
3.1.18255A芯片
8255A芯片是一种通用的可编程并行I/O接口芯片。
它包含有3个8位端口,称为A口,B口,C口。
其中A口包含8个I/O引脚(PA0~PA7),B口包含8个I/O引脚(PB0~PB7),C口包含8个I/O引脚(PC0~PC7)。
该芯片有3种工作方式,称为0方式,1方式,2方式。
本实验选取8259A的A口作为输出端口,工作方式选0方式。
所以8259A的方式命令字为10000000B,即80H。
设计端口地址为60H~63H。
其初始化编程为:
MOVAL,80H
OUT63H,AL
3.1.28259芯片
8259A芯片内部含有中断请求寄存器,用来存放由外部输入的中断请求信号IR7~IR0。
当某个输入端为高电平时,该寄存器相应位置“1”。
在本实验中需要从IR7请求中断,因此采用中断屏蔽方式,将IR6~IR0都设为高电平,即将寄存器IR6~IR0置“1”。
所以其方式命令字为01111111B,即7FH。
其初始化编程为:
ANDAL,7FH
OUT63H,AL
3.1.38253芯片
8253芯片中包含3个功能完全相同的计数通道,称为通道0、通道1和通道2。
这3个通道由CLE、GATE和OUT3跟信号线与外部电路相连。
CLK是外部计数器的脉冲输入端,GATE是计数器的门控制信号,OUT是计数器的输出信号。
本设计采用8253芯片的2#通道,工作方式是方式0。
所以其方式命令字为10010000B,即90H。
设计端口地址为40H~43H。
其初始化编程为:
MOVAL,90H
OUT43H,AL
3.2实验接线图
图3.1实验接线图
3.3程序流程图
图3.2程序流程图
3.4程序源代码
STACKSEGMENTSTACK
DW64DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAL,80H;初始化8255
OUT63H,AL
MOVAX,OFFSETIRQ7;装入中断向量
MOVSI,003CH
MOV[SI],AX
MOVAX,CS
MOVSI,003EH
MOV[SI],AX
INAL,21H;读中断屏蔽
ANDAL,7FH;8259初始化
OUT21H,AL;开放IRQ7
MOVAL,90H;8253初始化
OUT43H,AL
L1:
MOVAL,11111001B;主干通车直走
OUT60H,AL
CALLDELAY1
L2:
MOVAL,11110110B;主干通车拐
OUT60H,AL
CALLDELAY2
L5:
MOVAL,0AH;装入计数初值
OUT42H,AL
STI;开中断
L3:
MOVAL,10011111B;支道通车直走
OUT60H,AL
CALLDELAY2
L4:
MOVAL,01101111B;支道通车拐
OUT60H,AL
CALLDELAY1
JMPL1
IRQ7:
MOVAX,CS
PUSHAX
MOVAX,OFFSETL1;中断服务程序的入口地址
PUSHAX
MOVAL,20H;中断结束
OUT20H,AL
IRET
DELAY1:
MOVAX,12;计15个一秒延时
L6:
CALLDELAY3
DECAX
JNZL6
RET
DELAY2:
MOVAX,6;计10个一秒延时
L7:
CALLDELAY3
DECAX
JNZL7
RET
DELAY3:
MOVBX,12H;1s延时
D0:
MOVCX,2FFFH
D1:
LOOPD1
DECBX
CMPBX,0
JNED0
RET
CODEENDS
ENDSTART
4系统调试与运行结果
4.1系统调试
1)在设计的最开始,我花了很长时间在想如何编码这8个灯,能使它正确表示4种交通状态,我老想着遵循交通规则中的红灯停绿灯行的规则,因此花了很长时间都没有做出一个比较合理的编码方案。
后来经过问老师,才知道本系统只是模拟交通灯,并不需要遵循交通规则,只要灯亮就可通行。
所以最后找到了本系统中现在所使用的这种编码方式。
2)在程序编写过程中,最开始是将计数初值的模块放在最前面,编号为L0,当在编写支路交通通行的状态时,为了能够实现当KK1按10次的时候发生跳转,所以我用了JMPL0,来到达这一目的。
调试运行,当支路直走时,按10次KK1确实能够发生跳转。
但是交通灯始终只显示出3中情况,没有显示支路拐弯的情况。
后来和同学一起讨论,最终找到了问题的所在,当使用JMP后,程序就不可能在回来,而是再次顺序执行。
这样那段程序就永远不会得到执行。
讨论发现,其实根本就不需要调用计数初值这一模块,在中断模块中会自动调用。
所以,最后我将计数初值的那段程序放到中断模块的前面,这样就解决了只出现3种显示的情况,并且可以实现跳转。
4.2操作说明及运行结果
4.2.1操作说明
1)按实验接线图接线。
2)输入程序并检查无误,经汇编,连接后装入系统。
3)运行程序。
观察灯的变化,当出现绿灯全灭的时候,将KK1按10下,会出现跳转现象。
4.2.2运行结果
D1、D2亮,表示主干路直走。
15秒后D0、D3亮,表示主干路拐弯。
10秒后D5、D6亮,表示支路直走,若在D5、D6亮期间按10下KK1,这时D1、D2会立刻亮,而D5、D6立刻熄灭。
若不做,则15秒后D4、D7亮,表示支路直走。
在这期间若按10次KK1则,D1、D2会立刻亮,若不做,则等10秒后D1、D2再亮。
5课程设计总结与体会
通过这次课程设计,我对8255、8259、8253这三种芯片有了进一步的了解。
知道了它们在实际应用中的功能以及它们初始化的方法。
这次课程设计从需求分析到设计,是一个完整的体系,这提高了我分析问题的能力。
当遇到问题时,回到书本,查找实际问题所需的理论知识,将理论和实际结合起来,以得到问题的解,这提高了我解决实际问题的能力。
其实课程设计和真正的实际需求还是有些差别的,比如我最开始就是以实际需求来分析灯的编码的,但是花了很长时间,最后发现8个灯根本实现不了实际生活中的交通灯的变化方式。
所以最后用老师告诉的编码方式,才得到正确结果。
本设计还有一个缺陷就是在本设计中,那个1秒的时间间隔只是一个模拟的数字,并不是准确的1秒。
但是该是如何使用8253分频实现真正1秒的时间间隔,这还有待改进。
设计者:
日期:
年月日
设计过程中质疑(或答辩)记载:
1.D0~D7各灯的含义?
答:
D0~D3为绿灯,来表示主干路的通行情况。
其中D1、D2表示直走,D0、D3表示拐弯。
D4~D7为红灯,来表示支路的通行情况。
其中D5、D6表示直走,D4、D7表示拐弯。
2.如何保证当主干路上有10辆车时,从支路通行转换为主干路通行?
答:
通过中断来实现从支路通行转换为主干路通行,程序如下:
L5:
MOVAL,AH
OUT42H,AL
JMPL1
IRQ7:
MOVAX,CS
PUSHAX
MOVAX,OFFSETL5;中断服务程序的入口地址
PUSHAX
MOVAL,20H;中断结束
OUT20H,AL
IRET
指导教师评语:
评分:
签名:
年月日
参考书
[1]周佩玲,彭虎,傅忠谦《微机原理与接口技术》北京,电子工业出版社2005
[2]沈美明,温东婵《IBM-PC汇编语言程序设计》北京,清华大学出版社1993
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 8086 实现 交通灯 实时 控制系统