电气毕业设计微机控制交通路口调度系统.doc

上传人:laozhun 文档编号:3989501 上传时间:2023-03-30 格式:DOC 页数:36 大小:1.06MB
返回 下载 相关 举报
电气毕业设计微机控制交通路口调度系统.doc_第1页
第1页 / 共36页
电气毕业设计微机控制交通路口调度系统.doc_第2页
第2页 / 共36页
电气毕业设计微机控制交通路口调度系统.doc_第3页
第3页 / 共36页
电气毕业设计微机控制交通路口调度系统.doc_第4页
第4页 / 共36页
电气毕业设计微机控制交通路口调度系统.doc_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《电气毕业设计微机控制交通路口调度系统.doc》由会员分享,可在线阅读,更多相关《电气毕业设计微机控制交通路口调度系统.doc(36页珍藏版)》请在三一办公上搜索。

1、引言当今,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。但这一技术在19世纪就已出现了。1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。这是世界上最早的交通信号灯。1868年12月10日,信号灯家族的第一个成员就在英国伦敦议会大厦的广场上诞生了,由当时英国机械师师德.哈特设计,制造的灯柱高7米,身上挂着一盏红绿两色的提灯煤气交通信号灯,这是城市街道的第一盏信号灯,也是世界上最早的煤气红绿灯。它由红绿旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。直到1914

2、年,在美国的克利夫兰市才率先恢复了红绿灯,不过这时已是“电气信号灯”。稍后又在纽约和芝加哥等城市,相继重新出现了交通信号灯,这种红绿灯由红绿黄三色圆形的投光器组成,始安装于纽约市5号大街的一座高塔上。红灯亮,表示“停止”,绿灯亮,表示“通行”。1918年,又出现了带控制的红绿灯和红外线红绿灯。带控制的红绿灯,一种是把压力探测器安在地下,车辆接近后红灯便变为绿灯;另一种是用扩音器来启动红绿灯,司机遇红灯时按一下喇叭,就使红灯变为绿灯。红外线红绿灯当行人踏上对压力敏感的路面时,它就能察觉到有人要过马路。红外光束能把信号灯的红灯延长一段时间,推迟汽车放行,以免发生交通事故。黄色信号灯的发明者是我国的

3、胡汝鼎,他怀着“科学救国”的抱负到美国深造,在大发明家爱迪生为董事长的美国通用电气公司任职员。一天,他站在繁华的十字路口等待绿灯信号,当他看到红灯正要过去时,一辆转弯的汽车呼地一声擦身而过,吓了他一声冷汗。回到宿舍,他反复琢磨,终于想到了在红绿灯中间再加上一个黄色信号灯,提醒人们注意危险。他的建议立即得到有关方面的肯定。于是红黄绿三色信号灯即以一个完整的指挥信号家族,遍及全世界陆、海、空交通领域了。中国最早的马路红绿灯,是于1928年出现在上海英租界。从最早的手牵皮带到20世纪50年代的电气控制,从采用计算控制到现代化的电子定时监控,交通信号灯在科学化,自动化上不断地更新,发展和完善。对于现代

4、社会来说,随着社会的不断发展,人口数量不断增加,随之而来的便是汽车数量的增加。因此若要保证交通安全,交通规则必不可少,交通的重要性也与日俱增。因此研究一个智能化、人性化的交通灯是不可或缺的。1 系统的总体设计描述本设计是一种基于模糊控制理论的微机控制交通路口调度系统。根据十字路口红绿灯交替变换的特点,本系统的硬件电路要分为三大部分;凌阳单片机最小系统的外围电路、车流量检测电路以及时间和红绿灯的显示电路。为了达到对红绿灯的时间的控制,需要对道路上的车流量进行检测。当前比较流行的车流量检测器件就是一种自感式的车辆传感器。它的工作原理是当车辆经过传感器时,引起其自感的变化。考虑到毕业设计的资金和金钱

