ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:93.78KB ,
资源ID:15951175      下载积分:5 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-15951175.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(交通灯控制软件的开发.docx)为本站会员(b****6)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

交通灯控制软件的开发.docx

1、交通灯控制软件的开发交通灯控制软件的开发1 十字路口基本情况分析设有一个十字路口,1、3为东西方向,2、4为南北方向,1、3路口的绿灯亮,2、4路口的红灯亮,1、3路口方向通车; 延时一段时间后,1、3路口的绿灯熄灭,而1、3路口的黄灯开始闪烁,闪烁若干次以后,1、3 路口红灯亮, 而同时2、4路口的绿灯亮,2、4路口方向通车;延时一段时间后,2、4 路口的绿灯熄灭,而黄灯开始闪烁,闪烁若干次以后,再切换到1、3路口方向,之后重复上述过程。2 交通灯状态转换分析合理的设置每个路口、每个方向的交通灯的通行时间,对车辆能否及时疏散,有着决定性的作用。状态1 的时候:1、3路口的绿灯熄灭,1、3路口

2、的黄灯开始亮,当通行时间剩下5秒结束时,LED会闪烁,而同时2、4路口的红灯亮状态2的时候:1、3 路口红灯亮, 而同时2、4路口的绿灯亮,2、4路口方向通车;状态3的时候:1、3 路口红灯亮, 而同时2、4路口的黄灯亮;状态4 的时候:1、3路口的绿灯亮,2、4路口的红灯亮,1、3路口方向通车。整个状态转换的过程见表2-1。表2-1 路口四个状态和相互转换过程状态每个路口灯的点亮情况通行时间路口1路口2路口3路口4状态1(ZT1)黄 红 黄 红5s状态2(ZT2)红 绿 红 绿15s状态3(ZT3) 红 黄 红 黄5s状态4(ZT4)绿红绿红15s完成四个状态的一次循环需要40秒, 红灯亮2

3、0秒 、绿灯亮15秒 、黄灯亮5秒完成了在适当的时间限度内,有效的疏散较大的通行量的目的。3 紧急通行情况分析手动拨动单脉冲一次,则产生一个优先级高一级的中断,程序转而执行此中断处理程序,处理完后返回继续执行低级中断。整个执行过程见图3-1图3-1 紧急中断程序4 硬件功能分析4.1 8253A定时/计数器芯片8253A定时/计数器具有定时、计数双功能。它具有三个相同且相互独立的16位减法计数器,分别称为计数器0、计数器1和计数器2。每个计数器计数频率为02MHZ。其内部数据总线缓冲器为双向三态,故可直接连在系统数据总线上,通过CPU写入计数初值,也可由CPU读出计数当前值。读写控制逻辑,当选

4、中该芯片时,根据读写命令和送来的地址信息控制整个芯片工作。其工作方式通过控制字确定。控制字寄存器用于接收数据总线缓冲器的信息。当写入控制字时,控制计数器的工作方式;当写入数据时则装入计数初值。控制寄存器为8位,只能写入不能读出。8253A内部结构见图4-1。当8253A执行计数功能时,计数器装入初值后,当GATE为高电平时,可用外部事件作为CLK脉冲对计数值进行减1计数。每来一个脉冲减1,当计数值减为0时,由OUT端输出一个标志信号。当8253A执行定时功能时,计数器装入初值后,当GATE为高电平时,由CLK脉冲触发开始自动计数。当计数到零时,发计数结束定时信号。8253A可以工作在方式0到方

5、式5,常用的有方式2频率发生器方式和方式3方波发生器方式。在方式2时,当初值装入后,OUT变为高;计数结束,OUT变为低。该方式下如果计数未结束,但GATE为低时,立即停止计数,将OUT变为高;当GATE再变高时,便启动一次新的计数周期。在方式3时,当装入初值后,在GATE上升沿启动计数,OUT输出高电平;当计数完成一半时,OUT输出低电平。在本系统中,8253A工作于方式3方波发生器方式。图 4-1 8253A内部结构图4.2 8259A中断控制器芯片8259A是专为控制优先级中断而设计的芯片。它将中断源按优先级排队、辨认中断源和提供中断向量的电路集成于一体,只要用软件对它进行编程,就可以管

