交通信号灯实时控制系统设计报告1.docx
- 文档编号:6250051
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:14
- 大小:64.35KB
交通信号灯实时控制系统设计报告1.docx
《交通信号灯实时控制系统设计报告1.docx》由会员分享,可在线阅读,更多相关《交通信号灯实时控制系统设计报告1.docx(14页珍藏版)》请在冰豆网上搜索。
交通信号灯实时控制系统设计报告1
第一章设计课题要求
1.1设计目的
随着社会经济的发展,城市交通问题越来越引起人们的关注。
人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。
交通灯控制系统是用于城市交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。
随着城市机动车量的不断增加,许多大城市如北京、上海、南京等出现了交通超负荷运行的情况,因此,自80年代后期,这些城市纷纷修建城市高速道路,在高速道路建设完成的初期,它们也曾有效地改善了交通状况。
然而,交通量的快速增长和缺乏对高速道路的系统研究和控制,高速道路没有充分发挥出预期的作用。
而城市高速道路在构造上的特点,也决定了城市高速道路的交通状况必然受高速道路与普通道路耦合处交通状况的制约。
所以,如何采用合适的控制方法,最大限度利用好耗费巨资修建的城市高速道路,缓解交通拥堵状况,越来越成为交通运输管理和城市规划部门亟待解决的问题。
通过本实验:
⒈掌握交通信号灯实时控制系统的设计思想与实现方法。
⒉掌握定时/计时器和并行接口在实时控制系统中的应用。
⒊加深对定时/计时器和并行接口芯片的工作方式和编程方法的了解。
1.2设计任务
设计制作一个交通信号灯实时控制系统。
要求:
⒈在一个十字路口的一条主干道和一条支干道上分别装一套红,黄,绿3种信号灯;用钮开关模拟十字路口的车辆检测传感器信号。
⒉在一般情况下,主干道上的绿灯常亮,而支干道上总是红灯。
⒊当检测到支干道上来车时(用按键开关模拟),主干道的绿灯转为黄,持续4秒后,又变成红灯,同时支干道由红灯变为绿灯。
⒋支干道绿灯亮后,或者检测到主干道上来了3辆车(用3个钮子开关模拟),或者虽未来3辆车,但绿灯已持续了25秒,则支干道立即变为黄灯,4秒后转为红灯,同时主干道由红灯变为绿灯。
1.3实验设备器材
⒈80X86系列微机一台。
⒉微机硬件实验平台。
⒊定时/计时器和并行接口芯片。
⒋按键开关1个(单脉冲源),钮子开关(高低电平开关)3个及红,黄,绿发光二极管(即实验平台上的三色显示灯)。
第二章总体设计方案及其流程图
2.1基本工作原理
根据实验任务要求,在本实验系统中,微机需要检测4个开关送来的主,支干道车辆到达信号,并按一定的条件发出主,支干道6个信号灯的控制信号。
显然,用一片8255A足以满足上述要求。
对8255A各端口不妨作如下安排:
令端口B工作于方式0的无条件数据输出方式,用以控制交通灯的亮灭;端口C工作于方式0的输入方式,一方面当支干道上有车来时(用pc1,pc2,pc3,pc4控制),控制主,支干道交通灯变换状态。
另一方面pc7用来检测8253A是否已经产生了1秒的脉冲,用来控制相应的程序。
有关定时/计时器的功能,可以采用8253计时/定时器结合中断服务程序计数的方法来实现。
可设想用8253来产生秒时钟信号,为此可以设置8253的定时器0工作方式3(方波方式),定时器2工作于方式2(分频方式),并将定时器0的输出端接到定时器1的时钟端T4。
这样,就可以做到让定时器0每隔10ms向定时器1发出一个计数脉冲,而当定时器1计满100个数时,向主机发出一次中断请求信号,于是就实现了每隔1s发出一次中断请求的功能。
然后在时钟中断服务程序中对秒信号作相应的计数。
(通道0接10KHZ的方波脉冲源)。
对于LED灯只要给予各灯高电平就能实现各灯的正常工作(亮)。
2.2硬件的总计设计
2.2.1硬件电路设计
各芯片主要管脚的功能如下:
8255A:
PB0:
表示主干道红灯信号,其中1表示亮,
PB1:
表示支干道红灯信号,其中1表示亮
PB2:
表示主干道黄灯信号,其中1表示亮
PB3:
表示支干道黄灯信号,其中1表示亮
PB4:
表示主干道绿灯信号,其中1表示亮
PB5:
表示支干道绿灯信号,其中1表示亮
PC0~PC3:
用来模拟支道上车的信号
PC7:
做标志信号,1表示计数器已经产生了一秒的脉冲
8253A:
定时器0:
输入接在T4,工作在方式3,计数初值为1000
OUT0和PC0相与得到黄灯信号。
定时器2:
输入信号为OUT0,工作在方式2,计数初值为100。
2.2.2所用到的芯片及其各自功能说明
2.2.2.18255的功能简介
8255A是Intel系列的并行接口芯片。
由于它是可编程的,可以通过软件来设置芯片的工作方式,所以,用8255A连接外部设备时,通常不需要再附加外部电路,给使用到来很大的方便。
8255A有三个8位数据端口,即端口A、端口B、端口C。
设计人员可以用软件使它们分别作为输入端口或输出端口。
8255A可以通过指令在控制端口中设置控制字来决定它的工作。
控制字分为两类:
1、各端口的方式选择控制字:
它可以使8255A的3个数据端口工作在不同的工作方式。
方式选择控制字总是将3个数据端口分为两组来设定工作方式,即端口A和端口C的高4位作为一组,端口B和端口C的低4位作为一组。
(图2.1)
图2.1
2、C端口按位置1/置0控制字:
它可以使C端口中的任何一位进行置位或复位。
第7位称为标识位,方式选择控制字的第7位总是1;而端口C置1/置0控制字的第7位总是0。
8255A的三种工作方式:
方式0:
基本的输入/输出方式
方式1:
选通的输入/输出方式
方式2:
双向传输方式
②端口A可以工作在3种工作方式中的任何一种,端口B只能工作在方式0或方式1,端口C则常常配合端口A和端口B工作,为这两个端口的输入/输出传输提供控制信号和状态信号。
③归为同一组的两个端口可以分别工作在输入方式和输出方式,并不要求同为输入方式或同为输出方式。
而一个端口具体到底作为输入端口还是输出端口,这也由方式选择控制字来决定。
2.2.2.28253A的功能简介
Intel8253是一种具有计数和定时的芯片,被称为可编程间隔定时器。
8253内部具有3个独立的16位计数器通道(分别为通道0,1,2),通过对它进行编程,每个计数器通道均可按6种不同的方式工作,并且都可以按2进制或十进制格式进行技术,最高计数频率能达到2Mhz。
8253A可以通过指令在控制端口中设置控制字来决定它的工作。
(图2.2)
D7D6D5D4D3D2D1D0
SC1
SC0
RW1
RW0
M2
M1
M0
BCD
00计数器000计数器锁存读命令000方式0D0=0按二进制格式计数
01计数器101只读/写低字节001方式1D0=1按BCD码格式计数
10计数器210只读/写高字节*10方式2
11非法11先读/写低字节*11方式3
,后读/写高字节100方式4
101方式5
图2.2
8253A有6种工作方式:
1.方式0:
计数结束则中断
当将某计数器设置成方式0后,其输出OUT变低电平,装入初值后,仍保持低电平。
门控为高电平开始计数。
每来一个计数脉冲CLK,计数器的值减1,当计数到达终点即计数器的值变成0时,OUT变为高电平。
在计数期间可用门控信号暂停计数(即门控为低电平时,计数暂停)。
出端OUT由低变高可以用来作为中断请求信号(正是由于这种作用,许多教材中称方式0为完成计数时中断),也可作为查询信号,也可直接去控制某个操作,如让某个开关动作。
2.方式1:
单脉冲发生器即可编程单脉冲发生器
所谓单稳,是指这样的电路,它有两种状态,但只能稳定在一种状态。
在一定的外界作用下,它能从这一种状态进入到另一种状态,但经过一定时间后,又自动恢复到原来的状态。
3.方式2:
速率波发生器
方式2用来对输入脉冲(即计数脉冲CLK)N分频(N为预置的初值),在输出信号周期中低电平的时间为一个CLK周期。
设置此方式后,OUT变高电平,装入初值后便自动开始计数,减到1时OUT变低电平。
经过一个CLK周期,OUT恢复高电平,且计数器又自动装入初值,重新开始计数。
如此循环下去。
若GATE变低电平将禁止计数,并使输出为高电平。
在GATE再次变高电平时,计数器将重新装入预置的初值,并开始计数。
4.方式3:
方波发生器
方式3类似于方式2,输出是周期性的。
不同的是方式3输出方波。
如果预置的初值N为偶数,则输出周期中高电平和低电平的宽度相等;如果N为奇数,则输出周期中高电平比低电平多一个CLK周期的时间,当N相当大时,也可认为是方波。
当然,一般采用方式3时,置初值为偶数。
设置成方式3后,OUT变高电平,装入初值后便自动开始计数。
如初值为偶数,每个CLK使计数器减2,计到终点改变电平。
如初值为奇数,则输出为高电平时第一个CLK使计数器减1,随后每个CLK使计数器减2;输出为低电平时第一个CLK使计数器减3,随后每个CLK使计数器减2。
每当计数到终点都会改变电平,初值又被重新装入,并开始计数。
如此循环下去,
5.方式4:
软件触发方式计数
设置成方式4后,OUT变高电平,写入计数值后自动开始计数(所以称之为软件触发),计数到终点输出一个CLK周期的低电平脉冲。
GATE变低可暂停计数,用GATE的上升沿可重新赋初值,并开始计数。
6.方式5:
硬件触发方式计数
设置成该方式后,OUT变高电平,写入计数值后需等待GATE上升沿的到来才开始计数(所以称之为硬件触发)。
计数到终点也输出一个CLK周期的低电平脉冲。
计数过程中不受GATE电平的影响。
此后,用GATE的上升沿可重新赋初值,并开始计数。
2.2.3硬件框图
根据上面的分析可得下列硬件部分的流程框图(图2.3)
图2.3
2.3软件总体设计
根据上面分析可得下列的软件流程图,主程序流程图如图2.4,
第三章典型程序模块及典型编程技巧分析
3.1计数模块
为了实现本次设计要求的秒计数功能,软件编程8253A的定时器0工作方式3(方波方式),定时器1工作于方式0(分频方式),并将定时器0的输出端接到定时器1的时钟端。
这样,就可以做到让定时器0每隔10ms向定时器1发出一个计数脉冲,而当定时器1计满100个数时,会产生一个高电平信号,用8255A的一个端口来检测这个信号,每隔1秒跳转到子程序实现倒计时每次减一运算,然后送显示。
具体程序如下:
;定时器0工作方式3(方波方式)10ms
movdx,223h
moval,16h;控制字
outdx,al
movdx,210h
moval,64h
outdx,al
;定时器2工作方式2(分频方式)100个数
movdx,223h
moval,54h;控制字
outdx,al
movdx,221h
moval,00001010b
outdx,al
3.2倒计时模块
不管是支道还是主道上的黄灯闪烁4秒后必将变成绿灯或者是红灯,建一个DATA1存放字模,实现用数码管显示剩余时间。
首先让BX指向DATA1首地址,将计数器中当前DL中的值赋给AL,通过检测8255A的pc7端口是否有高电平,检测到后进行减一然后在DATA1中找出相应的字模进行显示。
第四章设计中存在的问题
设计中具体出现的问题有:
起初设置时将8255A的片选基地址粗心的弄错,B端口的片选基地址应为:
0FF29H,C端口的片选基地址应为:
0FF2AH.在设置红绿黄灯的亮灭时,实际程序是从PB0-PB7顺序来的,而我们设置时去想像成PB7,PB6…PB0来的,所以在刚开始实验时总是感觉灯的亮灭有些颠倒次序.实验中曾出现了运行到红绿灯的第2个转换状态时,此时由于有绿灯到红灯之间的切换需要调用黄灯闪的子程序,实验箱上从此处开始会一直在黄灯子程序的状态之间变换显示.刚开始我们一直在查找是不是黄灯子程序在返回跳转上有问题,但是经过反复修改还是不行,最终发现是:
MOVAL,10000111B
OUTDX,AL
CALLDISP
MOVDX,IOCPT(此处起先未设置,应设置,因为这是调用的黄灯子程序,而他是由B口控制的和红绿灯的C口不是同一个状态口,既调用黄闪子程序时DX中的值被重新写入了,所以在重新使用C端口命令时要调用这一命令语句,将C口的地址重新写入,才可正确运行下去。
)
MOVAL,00101101B
第五章源程序
CODESEGMENT
ASSUMECS:
CODE
ORG11A0H
START:
CALLFORMAT
CALLDISP
MOVDX,43H
MOVAL,00110111B;写8253控制字
OUTDX,AL
MOVDX,40H;通道0工作方式3(方波方式)
MOVAL,00H;初值设置(设为1000)
OUTDX,AL
MOVAL,10H
OUTDX,AL
MOVDX,43H;通道2工作方式0(分频方式)
MOVAL,10110001B;控制字
OUTDX,AL
MOVDX,0FF2BH;初始化8255,设置各端口工作模式
MOVAL,10011001B;控制字
OUTDX,AL
GOON:
CALLDISP
MOVDX,0FF29H;从8255的b端口送出红绿灯信号
MOVAL,00010010B;主绿支红
OUTDX,AL
JUDGE1:
MOVDX,0FF2AH;支干道有车吗
INAL,DX
TESTAL,01H;pc0开关
JNZLED1
JMPGOON
JUDGE2:
MOVDX,0FF2AH;主干道有3辆车吗?
INAL,DX
ANDAL,00001110B;pc1,pc2,pc3
CMPAL,00001110B
JZGOON
LED1:
MOVDX,0FF29H;送主干道黄灯,支干道红灯数据
MOVAL,00000110B;主黄支红
OUTDX,AL
MOVBYTEPTRDS:
[0701H],04;初始化倒计时秒数
MOVAL,DS:
[0701H]
CALLCONVERS;转换
CALLDISP;显示
P0:
MOVDX,42H
MOVAL,00H
OUTDX,AL
MOVAL,01H
OUTDX,AL
;检测8253是否有1
P1:
MOVDX,0FF2AH;8255A的C端口(输入,检查是否1秒到)
INAL,DX
TESTAL,10000000B;pc7
JZP1
DECBYTEPTRDS:
[0701H]
JZLED2
MOVAL,DS:
[0701H]
CALLCONVERS
CALLDISP
JMPP0
LED2:
MOVDX,0FF29H
MOVAL,00100001B;主红支绿
OUTDX,AL
;25秒倒计时
MOVBYTEPTRDS:
[0702H],25
MOVAL,DS:
[0702H]
CALLCONVERS
CALLDISP
P3:
MOVDX,42H
MOVAL,00H
OUTDX,AL
MOVAL,01H
OUTDX,AL
JUDGE4:
MOVDX,0FF2AH;主干道有3辆车吗?
INAL,DX
ANDAL,00001110B;1,2,3
CMPAL,00001110B
JZLED3
MOVDX,0FF2AH;c
INAL,DX
TESTAL,10000000B;pc7
JZJUDGE4
DECBYTEPTRDS:
[0702H]
JZLED3
MOVAL,DS:
[0702H]
CALLCONVERS
CALLDISP
JMPP3
H1:
MOVBX,0
MOVWORDPTRDS:
[BX+077AH],0000H
CALLDISP
JMPGOON
LED3:
MOVDX,0FF29H;送主干道红灯,支干道黄灯数据
MOVAL,00001001B;主红支黄
OUTDX,AL
MOVBYTEPTRDS:
[0701H],04D
MOVAL,DS:
[0701H]
CALLCONVERS
CALLDISP
P5:
MOVDX,42H
MOVAL,00H
OUTDX,AL
MOVAL,01H
OUTDX,AL
P6:
MOVDX,0FF2AH;c
INAL,DX
TESTAL,10000000B;pc7
JZP6
DECBYTEPTRDS:
[0701H]
JZH1
MOVAL,DS:
[0701H]
CALLCONVERS
CALLDISP
JMPP5
RET
CONVERS:
MOVCL,10D
MOVAH,0
DIVCL
MOVBX,077AH
MOVDS:
[BX],AH
INCBX
MOVDS:
[BX],AL
RET
;显示模块
DISP:
MOVCX,0FFH
DISP2:
PUSHCX
MOVDX,077BH
MOVAH,02H
DISP0:
MOVCX,00FFH
MOVBX,DX
MOVBL,DS:
[BX]
MOVBH,0H
PUSHDX
MOVDX,0FF22H
MOVAL,CS:
DATA1[BX]
OUTDX,AL
MOVDX,0FF21H
MOVAL,AH
OUTDX,AL
DISP1:
LOOPDISP1
POPDX
DECDX
SHRAH,01H
JNZDISP0
MOVDX,0FF22H
MOVAL,0FFH
OUTDX,AL
POPCX
DECCX
JNZDISP2
RET
DATA1DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB80H,90H,88H,83H,0C6H,0A1H,86H,8EH
DB0FFH,0CH,89H,0DEH,0C7H,8CH,0F3H,0BFH
DB90H,0A3H,0A1H,86H,8FH
FORMAT:
MOVBX,0
MOVWORDPTRDS:
[BX+077AH],0000H
ADDBX,2
MOVWORDPTRDS:
[BX+077AH],0000H
ADDBX,2
MOVWORDPTRDS:
[BX+077AH],0000H
RET
CODEENDS
ENDSTART
第六章心得体会
微机原理与接口技术是一门很有趣的课程,任何一个计算机系统都是一个复杂的整体,学习计算机原理是要涉及到整体的每一部分。
讨论某一部分原理时又要涉及到其它部分的工作原理。
这样一来,不仅不能在短时间内较深入理解计算机的工作原理,而且也很难孤立地理解某一部分的工作原理。
所以,在循序渐进的课堂教学过程中,我总是处于“学会了一些新知识,弄清了一些原来保留的问题,又出现了一些新问题”的循环中,直到课程结束时,才把保留的问题基本搞清楚。
学习该门课程知识时,其思维方法也和其它课程不同,该课程偏重于工程思维,具体地说,在了解了微处理器各种芯片的功能和外部特性以后,剩下额是如何将它们用于实际系统中,其创造性劳动在于如何用计算机的有关技术和厂家提供的各种芯片,设计实用的电路和系统,再配上相应的应用程序,完成各种实际应用项目。
这次实验并不是很难,主要的困难来自对程序的理解以及对中断的使用。
功夫不负有心人,经过合作和努力,我们最后对实验的原理有了清晰的认识。
虽然很多模块单元没有用到,但是就系统功能来说,我觉得我们做的还是不错的。
虽然程序在编写时有一些参考资料和现成的程序作参考,但我们还是通过咨询老师和查阅资料的方式读懂了试验具体的操作和思路.在实验操作过程中,我学会了先画流程图和分析好思路再编写程序的良好习惯.实验中我们也遇到了很多的问题,也因为一直找不到问题的症结所在,我们还在设计的尝试上浪费了很多时间,不过也因为我们多次的尝试让我们对曾经出现的问题更加的印象深刻,也让我们对此后相同的问题上不会再犯相同的错误,我想这也是我们收获的来源.
这次课设同时让我们对实验芯片有了足够的了解,让我们知道了实验芯片的用法,比如8255A,8253A等等;而且它还让我们对自己动手写程序来控制芯片的运作有了一定的基础。
虽然只是一个小型的课程设计,但是通过学习和操作,我们对有关接口的知识将会有一个更广泛的认识,而且它对我们以后的学习也会有帮助的。
实验中个人的力量是不及群体的力量的,这次设计我跟一班的郭靖同学做了相同的题目,每次遇到自己无法解决的问题时,自己会主动与她交流,共同探讨。
而且实验也教会我们在团队中要善于与人相处,与人共事,不要一个人解决所有问题。
总之,这次课程设计对于我们有很大的帮助,通过课程设计,我更加深入地理解了,微机原理课程上讲到的各种芯片的功能,以及引脚的作用,同时加深了对于主要芯片的应用的认识,同时在试验室的环境里熟悉了汇编程序的编写过程和运行过程,最后还提高了自己的动手能力。
感谢老师的悉心指导。
这个设计过程中,我遇到过许多次失败的考验,就比如,自己对实际生活中的交通秩序的不了解给整个设计带来的困扰,真想要就此罢休,然而,就在想要放弃的那一刻,我明白了,原来结果并不那么重要,我们更应该注重的是这一整个过程。
附录一参考文献
[1]杨素行.微型计算机系统原理及应用.北京:
清华大学出版社,1995.10
[2]钱晓捷.汇编语言程序设计.北京:
电子工业出版社,2000.9
[3]周明德.微型计算机IBMPC/XT系统原理及应用.北京:
清华大学出版社,1991.7
[4]吴秀清,周荷琴.微型计算机原理与接口技术.合肥:
中国科学技术大学出
版社,2004.12
[5]微机实验原理教程(电子书)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通 信号灯 实时 控制系统 设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)