5、问题,本系统采用一种手动的操作方式,即车流量的检测电路用拨断开关代替。 一般情况下,设在十字路口或多干道上的岔路口上的红绿灯是为了调整路口的交通秩序。其基本作用是:红灯亮表示车辆、行人禁止通行,绿灯亮表示车辆、行人可以通过。绿灯转换成红灯前几秒,可用黄灯来暗示行人或驾驶员即将禁止通行。该系统的时间显示倒计时的方式,另外还加上了人行横道的通行灯显示如图1-1所示。东西灯: 绿 黄 红 绿 黄 红南北灯: 红 绿 黄 红 绿 黄东西行人: 红 绿 红 绿南北行人: 绿 红 绿 红图1-1 灯的状态变化此外,十字路口东西、南北任意通道上加上光敏二极管检测是否有车辆闯红灯。当有车闯红灯时,光敏二极管将

6、被遮住。将这一信号传到单片机。根据以上介绍,得系统硬件框图如图1-2所示图1-2 系统的硬件框图2 十字路口模糊控制器的设计2.1 模糊控制系统的结构模糊控制能避开对象的数学模型。可以说模糊控制器是一种语言变量的控制器。模糊控制系统的示意图如图2-1所示,图中,虚线框中为模糊控制器。其中,x为系统设定值,y为系统输出值,他们都是清晰量。和也是清晰量,E和U是模糊量。模糊控制器的输入是系统的偏差量e,在计算机控制系统中它具有确定值数字量。经过模糊化处理,用模糊语言E来描述偏差,若以T(E)记做E的语言集合,则有T(E)=(NB,NM,NS,ZE,PS,PM,PB)上式表示将E分为7段,其中: N

7、B 负大(negative big)NM负中(negative middle)NS 负小(negative small)ZE 零(zero)PS 正小(positive small)PM正中(positive middle)PB 正大(positive big)图2-1 模糊控制系统结构(1)模糊化模糊化是将模糊控制器输入量的确定值转换为相应模糊语言变量值的过程,此相应的语言变量值均由对应的隶属度来定义。(2)模糊推理 模糊推理包括三部分:大前提、小前提和结论。大前提是多个多维模糊条件语句,构成规则库;小前提是一个模糊判断句,又称事实。以已知的规则库和输入变量为依据,基于模糊变换推出新的模糊命

8、题作为结论的过程叫做模糊推理。(3)清晰化清晰化是将模糊推理后得到的模糊集转换为用作控制的数字值的过程。2.2 模糊控制器的特点与传统的控制相比,模糊控制有以下特点:(1) 适用于不易获得精确数学模型的被控对象,其结构参数不很清楚或难以求得,只要求掌握操作人员和领域专家的经验或知识。(2) 模糊控制是一种语言变量控制器,其控制规则只用语言变量形式定性的表达,构成了被控对象的模糊模型。在经典控制中,系统模型是用传递函数来描述的;在现代控制领域中,则用状态方程来描述。(3)系统的鲁棒性强,尤其适用于非线性、事变、滞后系统的控制。2.3 路口管理系统模糊控制器的设计一般情况下,红绿灯设在十字路口或在

9、多干道的岔口上,目的是为了调整岔口的交通秩序,而且,目前国内使用的红绿灯都是固定的红绿时间,并自动切换。红灯时间和绿灯时间是根据道口东西向与南北向的车流量,利用统计方法确定的。但是,实际上不同时刻的车辆流通状况是十分复杂的,是高度线性的,随机的,还经常受人为因素的影响。采用定时控制经常造成道路有效应用时间的浪费,出现绿灯方向车辆较少,红灯方向车辆会积压在人工控制时交警会不断地观察十字道口的车辆密度和流速,并由此决定是否切换红绿灯,以保证最佳的道路交通控制状态。用常规闭环控制技术,在红绿灯管理中达到人工控制的最佳状态是十分困难的,这是由于十字路口交通动态模型是很难用数学方式表达的,交警的判断决策

10、过程也很难用简单的程序实现,所以我们决定采用模糊控制来解决自动红绿灯的最佳控制问题。2.3.1 工作原理根据前面对模糊控制器的介绍,实现红绿灯模糊控制必须解决如下几个问题:对当前十字路口的交通状况监测。输入量的模糊化:确定每一个输入量的论域,模糊子集和从属度函数。输出量及其模糊化:输出量的论域,模糊子集和从属度函数。设计将输入映照到输出的模糊规则。决定被激活的模糊规则的组合方式和清晰化处理,生成精确的输出控制信号。2.3.2 输出及其模糊分类(1) 系统采集两个输入量绿灯方向车流量单位时间通过道口的车辆数量。红灯方向排队等候车辆数。为了采集上述数据,在十字路口的四测一共设置8个传感器。传感器的