6、理8级中断。8259A的内部结构见图4-2。它由中断请求寄存器(IRR)、优先级分析器、中断服务寄存器(ISR)、中断屏蔽寄存器(IMR)、数据总线缓冲器、读写控制电路、级联缓冲器和比较器组成。控制逻辑服务寄存器优先级分析器中断请求寄存器中断屏蔽寄存器IMR内部总线IR0IR1IR2IR3IR4IR5IR6IR7数据总线控制器读写电路级联缓冲器/比较器CAS0CAS1CAS2D0-D7-RD-WRA0-CSSP/-ENINT-INTA图 4-2 8259A的内部结构对8259A编程和初始化的时候,首先要写初始化命令字ICW1-ICW4。写ICW1以确定中断请求信号类型,清除中断屏蔽寄存器,进行

7、中断优先级排队和确定系统是用单片还是多片。写ICW2用来定义中断向量的高五位类型码。ICW3可以定义主片8259A中断请求线上IR0-IR7有无级联的8259A从片。写ICW4用来定义8259A工作时用8085模式还是8088模式,以及中断服务寄存器复位方式等。初始化命令字写完以后,要写8259A的控制命令字,它包括OCW1-OCW3。写OCW1可以设置或清除对中断源的屏蔽。写OCW2设置优先级是否进行循环、循环的方式和中断结束的方式。8259A复位时自动设置IR0优先权最高,IR7优先权最低。写OCW3用来设置查询方式和特殊屏蔽方式,并可以读取8259A中断寄存器的当前状态。在本系统中,使用

8、8259A的循环等待中断工作方式。4.3 8255A可编程并行接口芯片8255A是一种可编程的芯片,它采用双列直插封装,用5V电源供电。内部有3个8位的I/0端口:A口、B口和C口。这三个端口也可以分为各有12位的两组:A组和B组。A组包含A口8位和C口的高四位,B组包含B口8位和C口的低四位;A组控制和B组控制用于实现方式选择操作;读写控制逻辑用于控制芯片内部寄存器的数据和控制字经数据总线缓冲器送入各组接口寄存器中。由于8255A数据总线缓冲器是双向三态8位驱动器,因此可以直接和8088系统数据总线相连。8255A的内部逻辑结构见图4-3。A组端口A组端口C高4位A组端口C低4位B组端口A组

9、控制B组控制数据总线缓冲器读写控制逻辑双向数据总线D0-D7I/0PA7-PA0I/0PC7-PC0I/0PC0-PC20I/0PB7-PB0-CSCPU接口内部逻辑外设接口-RD-WRA1 A0RESET图4-3 8255A的内部结构8255A有三种工作方式:方式0、方式1和方式2。它通过对控制寄存器写入不同的方式选择控制字来决定其三种不同的工作方式。方式0是基本输入输出方式。该方式下的A口8位和B口8位可以由输入的控制字决定为输入或输出,C口分成高4位(PC4-PC7)和低4位(PC0-PC3)两组,也有控制字决定其输入或输出。需要注意的是,该方式下,只能将C口其中一组的四位全部置为输入或

10、输出。方式1选通输入输出方式,又叫单向输入输出方式。它分为A、B两组,A组由数据口A和控制口C的高4位组成,B组由数据口B和控制口C的低4位组成。数据口的输入输出都是锁存的,与方式0不同,由控制字来决定它是作为输入还是输出。C口的相应位用于寄存数据传送中所需的状态信号和控制信息。方式2为双向输入输出方式。本方式只有A组可以使用。此时A口为输入输出双向口,C口中的5位(PC3-PC7)作为A口的控制位。在本系统中,8255A的三个端口均工作于方式0,全部为输出口。5 系统设计5.1硬件设计5.1.1 电路分析本系统要实现的功能是模拟十字路口红绿灯的工作状况。按照预先设定并优化的交通灯规则,控制L

11、ED指示灯的亮灭,同时在实验箱的数码管显示屏上显示剩余的时间。当时间递减到0的时候,改变LED灯的状态,并刷新显示屏显示的时间。为了实现以上功能需求,本系统需要12个LED指示灯,来分别代表1、3方向(东西),2、4方向(南北);两个双位的数码管显示屏,用来显示1、3路口和2、4路口剩余的时间。为了实时地更新数码管显示屏上的数字,需要使用8255A可编程芯片来即时地改变显示屏每个笔划的电平高低,从而准确地将需要显示的数字显示在数码管显示屏上。由于交通灯需要按秒进行计数,所以需要一个均匀地时钟发生器。8253A芯片是个功能丰富、使用简单的定时/计数器。它可以根据需要设置不同的显示初值,从而产生所

