基于8086的交通灯控制系统课程实验设计报告.docx
- 文档编号:17876669
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:20
- 大小:89.52KB
基于8086的交通灯控制系统课程实验设计报告.docx
《基于8086的交通灯控制系统课程实验设计报告.docx》由会员分享,可在线阅读,更多相关《基于8086的交通灯控制系统课程实验设计报告.docx(20页珍藏版)》请在冰点文库上搜索。
基于8086的交通灯控制系统课程实验设计报告
鸡西大学课程设计实验报告
题目:
基于8086的交通灯控制系统课程设计
院系:
电气与信息工程系
班级:
09机电一体化(4)班
姓名:
王晓刚
学号:
004
指导老师:
窦岩
(2010.12.9)
一、设计要求。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
2
二、设计目的。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
2
三、设计的具体实现。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
2
(一)系统概述。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
2
(二)单元电路设计。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
5
(三)软件程序设计。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
9
四、结论与愿望。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
15
五、心得体会及建议。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
16
六、附录。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
17
七、参考文献。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
18
交通灯设计报告
一、设计要求
1、完成系统总体方案设计;
2、设计控制算法;
3、设计系统接线图;
4、完成控制软件的编写;
5、编写课程设计说明书。
二、设计目的
1、了解交通灯管理的基本工作原理
2、熟悉8259A中断控制器的工作原理和应用编程
3、熟悉8255A并行接口的各种工作方式和应用
4、熟悉8253计数器/定时器的工作方式及应用编程,掌握利用软硬件相结合定时的方法。
5、掌握多位LED显示问题的解决。
三、设计的具体实现
(一)系统概述
系统要求实现正常时序控制,启动开关接通时,交通信号按设定的时序工作,并且各个方向的红、黄、绿灯接通时间倒计时显示,东西方向和南北方向的绿灯接通时间可以由外部设定。
所以设计中使用了8259A中断控制器、8254计数器、8255可编程并行接口实现了,对南北、东西方向交通的分别计时、分别控制,设计采用定时加中断控制的方式进行,对两个方向车辆的通行时间分别计时,可随意进行更改双向的通行时间。
城市十字交叉路口红绿灯控制系统主要负责控制东西走向和南北走向的红绿灯的状态和转换顺序,关键是各个状态之间的转换和进行适当的时间延时,正是基于以上考虑,采用如下设计:
1.东西南北两个方向起始状态全为红,延续3秒。
2.东西方向红灯亮,南北方向绿灯亮,延续45秒。
3.东西方向红灯亮,南北方向绿灯以频率1HZ闪烁3秒。
4.东西方向红灯亮,南北方向黄灯亮,延续3秒。
5.东西方向绿灯亮,南北方向红灯亮,延续40秒。
6.东西方向绿灯亮以频率1HZ闪烁3秒,南北方向红灯。
7.东西方向黄灯亮,南北方向红灯亮,延续3秒。
8.东西方向红灯亮,南北方向红灯亮循环以上步骤。
通过分析灯亮的规律,总结出如下的功能表:
交通灯亮灭功能表
灯
状态
南北
红L1
东西红L2
南北
黄L3
东西
黄L4
南北
绿L5
东西
绿L6
L7
无效
L8
无效
状态1
1
1
0
0
0
0
0
0
状态2
0
1
0
0
1
0
0
0
状态3
0
1
0
0
0
1
0
0
0
状态4
0
1
1
0
0
0
0
0
状态5
1
0
0
0
0
1
0
0
状态6
1
0
0
0
0
0
1
0
0
状态7
1
0
0
1
0
0
0
0
转换成控制码为:
交通灯控制码表
十六进制
二进制
状态1
03H
00000011B
状态2
12H
00010010B
状态3
02H
12H
00000010B
00010010B
状态4
06H
00000110B
状态5
21H
00100001B
状态6
01H
21H
00000001B
00100001B
状态7
09H
00001001B
系统流程图如下:
(二)单元电路设计
1、8259的工作原理
1)、数据总线缓冲器:
8259A与系统数据总线的接口,是8位双向三态缓冲器。
CPU与8259A之间的控制命令信息、状态信息以及中断类型信息,都是通过缓冲器传送的。
2)、读/写控制逻辑:
CPU通过它实现对8259A的读/写操作。
3)、级连缓冲器:
用以实现8259A芯片之间的级连,使得中断源可以由8级扩展至64级。
4)、控制逻辑电路:
对整个芯片内部各部件的工作进行协调和控制。
5)、中断请求寄存器IRR:
8位,用以分别保存8个中断请求信号,当响应的中断请求输入脚有中断请求时,该寄存器的相应位置1。
6)、中断屏蔽寄存器IMR:
8位,相应位用以对8个中断源的中断请求信号进行屏蔽控制。
当其中某位置“0“时,则相应的中断请求可以向CPU提出;否则,相应的中断请求被屏蔽,即不允许向CPU提出中断请求。
该寄存器的内容为8259A的操作命令字OCW1,可以由程序设置或改变。
7)、中断服务寄存器ISR:
8位,当CPU正在处理某个中断源的中断请求时,ISR寄存器中的相应位置1。
8)、用以比较正在处理的中断和刚刚进入的中断请求之间的优先级别,以决定是否产生多重中断或中断嵌套。
2.8255A的工作原理
1)、8255A的内部结构:
(1)数据总线缓冲器:
这是一个双向三态的8位数据缓冲器,它是8255A与微机系统数据总线的接口。
输入输出的数据、CPU输出的控制字以及CPU输入的状态信息都是通过这个缓冲器传送的。
(2)三个端口A,B和C:
A端口包含一个8位数据输出锁存器和缓冲器,一个8位数据输入锁存器。
B端口包含一个8位数据输入/输出锁存器和缓冲器,一个8位数据输入缓冲器。
C端口包含一个8位数据输出锁存器和缓冲器,一个8位数据输入缓冲器(输入没有锁存器)。
(3)A组和B组控制电路:
这是两组根据CPU输出的控制字控制8255工作方式的电路,它们对于CPU而言,共用一个端口地址相同的控制字寄存器,接收CPU输出的一字节方式控制字或对C口按位复位字命令。
方式控制字的高5位决定A组的工作方式,低3位决定B组的工作方式。
对C口按位复位命令字可对C口的每一位实现置位或复位。
A组控制电路控制A口和C口上半部,B组控制电路控制B口和C口下半部。
(4)读写控制逻辑:
用来控制把CPU输出的控制字或数据送至相应端口,也由它来控制把状态信息或输入数据通过相应的端口送到CPU。
2)、8255A的工作方式:
方式0---基本输入输出方式;方式1---选通输入输出方式
方式2---双向选通输入输出方式。
3)、引脚信号
8255A的引脚如图所示,分为数据线、地址线、读/写控制线、输入/输出端口线和电源线。
D7~D0(databus):
三态、双向数据线,与CPU数据总线连接,用来传送数据。
(chipselect):
片选信号线,低电平有效时,芯片被选中。
A1,A0(portaddress):
地址线,用来选择内部端口。
(read):
读出信号线,低电平有效时,允许数据读出。
(write):
写入信号线,低电平有效时,允许数据写入。
RESET(reset):
复位信号线,高电平有效时,将所有内部寄存器(包括控制寄存器)清0。
PA7~PA0(portA):
A口输入/输出信号线。
PB7~PB0(portB):
B口输入/输出信号线。
PC7~PC0(portC):
C口输入/输出信号线。
VCC:
+5V电源。
GND:
电源地线。
3、8253的工作原理:
8253是可编程的计数器/定时器,其内部有三个独立的16位计数器/定时器通道,每个计数器通道均可按6种不同的方式工作,并且都可以按二进制或十进制计数。
其CLK0~CLK2是计数器0~2的时钟脉冲输入端,GATE0~GATE2是门控脉冲输入端,OUT0~OUT2是输出端。
4、计时功能实现逻辑:
通过8253计数器0和计数器1级联实现准确定时;用8255的A口低六位控制东西、南北路口交通灯的状态;灯的亮灭可直接由8086输出0,1控制。
用8259A管理可屏蔽中断即开机初始化。
采用两个计数器级联的方式,并且计数器0工作于方式3用于产生方波信号,计数器1工作方式0,计数到时高电平信号。
计数器1的输出端OUT1接入8255芯片的PC0口,通过查询8255的C口的值,以完成计时功能。
将计数器0的输出OUT0接到计数器1的输入端CLK1,而CLK0的输入采用的时钟频率,计数器0计数初值为59499=0E86BH,则OUT0=20HZ,即计数器1的时钟频率为20HZ。
当计数器1的记数初值为9时,后OUT1输出一高电平。
8086通过读取8255C口的值,来决定对A口写入的数据。
因此每隔秒8086变换灯的状态,持续6次即完成3秒的闪烁功能。
当计数器1的记数初值为899时,45S后OUT1输出一高电平。
通过查询8255的C口PC0的状态改变,达到延时45秒的作用。
同理计数器1的计数初值分别为59、799时,分别为3、40秒的延时。
5、译码电路设计
通过分析8259、8253、8255各端口地址,设计合理的地址译码电路。
8259的地址为20H、21H,8253的地址为40H、41H、42H、43H,8255的端口地址为0F0H、0F1H、0F2H、0F3H。
故芯片的地址只与8086的地址的低8位有联系,不妨设高十二为全为1将它们相与后作为38译码器的始能信号E3。
再分析发现8259、8253、8255各端口地址的低八位其中D2、D3均为0,将8086的地址总线的D2、D3作为38译码器的始能信号E1、E2。
将8086的地址总线的D0、D1分别与8253和8255的A0、A1连接,利用D4、D5、D6、D7构成译码电路。
将8086的地址总线的D0与8259的A0连接,利用D2、D4、D5、D6、D7通过38译码器构成译码电路。
具体见下图所示:
(三)软件程序设计
*****************************************************************
MY8259_ICW1EQU20H;实验系统中8259的
ICW1端口地址
MY8259_ICW2EQU21H;实验系统中8259的
ICW2端口地址
MY8259_ICW3EQU21H;实验系统中8259的
ICW3端口地址
MY8259_ICW4EQU21H;实验系统中8259的
ICW4端口地址
MY8259_OCW1EQU21H;实验系统中8259的
OCW1端口地址
MY8259_OCW2EQU20H;实验系统中8259的
OCW2端口地址
MY8259_OCW3EQU20H;实验系统中8259的
OCW3端口地址
MY8253_COUNT0EQU40H;实验系统中8253计数器
0端口地址
MY8253_COUNT1EQU41H;实验系统中8253计数器
1端口地址
MY8253_COUNT2EQU42H;实验系统中8253计数
器2端口地址
MY8253_MODEEQU43H;实验系统中8253控制寄
存器端口地址
MY8255_AEQU0F0H;实验系统中8255的A口
地址
MY8255_BEQU0F1H;实验系统中8255的B口
地址
MY8255_CEQU0F2H;实验系统中8255的C
口地址
MY8255_MODEEQU0F3H;实验系统中8255的控
制寄存器地址
*****************************************************************
DATASEGMENT
CS_BAKDW?
;保存INTR原中断处理程序入
口段地址的变量
IP_BAKDW?
;保存INTR原中断处理程序入口
偏移地址的变量
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,3508H
INT21H
MOVIP_BAK,ES;保存INTR原中断处理程
序入口偏移地址
MOVCS_BAK,BX;保存INTR原中断处理
程序入口段地址
MOVAX,SEGINITIAL
MOVDS,AX
MOVDX,OFFSETINITIAL
MOVAX,2508H
INT21H;设置中断向量
MOVDX,MY8259_ICW1;初始化实验系统中8259的ICW1
MOVAL,13H;边沿触发、单片8259、需要ICW4
OUTDX,AL
MOVDX,MY8259_ICW2;初始化实验系统中8259的ICW2
MOVAL,08H;IR0中断类型号
OUTDX,AL
MOVDX,MY8259_ICW4;初始化实验系统中8259的ICW4
MOVAL,03H;自动结束EOI
OUTDX,AL
MOVDX,MY8259_OCW1;初始化实验系统中8259的OCW1
MOVAL,0FEH;打开IR0的屏蔽位
OUTDX,AL
MOVAL,00H
MOVDX,MY8259_OCW2;初始化实验系统中8259的OCW2,完成8259的初始化
OUTDX,AL
QUERY:
MOVDX,MY8259_OCW3;向8259的OCW3发送查询命令
MOVAL,0CH
OUTDX,AL
INAL,DX;读出查询字
TESTAL,80H;判断中断是否已响应
JZQUERY;没有响应则继续查询
ANDAL,01H
CMPAL,00H
JNEQUERY;若不是IR0请求,继续查询
L4:
INT08H;调用08H中断程序
CALLDELAY3S;延时3秒
MOVDX,MY8255_A;写8255的A口
MOVAL,12H
OUTDX,AL;L2、L5亮
CALLDELAY45S;延时45秒
MOVCX,03H;周期1S,循环三次完成灯闪烁
L2:
MOVDX,MY8255_A;写8255的A口
MOVAL,02H
OUTDX,AL;L2亮、L5灭
CALLDELAYHALFS;延时秒
MOVDX,MY8255_A
MOVAL,12H
OUTDX,AL;L2、L5亮
CALLDELAYHALFS;延时秒
DECCX
JNZL2;L2亮,L5闪烁
MOVDX,MY8255_A;写8255的A口
MOVAL,06H
OUTDX,AL;L2、L3亮
CALLDELAY3S;延时3秒
MOVDX,MY8255_A;写8255的A口
MOVAL,21H
OUTDX,AL;L1、L6亮
CALLDELAY45S;延时45秒
MOVCX,03H;周期1S,循环三次完成灯闪烁
L3:
MOVDX,MY8255_A;写8255的A口
MOVAL,01H
OUTDX,AL;L1亮、L6灭
CALLDELAYHALFS;延时秒
MOVDX,MY8255_A;写8255的A口
MOVAL,21H
OUTDX,AL;L1、L6亮
CALLDELAYHALFS;延时秒
DECCX;L1亮,L6闪烁
JNZL3
MOVDX,MY8255_A;写8255的A口
MOVAL,09H
OUTDX,AL;L1、L4亮
CALLDELAY3S;延时3秒
JMPL4;循环一次完成,跳到L4重新开始循环
MOVAH,4CH
INT21H;返回DOS
INITIALPROC;中断类型号08H的中断子程序
MOVDX,MY8253_MODE;对8253初始化
MOVAL,36H
OUTDX,AL
MOVAX,0E86BH
MOVDX,MY8253_COUNT0
OUTDX,AL
MOVAL,AH
OUTDX,AL;计数器0工作方式3,OUT0为频率20HZ的方波
MOVDX,MY8255_MODE
MOVAL,89H
OUTDX,AL;8255初始化完成A口输出,C口输入
MOVDX,MY8255_A
MOVAL,03H
OUTDX,AL;两个红灯L1、L2亮,灯初始化完成
IRET
INITIALENDP;开机初始化完成
DELAY3SPROC;延时3S子程序
MOVAL,51H
MOVDX,MY8253_MODE
OUTDX,AL
MOVAL,59H
MOVDX,MY8253_COUNT1
OUTDX,AL;计数器1工作方式0,计数初值为59
L1:
MOVDX,MY8255_C
INAL,DX
CMPAL,01H
LOOPNZL1
RET
DELAY3SENDP
DELAY45SPROC;延时45S子程序
MOVAL,71H
MOVDX,MY8253_MODE
OUTDX,AL
MOVAX,0899H
MOVDX,MY8253_COUNT1
OUTDX,AL
MOVAL,AH
OUTDX,AL;计数器1工作方式0,计数初值为899
L5:
MOVDX,MY8255_C
INAL,DX
CMPAL,01H
LOOPNZL5
RET
DELAY45SENDP
DELAYHALFSPROC;延时子程序
MOVAL,51H
MOVDX,MY8253_MODE
OUTDX,AL
MOVAL,09H
MOVDX,MY8253_COUNT1
OUTDX,AL;计数器1工作方式0,计数初值为9
L6:
MOVDX,MY8255_C
INAL,DX
CMPAL,01H
LOOPNZL6
RET
DELAYHALFSENDP
DELAY40SPROC;延时40S子程序
MOVAL,71H
MOVDX,MY8253_MODE
OUTDX,AL
MOVAX,0799H
MOVDX,MY8253_COUNT1
OUTDX,AL
MOVAL,AH
OUTDX,AL;计数器1工作方式0,计数初值为799
L7:
MOVDX,MY8255_C
INAL,DX
CMPAL,01H
LOOPNZL7
RET
DELAY40SENDP
CODEENDS
ENDSTART
四、结论与愿望
1、结论:
理论上结果应为东西南北两个方向起始状态全为红,延续3秒。
东西方向红灯亮,南北方向绿灯亮,延续45秒。
东西方向红灯亮,南北方向绿灯以频率1HZ闪烁3秒。
东西方向红灯亮,南北方向黄灯亮,延续3秒。
东西方向绿灯亮,南北方向红灯亮,延续40秒东西方向绿灯亮以频率1HZ闪烁3秒,南北方向红灯。
东西方向黄灯亮,南北方向红灯亮,延续3秒。
东西方向红灯亮,南北方向红灯亮循环以上步骤。
但由于没有实际硬件设施没能进行检测。
在本次设计中,使用了8259A中断控制器、8253计数器、8255可编程并行接口实现了,对南北、东西方向交通的分别计时、分别控制,但是 由于不熟悉试验箱8段代码管的线路,未能进行数码倒计时显示,这是设计的遗憾。
2、愿望:
由于知识的不足只能借鉴一定的已成代码进行设计,希望以后能够更加掌握汇编语言,能够自主设计能力,而不是一贯的借鉴已有代码,而且希望以后能够有相应的设施进行调试与检测。
还有程序没有实现对双向交通的数码显示,希望能将程序补全,使其具有完整的交通灯功能。
五、心得体会及建议
此次实习可以说是获益匪浅。
通过查阅了很多资料,了解了许多汇编程序的思想,扩展了自己的视野,不再仅仅局限于书本中几条简短的程序,而且更重要的是明白写程序的态度:
仔细谨慎,精益求精。
微机原理和接口技术是一门实践性强的学科,不但要求有较高的理论水平,而且还要求有实际的动手能力,其中很多的原量、规则、现象等仅仅靠学习教科书是无法完全掌握的,必须通过实践才能比较直观和深刻的理解。
本课程设计的主要目的是提高实践能力,包括提高汇编等语言的编程能力及对接口等硬件的理解分析能力和设计接口电路的能力,在进行课程设计的过程中,可以让学生体验分析问题、提出解决方案、通过编程等手段实现解决方案、不断调试最终达到设计要求的全过程,从而帮助学生系统地掌握微机原理的接口技术的相关知识,达到将知识融会贯通的目的。
通过该课程设计,掌握了什么是编译程序,编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程、构造工具及其相关的技术对课本上的知识有了更深的理解。
利用8086、8259、8253、8255、8282、8286以及38译码器和门电路设计了交通灯数字控制系统。
通过利用汇编,编写了软件控制程序。
在这次课程设计的过程中,我无论是在关于X86系列的相关知识或在接口芯片的初始化及应用方面还是在利用所学到知识全面设计系统方面收获都很大。
刚拿到设计题目觉得无从下手,经过仔细分析问题之后找到了行之有效的解决问方法。
虽然六盏灯一共有七种不同的亮灭状态,其实只需用8255的A口的低六位不同状态即可控制。
针对不同的延时时间,采用8253的计数器0和计数器1的级联可以准确定时。
考虑到绿灯闪烁频率为1HZ,故让8253的计数器0的输出OUT0为20HZ的方波作为计数器1的时钟频率。
这样对8253计数器1的计数初值写不同的值即可实现不同的定时。
本系统的核心计时方法是:
8253计数器1的输出OUT1送给8255的C口的PC0,然后8086读8255的C口的值来判断是否改变灯的状态。
8255的C口相当于控制系统中的反馈环节,是本系统的能够准确及时的原因所在。
对于硬件系统的设计查阅相关资料,从而引入了8284、8282、8286芯片使硬件系统更加完善。
硬件设计最大的问题是地址译码电路的设计,针对这一问题我先找出8259、8253、8255芯片的端口地址之间的联系再利用数字电子技术知识解决了地址译码电路问题。
通过设计交通灯数字控制系统将软硬充分相结合,学会了很多有用的知识锻炼了软硬相互协调的能力。
同时也增强了全面系统考虑问题的能力,以及硬件设计能力。
可以说这次课程设计对以后的学
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 8086 交通灯 控制系统 课程 实验设计 报告