11、设置如下图所示 北 图2-2 传感器设置Figure 2-2 Sensor set红灯期间排队等候的车辆数量有两部分构成,其一为上次绿灯期间遗留下来的车辆。反端传感器与道口距离为250=100,假设车辆平均长度为,则可能滞留的车辆最大数量为,如20辆,因此变量“红灯方向排队等候车辆数”的论域为(020),将它分为三个模糊子集:少,中,多,其从属度函数设计如图2-3所示从属度10241086X少中多从属度1048201612X少中多绿灯期间通过道口车辆数X红灯期间通过道口车辆数Y图2-3 红绿灯期间车辆数的隶属度函数Figure 2-3 the number of traffic light v

12、ehicles during the membership function(2)输出及其模糊分类。南北向绿灯时间延时。东西向绿灯时间延时。现有红绿交通灯自动系统设定绿灯时间为常值,通常每一方向绿灯30s。现将每一方向绿灯时间分为两个部分,其一为固定的30s。作为道口状态参数采集时间,其二为根据当前状态,由模糊逻辑决策的延时,最大延时时间是随时道口交通情况而变化的,假设为20s。结果每一方向绿灯时间间隔为3050s。由此,绿灯时间延时、的论域定义为(020),将其分为3个模糊子集:长、中、短。输入量和输出量的论域、模糊子集、从属度函数的设计关系、整个系统的控制效果与性能,需要根据对整个控制系统

13、的要求,采用试探修正法设计,与设计者的经验有密切的关系。(3)模糊规则的确定。 此系统有两个输入和一个输出。在没有任何数据资料的情况下,我们只能根据经验设计其模糊规则。其结构如表2-1所示。表2-1 模糊规则结构表多中少多短短短中短中长少中长长根据以上模糊规则图,可以得到如下的9条模糊规则: if X=多 and Y=多 than T=T短。 if X=多 and Y=中 than T=T短。 if X=中 and Y=多 than T=T短。 if X=少 and Y=少 than T=T长。下面将输出清晰化,规定T短=30s、T中=40s、T长=50s。然后再把它转化为C语言或汇编语言在凌

14、阳单片机上实现。3 硬件电路的设计3.1 的最小系统外围电路3.1.1 系统的时钟电路的系统时钟信号和CPU的工作时间信号CPUCLK均来自其时钟系统。其时钟系统基本上有三部分组成;锁相环PLL倍频电路、可编程分频计数器以及时基信号发生器。通过PLL对实时时钟32768Hz进行倍频处理,产生出Fosc信号,作为系统的时钟源。内核的外围中自由32768Hz的时钟电路。其接法如图3-1图3-1 系统的外围时钟电路Figure 3-1 External system clock circuit3.1.2语音输出电路凌阳单片机的语音数据经过解码后直接送到DAC口输出。也就是说,它输出的仅仅是高低正电压

15、,只能使扬声器的振片在一个方向振动。要想具有较好的乐质。还需要对输出的电压进行转化,也就是将正电压变成正负均分的电压。另外,系统的输出口有可能存在高频干扰信号,所以在电路中加入了RC并联高频滤波电路。并用三极管来放大DAC的输出,语音输出电路如图3-2图3-2 语音输出电路Figure 3-2 Voice output circuit3.2 显示电路3.2.1时间显示电路的设计8段LED(E10501 JP)是一种常用的数码显示屏。这种数码管的每个线段都是一个发光二极管,因而把它叫LED数码管。如果将其接入+5V的电源则需要接下拉电阻。但在此系统中,LED显示直接接在凌阳单片机的输出口。这种微