12、需频率的时钟脉冲,为系统提供计时和驱动其他事件的发生。8259A中断控制器芯片可以在收到8253A发出的时钟脉冲时,产生定时的中断,在中断服务程序中,更新显示缓冲区,并调用8255A芯片来执行相关程序,从而更新LED灯和数码管显示屏。本系统使用集成的电路和实验环境,以方便进行电路的连接和测试,同时减少由于电路的复杂性而产生的错误。5.1.2 电路连接设计本系统所使用到的硬件包括8253A芯片、8259A芯片、8255A芯片、LED指示灯和数码管显示屏。在电路连接的时候,将8255A芯片的PC口的PC5、PC4接红灯灯,PC3、PC2接绿灯,PC1、PC0接黄灯。通过改变8255A的PC口的值来

13、实时地控制每个LED灯的亮灭,从而改变十字路口的交通状态。将8253A的CLK0插孔连接至1MHZ的分频输出插孔T4。分频输出插孔所输出的频率是将系统的主频分解为一定的频率,以供其他硬件或者软件使用。8253A从分频插孔得到1MHZ的固定频率,再根据芯片内部设定的计数初值,从而产生需要频率的时钟脉冲,由OUT0口输出,供其他芯片使用。在这里OUT0接CLK2。将8253A的OUT2插孔连接至8259A的IRQ3插孔上。8259A的IRQ3中断口每隔固定的时间便会收到8253A发送过来的时钟脉冲,作为中断源来执行中断服务程序。在中断服务程序中,完成更新数码管显示值和改变交通灯状态的功能。硬件的连

14、接见图5-1和图5-2。图 5-1 系统电路图8253A和8259A的连接图RD PB0 PB1WR PB2A0 PB3A1 PB4RESET PB5CS PB6 PB78255A PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7VCCY7L3(控制绿灯)L6L9L12L1(控制红灯)L4L7L10L2(控制黄灯)L5L8L11CS_8255图 5-2 系统电路图8255A和LED灯的连接图5.2软件设计5.2.1 程序总体设计本系统采用“自上而下总体规划、自下而上应用开发”的策略进行总体设计和开发。先根据其功能需要,设定需要的功能模块,确定需要编写的子程序,从而使程序结构清晰,

15、便于阅读和调试,加快了系统完成的速度。结构化的程序设计方法很适合用来开发汇编语言程序,因为汇编语言的特性决定了其无法使用面向对象的程序开发方法;使用瀑布程序开发模型,从开始的时候把系统的需求分析透彻,对系统的功能和各个模块进行清晰的规划,从而缩短系统开发所用的时间。为了完成系统的功能,系统的程序部分应包含以下几个模块(见图5-3)。初始化模块用来初始化各个芯片,分为以下几个步骤:(1)初始化数据:T_1为1、3方向(东西)时间显示(如 5秒);T_2为2、4方向(南北)的时间显示。初值可同设为5秒。(2)初始化8255A的工作方式:使A、B、C三个端口均工作于方式0,且为输出口;DVCC实验台

16、8255口地址:FF28HFF2BH(3)初始化8253A芯片:选用方波发生器方式,并设定其使用通道0和2进行工作;DVCC实验台8253口地址:00400043H(4)初始化8259A:设定其工作方式为单片、边沿触发、要写ICW4、循环等待中断方式。DVCC实验台8259口地址:00600061H设置中断向量表 写2号、3号中断向量:INTREEUP2、INTREEUP3。中断处理模块:(1)INTREEUP3是主要的中断服务程序, 8253A每发来一次时钟脉冲便产生一次中断,两个路口所亮的灯对应的显示数值减一。并输出完成显示数值的更新使时间缓冲区中的时间减1,所以数码管显示屏上的数字才能够

17、不断的减少。然后判断其数值是否减到0,若0,则进行LED灯状态的切换(2)其中INTREEUP2是增加行人手动按钮。实现可手动干预的(交通事故、步行可及时通行的)交通灯自动控制系统有手动干预(按钮按下)时,交通灯立即处于该状态:两个方向均红灯亮(以便让行人及时通过)。10秒后,交通恢复到人工干预前状态,继续按正常状态循环切换。显示模块(DISP)使用8255A将显示缓冲区的字符逐位显示在数码管显示屏上,在中断请求没有到来的时候,根据交通灯所处的状态,点亮相应的LED灯;有中断请求时,调用相应的中断服务程序。初始化模块显示模块DISP中断处理程序INTREEUP3交通灯控制系统应急中断处理程序I

18、NTREEUP2图 5-3 系统模块图5.2.2 程序流程设计程序运行的流程图见图5-4,中断应急流程图见5-5。开始运行的时候,初始化程序,给初始显示区和电平错误显示区赋初值,显示相应的字符;定义数值对应的显示字符,便于转换程序取到时间数值对应的字符。接着对8253A、8255A和8259A进行初始化。定义8253A使用通道0和2,工作于方式3,其计数初值为3C50,每隔20ms向8259A发出一个时钟脉冲;8255A的A、B、C三个端口均工作于输出方式;8259A工作于循环等待中断方式。进入显示程序(DISP)使用8255A将显示缓冲区的字符逐位显示在数码管显示屏上,在中断请求没有到来的时

19、候,根据交通灯所处的状态,点亮相应的LED灯。当有中断的时候,则转到相应的中断服务程序,本系统主要为INTREEUP3程序。8253A每发来一次时钟脉冲便产生一次中断。INTREEUP3程序首先关闭中断,两个路口所亮的灯对应的显示数值减一。并输出以完成显示数值的更新使时间缓冲区中的时间减1,所以数码管显示屏上的数字才能够不断的减少。然后判断其数值是否减到0,若0,则进行LED灯状态的切换。最后打开中断,并中断返回。图5-4 主程序框图 图5-5 中断程序框图5.2.3 重要代码分析(1)中断服务程序INTREEUP3是本系统的程序最核心的子程序。它用来计算收到8353A发来的中断,8253A每

20、发来一次时钟脉冲便产生一次中断,两个路口所亮的灯对应的显示数值减一。并输出完成显示数值的更新使时间缓冲区中的时间减1,所以数码管显示屏上的数字才能够不断的减少。然后判断其数值是否减到0,若0,则进行LED灯状态的切换,以下是该程序的代码分析,并注有详细的功能说明。中断服务程序INTREEUP3: CLI ;处理中断时先关中断 push ax ;保存堆栈 push bx push dx STI ;保存现场后开中断以可以实现中断嵌套 ; 1、3方向(东西) DEC T_1 ;对当前数值减一 MOV AL,T_1 CMP AL,00H ;判断当前数值是否减到0 JE CHANGE1 ;若 当前数值为

21、0则跳到CHANGE1 切换状态 JMP RIGHT ;若 当前数值不为0则跳到2、4方向(南北) CHANGE1: MOV AL,C ;读入并口状态 TEST AL,02H ;测试当前并口状态 JNZ RED1 TEST AL,08H JNZ YELLOW1 TEST AL,20H JNZ GREEN1 RED1: MOV DX,IOC ; 1、3方向(东西)亮红灯 OR AL,20H AND AL,35H OUT DX,AL MOV C,AL ;保存c口状态 MOV T_1,14H ; 对新状态赋显示初值 JMP RIGHT YELLOW1:MOV DX,IOC 1、3方向(东西)亮黄灯

22、OR AL,02H AND AL,17H OUT DX,AL MOV C,AL ;保存c口状态 MOV T_1,05H ; 对新状态赋显示初值 JMP RIGHT GREEN1:MOV DX,IOC ; 1、3方向(东西)绿灯 OR AL,08H AND AL,1DH OUT DX,AL MOV C,AL ;保存c口状态 MOV T_1,0fH ; 对新状态赋显示初值 ;右边 RIGHT: DEC T_2 MOV AL,T_2 CMP AL,00H JE CHANGE2 JMP OUTPUT CHANGE2: MOV AL,C ;读入c口状态 TEST AL,01H JNZ RED2 TEST

23、 AL,04H JNZ YELLOW2 CMP AL,18H ;应急状态返回时2、4方向从新跳到红灯JZ RED2 ; (同时,1、3方向为绿灯) TEST AL,10H JNZ GREEN2 RED2:MOV DX,IOC OR AL,10H AND AL,3AH OUT DX,AL MOV C,AL ;保存c口状态 MOV T_2,14H JMP OUTPUT YELLOW2: MOV DX,IOC OR AL,01H AND AL,2BH OUT DX,AL MOV C,AL ;保存c口状态 MOV T_2,05H JMP OUTPUT GREEN2: MOV DX,IOC OR AL,