16、机输出口的最大驱动力不会超过14mA,所以本系统直接将LED接在凌阳单片机的输出口。LED 8段显示器的设置为每个方位上一对两位的显示器。四个方位上总共有8个LED接在单片机Port A上。显示时我们不需要小数点,所以每个LED的10根管脚,我们只用了8根。另外,十字路口只有两条通道:东西,南北,所以只需两根片选信号。Port A有16根输出线,它的功能分配如下:A0A7 LED的地位显示,A8A14 LED高位显示,A15、A16作为两条道路的片选信号线。连接后时间显示电路如图3-3所示。图3-3 时间显示电路Figure 3-3 Time display circuit3.2.2 红绿灯的

17、显示电路根据本系统的特点,红绿灯的显示必不可少。本设计对红绿灯的显示采用的是普通的发光二极管。这种LED也不可以直接接在+5V的电源上,但是如果直接接在单片机的输出口,发光二极管又不够亮。所以在设计电路时将LED显示接了分流电阻。发光二极管的设置:每个方向上设置的红绿黄灯及行人灯各一个,总共四组。如图3-4 所示。图3-4 红绿灯的显示电路Figure 3-4 Display traffic light circuit3.2.3 违规车辆检测电路在红灯绿灯期间,车辆是严禁通行的。为了对那些违规车辆进行检测,建议使用超声波车辆传感器。但是,由于受条件限制本文设计中只是用了普通光敏二极管。其基本设

18、计思想如下:将光敏二极管放在停车线处,当车辆驶过时将把光敏二极管遮住。这样,光敏二极管就不导通,单片机检测到这一信号执行报警操作。但显然,光敏二极管的灵敏度在现场是不够的。此检测电路除了使用光敏二极管,还使用了三极管和电阻。三极管的型号为9013。由于普通光敏二极管的开关特性不太好,所以设计者在电路中加了三极管作为开关。由于普通的光敏二极管在导通的情况下的电阻都能达到0.51,所以设计者将光敏二极管直接接在了电源上。同时三极管还可起到一定的隔离作用。违规车辆检测电路的设置:每条道路的右行车道安装一组,总共四组。图3-5显示其中一组的接线情况。图3-5 违规车辆检测电路Figure 3-5 Il

19、legal vehicle detection circuit3.3 车流量检测电路3.3.1 光电耦合器(1) 光电耦合器接口电路图3-6显示了一个典型的光电耦合器驱动电路。在该例中,右边的5V副边输出将会被左边原边电路的脉宽调制器控制。比较器A1将ZD1(结点A)的参考电压和通过分压电路R7和R8的输出电压进行比较,因而控制Q2的导通状态,可以定义发光二极管D1的电流和通过光耦合在光敏晶体管Q1的集电极电流。然后Q1定义脉冲宽度和输出电压,补偿任何使输出电压改变的倾向。随着光电耦合器的使用时间增加和传输比即增益的下降,为了防止控制失灵,给Q2提供充足的驱动电流裕量是很有必要的。 光电耦合器

20、是以光为媒介传输电信号的一种电-光-电转换器件。它由发光源和受光器两部分组成。把发光源和受光器组装在同一密闭的壳体内,彼此间用透明绝缘体隔离。发光源的引脚为输入端,受光器的引脚为输出端,常见的发光源为发光二极管,受光器为光敏二极管、光敏三极管等等。光电耦合器的种类较多,常见有光电二极管型、光电三极管型、光敏电阻型、光控晶闸管型、光电达林顿型、集成电路型等。如下图(外形有金属圆壳封装,塑封双列直插等)。图3-6(2) 工作原理在光电耦合器输入端加电信号使发光源发光,光的强度取决于激励电流的大小,此光照射到封装在一起的受光器上后,因光电效应而产生了光电流,由受光器输出端引出,这样就实现了电-光-电

21、的转换。 基本工作特性(以光敏三极管为例) 1、共模抑制比很高 在光电耦合器内部,由于发光管和受光器之间的耦合电容很小(2pF以内)所以共模输入电压通过极间耦合电容对输出电流的影响很小,因而共模抑制比很高。 2、输出特性 光电耦合器的输出特性是指在一定的发光电流IF下,光敏管所加偏置电压VCE与输出电流IC之间的关系,当IF=0时,发光二极管不发光,此时的光敏晶体管集电极输出电流称为暗电流,一般很小。当IF0时,在一定的IF作用下,所对应的IC基本上与VCE无关。IC与IF之间的变化成线性关系,用半导体管特性图示仪测出的光电耦合器的输出特性与普通晶体三极管输出特性相似。3、光电耦合器可作为线性

22、耦合器使用。 在发光二极管上提供一个偏置电流,再把信号电压通过电阻耦合到发光二极管上,这样光电晶体管接收到的是在偏置电流上增、减变化的光信号,其输出电流将随输入的信号电压作线性变化。光电耦合器也可工作于开关状态,传输脉冲信号。在传输脉冲信号时,输入信号和输出信号之间存在一定的延迟时间,不同结构的光电耦合器输入、输出延迟时间相差很大。(3) 仪器测试光电耦合器的测试 1) 用万用表判断好坏,断开输入端电源,用R1k档测1、2脚电阻,正向电阻为几百欧,反向电阻几十千欧,3、4脚间电阻应为无限大。1、2脚与3、4脚间任意一组,阻值为无限大,输入端接通电源后,3、4脚的电阻很小。调节RP,3、4间脚电

23、阻发生变化,说明该器件是好的。注:不能用R10k档,否则导致发射管击穿。2) 简易测试电路,当接通电源后,LED不发光,按下SB,LED会发光,调节RP、LED的发光强度会发生变化,说明被测光电耦合器是好的。(4) 光电耦合器具体应用1) 组成开关电路 图3-6电路中,当输入信号为低电平时,晶体管V1处于截止状态,光电耦合器B1中发光二极管的电流近似为零,输出端Q11、Q12间的电阻很大,相当于“开关”断开当为高电平时,V1导通,B1中发光二极管发光,Q11、Q12间的电阻变小,相当于开关“接通”该电路因为低电平时,开关不通,故为高电平导通状态。电路中,因无信号(为低电平)时,开关导通,故为低

24、电平导通状态。2) 组成逻辑电路 “与”门逻辑电路。其逻辑表达式为P=A.B。两只光敏管串联,只有当输入逻辑电平A=1、B=1时,输出P=1。同理,还可以组成“或门”“与非门”“或非门”等逻辑电路。3) 组成隔离耦合电路 这是一个典型的交流耦合放大电路适当选取发光回路限流电阻Rl,使B4的电流传输比为一常数,即可保证该电路的线性放大作用。 4) 组成高压稳压电路 驱动管需采用耐压较高的晶体管(图中驱动管为3DG27)。当输出电压增大时,V55的偏压增加,B5中发光二极管的正向电流增大,使光敏管极间电压减小,调整管be结偏压降低而内阻增大,使输出电压降低,而保持输出电压的稳定。 (5)光电耦合器

25、的分类由于光电耦合器的品种和类型非常多,在光电子DATA手册中,其型号超过上千种,通常可以按以下方法进行分类:1) 按光路径分,可分为外光路光电耦合器(又称光电断续检测器)和内光路光电耦合器。外光路光电耦合器又分为透过型和反射型光电耦合器。2) 按输出形式分,可分为:a、光敏器件输出型,其中包括光敏二极管输出型,光敏三极管输出型,光电池输出型,光可控硅输出型等。b、NPN三极管输出型,其中包括交流输入型,直流输入型,互补输出型等。c、达林顿三极管输出型,其中包括交流输入型,直流输入型。d、逻辑门电路输出型,其中包括门电路输出型,施密特触发输出型,三态门电路输出型等。e、低导通输出型(输出低电平

26、毫伏数量级)。f、光开关输出型(导通电阻小余10)。g、功率输出型(IGBT/MOSFET等输出)。3) 按封装形式分,可分为同轴型,双列直插型,TO封装型,扁平封装型,贴片封装型,以及光纤传输型等。4) 按传输信号分,可分为数字型光电耦合器(OC门输出型,图腾柱输出型及三态门电路输出型等)和线性光电耦合器(可分为低漂移型,高线性型,宽带型,单电源型,双电源型等)。5) 按速度分,可分为低速光电耦合器(光敏三极管、光电池等输出型)和高速光电耦合器(光敏二极管带信号处理电路或者光敏集成电路输出型)。6) 按通道分,可分为单通道,双通道和多通道光电耦合器。7) 按隔离特性分,可分为普通隔离光电耦合