24、04H AND AL,2EH OUT DX,AL MOV C,AL ;保存c口状态 MOV T_2,0fH ;输出数字 OUTPUT: MOV AL,T_1 MOV AH,T_1 AND AL,01H MOV CL,4 SHR AH,CL MOV AL,T_2 MOV AH,T_2 AND AL,01H MOV CL,4 SHR AH,CL ;计数器从新赋初值 MOV AL,36H OUT 43H,AL MOV AL,50H OUT 40H,AL MOV AL,11000011B OUT 40H,AL MOV AL,10110110B ;计数器2 OUT 43H,AL MOV AL,02H O

25、UT 42H,AL MOV AL,00H OUT 42H,AL ;= ;= MOV AL,T_1 CMP AL,03H JA RIGHTTEST JMP YLEDSTARIGHTTEST: MOV AL,T_2 CMP AL,03H JA RETBCAKYLEDSTA: MOV AL,C AND AL,03H JNZ YLEDFLASH JMP RETBCAK ;= 时间小于等于3时 LED灯 闪烁 =YLEDFLASH: PUSH CX ; PUSH DX MOV CX,0AH ; 闪烁3次 MOV AL,C ;读入c口状态 AND AL,11111100B ; 灯灭 MOV DX,IOC

26、OUT DX,AL CALL DELAY ;短延时 MOV AL,C ;灯亮 OUT DX,AL CALL DELAY ;短延时 ; LOOP YLEDFLASH ;循环 ; POP DX POP CX JMP RETBCAK ;=;短延时 DELAY: CALL DELAY2 RETDELAY2: PUSH CX MOV CX,6A45H ;DELA1: LOOP DELA1 POP CX RET ;= ;= RETBCAK: MOV AL,20H ;写ocw2然后返回 MOV DX,0060h OUT DX,AL CLI pop dx pop bx pop ax STI IRET;=中断返

27、回 =6 系统实现6.1 软件开发与运行环境本系统的代码使用8086汇编语言编写,所以代码编写环境可以使用任何文本编辑器。如系统自带的记事本、DOS下的编辑工具EDIT和文本编辑工具UltraEdit等。本系统使用了DVCC-598JH+实验箱附带的DV88联机软件。它可以读取其他编辑软件生成的MASM格式的汇编语言文件(*.ASM),也可以作为汇编代码的编辑、测试、运行环境。在显示代码的时候,可以把常用的汇编指令显示为蓝色,数值显示为红色,注释显示为绿色,从而使论文清晰易读,并容易发现代码中的错误。DV88联机软件同样可以作为系统的运行环境。系统运行的时候需要将ASM源程序编译产生的OBJ文

28、件传送到实验箱,由实验箱上的处理器和各个芯片负责执行。6.2 系统硬件环境交通灯控制系统采用的DVCC-598JH+通用微机原理及接口实验系统,集成了8253A计数/定时器芯片、8255A可编程并行接口芯片和8259A中断控制器芯片,并把大部分的引脚进行了封装,方便直接进行使用;并设有12个LED显示灯;系统分频器可以产生特定频率的时钟脉冲;固定的导线接口,方便使用导线把各芯片进行连接;并设有键盘,可以随时控制程序的运行,方便进行调试。实验箱使用串行口连接线与PC机的串口相连,然后使用DV88联机软件与实验箱进行连接并传送运行的程序。6.3 系统运行步骤系统的代码编写完毕的时候,便可以进行程序

29、的联机调试了。将实验箱的电源线连接好,使用串口通信线将实验箱上的串口与PC机上的串口相连。将各个芯片和LED灯按照硬件连接设计图上的图示进行连接。打开实验箱的电源,数码管显示屏上显示“P.”,提示实验箱初始化成功。在PC机上打开DV88联机软件,调用编辑好的程序代码。首先进行编译,系统会自动调用MASM程序对代码进行编译。若没有提示错误,便可以点击连接按钮,调用LINK程序把编译生成的OBJ文件进行连接,生成EXE文件。再点进调试按钮,把生成的可执行文件传送到实验箱,进行调试状态,此时屏幕会显示实验箱各个寄存器的值。最后点击连续运行按钮,实验箱上的数码显示管和LED灯便会按照设计的要求进行工作。在运行的过程中可以随时按实验箱上的RESET键,中断程序的执行,以便进行代码的修改或者结束系统的运行。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2