27、器(一般光学胶灌封低于5000V,空封低于2000V)和高压隔离光电耦合器(可分为10kV,20kV,30kV等)。8) 按工作电压分,可分为低电源电压型光电耦合器(一般515V)和高电源电压型光电耦合器(一般大于30V)。3.3.2 车流量检测电路车流量的检测电路需要车流量检测器。目前,市面上流行的一种车流量传感器是一种互感式的。这种传感器实质上是一种振荡器,其谐振电感埋藏在道路中部,当车辆通过时,电感量变化引起振荡频率变化,由此记录一次。由于条件限制,本毕业设计中将电路简化成手动方式,只用了拨断开关来代替。其基本思想为:当车流量大时,由拨断开关送出一个高电平。另外,在单片机和拨断开关之间加

28、了光电隔离。下面将光电隔离器件作一介绍。在模拟车流量的电路中,我们加上拨断开关的有效电平或是低电平。所以我们将LED的负极接在拨断开关S1上,一旦有低电平指示灯就会被点亮,即指示灯亮了就表示选中了这一种流量状态。为了避免干扰信号进入单片机,我们也在电路中加入了光电耦合器。根据以上对基本的原件介绍,得到模拟车流量检测电路如图3-7所示图3-7 模拟流量检测电路Figure 3-7 Simulation of flow detection circuit4 SPCE061A简介4.1总述SPCE061A 是继系列产品SPCE500A等之后凌阳科技推出的又一款16位结构的微控制器。与SPCE500A

29、不同的是,在存储器资源方面考虑到用户的较少资源的需求以及便于程序调试等功能,SPCE061A里只内嵌32K字的闪存(FLASH)。较高的处理速度使能够非常容易地、快速地处理复杂的数字信号。因此,与SPCE500A相比,以为核心的SPCE061A微控制器是适用于数字语音识别应用领域产品的一种经济的选择。图4-1 SPCE061A的结构Figure 4-1 Structure SPCE061A4.2 指令系统的概述指令是CPU执行某种操作的命令。微处理器(MPU)或微控制器(MCU)所能识别全部指令的集合称为指令系统或指令集。指令系统是制造厂家在设计CPU时所赋予它的功能,用户必须正确的书写和使用

30、指令。因此学习和掌握指令的功能与应用非常重要,是程序设计的基础。本章将详细的介绍SPCE061A指令系统的寻址方式和各种指令。单片机指令按其功能可划分为:1)数据传送指令,包括立即数到寄存器、寄存器到寄存器、寄存器到存储器到寄存器的数据传送操作;2)算术运算,包括加、减、乘运算;3)逻辑运算,包括与、或、异或、测试、移位等操作;4)转移指令,包括条件转移、无条件转移、中断返回、子程序调用等操作;5)控制指令,如开中断、关中断、FIR滤波器的数据的自由移动等操作。4.3 中断的概述中断是为处理器对外界异步事件具有处理能力而设置的,中断技术的引入把计算机的发展和应用大大地推进一步。因此中断功能的强

31、弱已成为衡量一台计算机性能的重要指标。SPCE061A单片机的中断服务流程图4-2所示图4-2 中断服务流程图Figure4-2 Flow chart of a break in service5 系统主程序和模糊控制程序设计系统软件设计主要思路为根据车流量变化的动态变化,运用模糊控制算法实现红绿灯时间自动调整,同时也有语音的配合。全部软件设计包括主程序和三个子程序:模糊控制子程序、时间循环显示子程序、语音提示子程序。在进入程序之前需要了解一下凌阳单片机C语言与汇编语言之间的调用以及参数传递问题,现简单介绍一下。5.1 C语言与汇编语言之间的调用根据北阳公司根据提供的材料,凌阳单片机的C语言和

32、汇编语言之间可以实现相互调用。因为汇编语言可以对硬件电路直接进行操作以及用C语言来编写语言程序非常方便、所以本论文在设计只用了C语言来调用汇编。程序调用协议:由于C编译器产生的所有标号都以下划线(_)为前缀,而C程序在调用汇编程序时要求汇编程序名也以下划线(_)为前缀。模块代码间的调用,是遵循体系的调用协议(calling convention)。所谓调用协议,是指用于标准子程序之间一个模块与另一个模块的通信约定。即使两个模块是以不同的语言编程编写而成,亦是如此。体系的调用协议的内容如下:1) 参数传递参数以相反的顺序(从右到左)被压入栈中。必要时所有的参数都被转换成其在函数原型中被声明过的数

33、据类型。但如果函数的调用发生在其声明之前,则传递在调用函数里的参数是不会被进行任何数据转换的。2) 堆栈维护及排列函数调用者应切记在程序返回时将调用的程序压入栈中的参数弹出。各参数和局部变量在堆栈中的排列。3) 返回值16位的返回值存放在寄存器R1中。32位的返回值存入寄存器R1,R2中,其中低字在R1中,高字在R2中。若要返回结构则需在R1中存放一个指向结构的指针。4)寄存器数据暂存方式编译器会产生prolog/epilog过程动作来暂存或恢复PC、SR及BP寄存器。汇编器则通过“CALL”指令将PC和SR自动压入栈中,而通过“RETF”或“RETI”指令将其自动弹出栈来。5.2 主程序系统

34、的运行总框图如图5-1所示语音子程序是融入到显示程序当中去的。故我们在框图中将两个子程序并列放置。因此,也可以说主程序是由两部分组成。初始化的内容包括定义局部变量和全局变量。在IDE开发时,该项目所包括的程序文件有如图 所示的八项。其中,A2000.rc是语音数据源文件,hardware.asm是主程序所谓用的汇编子程序服务文件。设计中的A2000.c主程序文件包括一个主程序和两个语音播放子程序。主程序中包括了一个模糊控制程序模块和四个时间、灯的显示程序模块。Serve.asm汇编子程序服务文件中有12个汇编子程序。下面分别予以介绍。图5-1 主程序框图Figure 5-1 The main

35、program block diagram5.2.1 模糊控制器程序根据前面对此管理系统的模糊控制器设计得出的模糊规则,可以得到程序框图如图下所示,图中的9种状态对应表 模糊推理的结果,根据十字路口车辆多少对应的各个方向绿灯亮的时间分别为T短=30s、T中=40s、T长=50s。图5-2 模糊控制器程序块框图Figure 5-2并且转化为凌阳单片机的C语言如下所示int *a,t,b,u;main( ) int c,l,i,key,j;loop: l=B_state( ); switch (l) case 001b0:key=time_short();break; case 001d0:key

36、=time_short();break case 002b0:key=time_short();break case 001e0:key=time_medium();breakcase 002d0:key=time_medium();breakcase 00330:key=time_medium();breakcase 00350:key=time_long();breakcase 00360:key=time_long();breakcase 002e0:key=time_long();breakdefault:goto loop; 对于所谓用的time_short、time_medium、

37、time_long三个汇编子程序如图 所示。其主要思路是将起计数作用的寄存器r4赋以不同的值(分别是10、20、30)。同时,同时将这个初始值赋给r1寄存器。于是,每一个时间选择子程序的返回值就是r1中的值,即是10、20或30。在取指针值得过程中最重要的环节是压栈堆栈操作;首先将基指针的应用会造成指针混乱,在取指针量操作完成之后,再将基指针弹出堆栈恢复其原来的值。5.2.2 显示程序块的总览根据图 5-2知道,显示程序是四种状态的不断循环。所以我们得到了显示程序块的总体框图,如图5-3所示。它是通过U值得不同来切换道口的红绿灯。同时,每一次红灯变换时会对车流量进行一次检测,已达到及时更换时间

38、的效果。图5-3 显示程序块总框图Figure 5-3另外,显示程序的主题是延时。一般地,设计中的延时采用中断或定时器。但本设计没有采用中断。因此我们需要在延时的同时开外部中断(检测违规车辆)。也就是说需要在执行延时中断服务子程序的同时可以响应外部中断并且执行外部中断服务程序,但凌阳单片机不能实现这一点。所以,本设计将开外部中断的程序块作为延时基准。将这个程序不断地循环FFFF4次,系统的默认CPU是24MHz,这个程序块的指令周期是可以算出这个时间大约是一秒钟。也就是说,在这一秒的时间里,我们已经开关外部中断FFFF4次,足以将违规车辆检测到了。四块显示程序大体是一样的,只是在送红绿灯的状态

39、和外部中断源上不一样。当U=0时,所开为外部中断源1,即PortB2;当U=1时,所开为外部中断源2,即PortB3。红绿灯的程序块也有所不一样。根据前文的介绍,PortB0/B1分别为东南、西北人行横道的指示灯,Port 10Port 12分别是东西道路上的黄、绿、红灯,Port 13Port 15为南北道路上的黄、绿、红灯。而且,所有的显示灯都是低电平点亮。.public _time;_time: .proc Push bp,bp to sp; r2=0003c; r2=r2-r1; bp=r2+address;r1=bp;pop bp,bp from sp;retf;.endp(a) t

40、ime()子程序.public _show;_show: .proc r1=0ffff; P_IOA_Dir=r1; p_IOA_Attr=r1; Push bp,bp to sp;bp=sp+1;r3=bp+3;P_IOA_Data=r3;pop bp,bp from sp;retf;.endp;(b) show()子程序.public _EXT1_INT_ON;_EXT1_INT_ON; IRQ OFF; r1=00100; P_INT_Ctrl=r1; Test r1,P_INT_Ctrl; Jz backf; r1=00001; retf;backf: r1=00000; retf;(

41、c) 开关外部中断1的子程序5.3显示程序块以上介绍了主程序以及显示程序的总体框图。对于每一个显示子程序模块,还需进一步说明。首先我们在serve.asm文件中定义了60个双字的数,这些数字是我们根据8段LED的显示特点,编写的从60到00的显示数字。在其后的程序中将bp值指向了这一组数据。红灯-绿灯的显示程序块框图如图5-4所示对应程序如下: i=60-key; for(;i5;i-) a=time( );t=*a;t+=04000;show(t);a=a+1;red_green( );YY1( );back1: t=*a;t+=04000;show(t);a=a+1;red_green(

42、);for(j=0;j 00004;j+)for(b=0;b04000)c=EXT1_INT_ON( );switch(c)case 00001:YY2( );break;case 00000:break;if(t= =05ffd) break;else goto back1; 图5-4 红灯-绿灯的显示程序块框图Figure 5-4 Red light - green light to the display block diagram下面一段程序调用了serve.asm汇编语言文件的time()、show()、EXI1_INT_ON()子程序。time()子程序的作用是将字型码的地址取出并

43、赋给整形变量a。show()子程序的作用是将前面取来的字型码的送到PortA显示。EXI1_INT_ON()子程序的作用是开中断,执行其程序所用的时间又用作字型显示的延时(循环FFFF4次)。上面对四个显示程序中的一种状态做了较为详细的介绍。接着红灯绿灯状态的显示。它与前者不同之处在于:没有第一个语音子程序;显示时间只有5秒。这种状态的所有程序下所示。for(:i0;i-)back2:t=*a; t+=04000; show(t); a=a+1; red_yellow(); for(j=0;j00004;j+) for(b=0;b0ffff;b+)c=EXT1_INT_ON();switch

44、(c)case 00001:YY2();break;case 00000:break;if(t=05f86) break;else goto back2;从以上程序可以看出,程序最后由语句“goto loop”跳转到了最初的模糊控制的子程序模块。根据路口流量进行时间选择后,紧接着是另一条道路上的红灯开始亮。模糊控制器的子程序在前面已经介绍过了。下面将对绿灯红灯状态进行说明。绿灯红灯状态与前面的红灯绿灯状态的不同之处在于所开外部中断源不同。前者所开为外部中断1,后者开的是外部中断2。其全部的程序如以下程序所示:Loop1:i=60-key;for(;i5;i-) a=time(); t=*a; t+=04000; show(t); a=a+1; green_red(); YY1(); back3: t=*a; t+=08000; show(t); a=a+1; green_red(); for(j=0;j00004;j+) for(b=0;b0ffff;b+) c= EXT2_INT_ON( ); switch(c)case 00001;YY2();break;case 00000:break;if(t= =09ffd) break;else goto back3;红灯-黄灯状态与前

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号