交通灯实验报告.docx
- 文档编号:30627010
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:24
- 大小:333.63KB
交通灯实验报告.docx
《交通灯实验报告.docx》由会员分享,可在线阅读,更多相关《交通灯实验报告.docx(24页珍藏版)》请在冰豆网上搜索。
交通灯实验报告
信息系统工程硬件基础综合实验报告
智能电子钟设计
2010年8月1日
第一章信息系统工程硬件基础综合实验的目的意义
1.1实验目的
实验教学时课堂教学的补充、延伸和深化,是课堂教学的重要组成部分。
实验教学总的目的是通过与课堂教学的密切配合,巩固和扩充课堂讲授的理论知识,加深对课堂教学内容的理解,训练科学实验的基本技能和工程实践的基本方法,养成严谨的科学态度和工作作风,培养应用所学理论知识独立分析、解决实际问题的能力和实际动手能力。
1.2课程在教学计划中的地位和作用
《信息系统基础综合实验》课程是自动化专业本科生必修的一门技术基础课程。
通过该课程的学习使学生对微机系统有一个全面的了解、掌握常规芯片的使用方法、掌握简单微型计算机应用系统软硬的设计方法。
为了使我们微机应用课程设计目标更明确,要求更具体,学生收获更大,我们特编写课程设计任务书,学生可根据本人的爱好任选其中一个课题,要求独立完成课题,写出课程设计说明书,设计出电路原理图,说明工作原理,画出电路板图,编写程序及程序流程图。
希望同学认真阅读本任务书,认真查阅资料与上机调试,圆满完成课程设计。
通过课程设计进一步锻炼同学们在微型计算机应用方面的实际工作能力。
计算机科学在应用上得到飞速发展,因此,学习这方面的知识必须紧密联系实际:
掌握这方面的知识更要强调解决实际问题的能力。
同学们要着重学会面对一个实际问题,如何去自己收集资料,如何自己去学习新的知识,如何自己去制定解决问题的方案并通过实践不断地去分析和解决前进道路上的一切问题,最终到达胜利的彼岸。
第二章交通信号灯实时控制系统软硬件设计任务
2.1设计内容及要求
现代城市交通日益拥挤,为保证交通安全,防止交通堵塞,是城市交通井然有序,交通信号灯在城市交通管理中的作用越来越重要。
通过本实验,旨在使学生:
1.掌握交通信号灯实时控制系统的实际思路与实现方法。
2.掌握定时/计数器和并行接口在实施控制系统中的应用。
3.加深对定时计数器和并行接口芯片的工作方式和编程方法的了解。
4.加深对中断机理及其应用方法的了解。
2.2课程设计的任务
本实验设计一个交通信号灯实时控制系统,要求它有以下功能:
1.在一个狮子路口的一条主干道和一条支干道上分别装上一套红绿黄3种信号灯;用钮子开关模拟十字路口的车辆检测传感器信号。
2.在一般情况下,主干道的绿灯常亮,而支干道总是红灯。
3.当检测到支干道上来车时(用按键开关模拟),主干道的绿灯转为黄灯,持续4秒后,又变成红灯,同时支干道由红灯变为绿灯。
4.支干道绿灯亮后,或者检测到主干道上来了3辆车(用3个钮子开关模拟),或者虽未来3辆车,但绿灯已经持续了25秒,则支干道立即变为黄灯,4秒后转为红灯,同时主干道由红灯变为绿灯。
第三章总体设计方案
3.1设计思想
由于实验要求用c程序进行编写,在确定可使用的芯片并进行系统分析可知,还能够进行许多功能扩展。
因此,在进行需求分析的基础上,先进行总体功能设计和设计方案设计,主要对各个功能模块接口和功能进行分析和设计,这样程序的可阅读性和可调试就比较好,易于程序功能扩展和调试。
设计中,将功能写成过程函数的形式,便于调用和调试;对于各个端口的使用,通过符号进行定义,这样程序的通用性和移植性也比较好。
3.1.1智能交通信号灯设计的需求分析
l.能够优先向主干道提供绿灯通行状态;
2.能够通过按键改变支干道的状态从实现支干道的通车;
3.当主干道有3辆及以上车等待通行是,能够中断支干道的通行状态,实现主干道的优先通行。
3.1.2实验设备
1.80X86系列微机一台
2.DVCC型微机硬件实验平台
3.定时/计数器(8253)、并行接口(8255)
4.按键开关一个,钮子开关3个及三色发光灯
3.1.3方案设计
1计时功能设计
本设计通过对8253的设置,使之产生一个间或一秒的低电平脉冲,实现计时功能。
2.亮灯显示功能设计
通过对8255A口,B口,C口的输入输出控制,实现对路口车辆情况和主、支干道交通状态的模拟和控制。
3.退出功能设计
当按下任意键后程序退出。
3.2总体设计
3.2.1总体硬件结构设计
通过分析,本系统的总体硬件结构设计示意如图3.1所示。
图3.1交通灯实验的总体设计硬件结构图
3.2.2总体软件流程设计
本系统采用“自上而下总体规划、自下而上应用开发”的策略进行总体设计和开发。
先根据其功能需要,设定需要的功能模块,确定需要编写的子程序,从而使程序结构清晰,便于阅读和调试,加快了系统完成的速度。
结构化的程序设计方法很适合用来开发简单程序,因为结构简单,条理清晰,易于实现,不必要进行对象分析;使用瀑布程序开发模型,从开始的时候把系统的需求分析透彻,对系统的功能和各个模块进行清晰的规划,从而缩短系统开发所用的时间。
第四章硬件设计
4.1硬件设计概要
本系统所使用到的硬件包括8253A芯片、8259A芯片、8255A芯片、三色发光二极管。
在电路连接的时候,将8255A芯片的PA0-PA4分别连接至主、支干道路口的直行灯,PC5-PC7连接至主干道路口来车情况的模拟开关,PC4连接系统中断口IRQ7。
通过改变8255A的PA口和PC口的值来实时地控制每个三色发光二极管的亮灭,从而改变十字路口的交通状态。
将8255A的CS插孔CS-8255接译码输出联结至地址译码器。
将8253A的CLK0插孔连接至10KHZ的方波信号。
8253A从分频插孔得到10KHZ的固定频率,再根据芯片内部设定的计数初值,从而产生间隔一秒的时钟脉冲,由OUT0口输出,供其它芯片使用。
将8253A的OUT1插孔连接至8259A的IRQ3插孔上。
8259A的IRQ3中断口每隔固定的时间便会收到8253A发送过来的时钟脉冲,作为中断源来执行中断服务程序。
在中断服务程序中,完成更新数码管显示值和改变交通灯状态的功能。
硬件的连接见图2-1和图2-2。
图2-1系统电路图——8253A和8259A的连接图
图2-2系统电路图——8255A和LED灯的连接图
4.2所用到的芯片及其各自功能说明(随便补充)
4.2.1芯片列表
8259A中断控制芯片、8253A定时\计数器芯片、8255A并行接口芯片
4.2.28259A的功能简介
8259A是专为控制优先级中断而设计的芯片。
它将中断源按优先级排队、辨认中断源和提供中断向量的电路集成于一体,只要用软件对它进行编程,就可以管理8级中断。
8259A的内部结构见图1-3。
它由中断请求寄存器(IRR)、优先级分析器、中断服务寄存器(ISR)、中断屏蔽寄存器(IMR)、数据总线缓冲器、读写控制电路、级联缓冲器和比较器组成。
图1-38259A的内部结构
对8259A编程和初始化的时候,首先要写初始化命令字ICW1-ICW4。
写ICW1以确定中断请求信号类型,清除中断屏蔽寄存器,进行中断优先级排队和确定系统是用单片还是多片。
写ICW2用来定义中断向量的高五位类型码。
ICW3可以定义主片8259A中断请求线上IR0-IR7有无级联的8259A从片。
写ICW4用来定义8259A工作时用8085模式还是8088模式,以及中断服务寄存器复位方式等。
初始化命令字写完以后,要写8259A的控制命令字,它包括OCW1-OCW3。
写OCW1可以设置或清除对中断源的屏蔽。
写OCW2设置优先级是否进行循环、循环的方式和中断结束的方式。
8259A复位时自动设置IR0优先权最高,IR7优先权最低。
写OCW3用来设置查询方式和特殊屏蔽方式,并可以读取8259A中断寄存器的当前状态。
4.2.38255A的功能简介
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的内部逻辑结构见图1-4。
图1-48255A的内部结构
8255A有三种工作方式:
方式0、方式1和方式2。
它通过对控制寄存器写入不同的方式选择控制字来决定其三种不同的工作方式。
方式0是基本输入输出方式。
该方式下的A口8位和B口8位可以由输入的控制字决定为输入或输出,C口分成高4位(PC4-PC7)和低4位(PC0-PC3)两组,也有控制字决定其输入或输出。
需要注意的是,该方式下,只能将C口其中一组的四位全部置为输入或输出。
方式1选通输入输出方式,又叫单向输入输出方式。
它分为A、B两组,A组由数据口A和控制口C的高4位组成,B组由数据口B和控制口C的低4位组成。
数据口的输入输出都是锁存的,与方式0不同,由控制字来决定它是作为输入还是输出。
C口的相应位用于寄存数据传送中所需的状态信号和控制信息。
方式2为双向输入输出方式。
本方式只有A组可以使用。
此时A口为输入输出双向口,C口中的5位(PC3-PC7)作为A口的控制位。
4.2.48253A的功能简介
8253A定时/计数器具有定时、计数双功能。
它具有三个相同且相互独立的16位减法计数器,分别称为计数器0、计数器1和计数器2。
每个计数器计数频率为0-2MHZ。
其内部数据总线缓冲器为双向三态,故可直接连在系统数据总线上,通过CPU写入计数初值,也可由CPU读出计数当前值。
读写控制逻辑,当选中该芯片时,根据读写命令和送来的地址信息控制整个芯片工作。
其工作方式通过控制字确定。
控制字寄存器用于接收数据总线缓冲器的信息。
当写入控制字时,控制计数器的工作方式;当写入数据时则装入计数初值。
控制寄存器为8位,只能写入不能读出。
8253A内部结构见图1-2。
当8253A执行计数功能时,计数器装入初值后,当GATE为高电平时,可用外部事件作为CLK脉冲对计数值进行减1计数。
每来一个脉冲减1,当计数值减为0时,由OUT端输出一个标志信号。
当8253A执行定时功能时,计数器装入初值后,当GATE为高电平时,由CLK脉冲触发开始自动计数。
当计数到零时,发计数结束定时信号。
8253A可以工作在方式0到方式5,常用的有方式2频率发生器方式和方式3方波发生器方式。
在方式2时,当初值装入后,OUT变为高;计数结束,OUT变为低。
该方式下如果计数未结束,但GATE为低时,立即停止计数,将OUT变为高;当GATE再变高时,便启动一次新的计数周期。
在方式3时,当装入初值后,在GATE上升沿启动计数,OUT输出高电平;当计数完成一半时,OUT输出低电平。
4.3硬件电路设计系统原理图及其说明
图4-3
说明:
图中蓝线表示在实验平台上已经连好了的线,红线表示需要自己连线的地方。
数据流向:
各个芯片通过D0—D7八条地址线与CPU进行通信,在8255的A口输出红绿灯信号,在C口PC2输入负脉冲信号,在PC4—PC7输入主干道来车情况,其中PC4置一。
各个芯片的片选端接相应的片选信号。
8253的CLK0接10KHZ,CLK1接OUT0,OUT1接IRQ3。
第五章软件设计
5.1流程图及其说明
程序运行的流程图见图2-4。
开始运行的时候,调用初始化程序,对各个芯片进行初始化,给主干道、支干道的交通灯送出初始化值(主红支绿);定义数值对应的指示灯,便于转换程序取到时间数值对应的字符;定义时间缓冲区初值,系统运行后时间将从该处的值开始减小;定义系统初始状态,便于运行后LED灯工作于相应的状态。
接着对8253A、8255A和8259A进行初始化。
定义8253A使用通道0,工作于方式3,其计数初值为16h,每隔20ms向8259A发出一个时钟脉冲,通道1,工作于方式2,其计数初值为54h;8255A的A口工作于方式0输出状态、B口采用方式2输入、C口工作于输入方式;8259A工作于嵌套中断方式。
进入等待程序WATING后,首先打开中断,等待8259A发出的中断请求。
当无中断的时候,判断系统所处的状态,并调用相应的交通灯状态子程序,使LED灯相应的点亮。
当运行软件和硬件的时候,首先,初始化程序会向各个芯片送出初始默认值,以使硬件能够正常工作。
当支干道来车时,会有一个脉冲送到8255的C口,产生一个中断,此时,进入中断处理程序,将主干道变黄,4秒后再将主红支绿的信号送至发光二极管。
在这个过程中,若主干道来车数目少于3,则支干道在25秒后变红退出中断处理程序,否则直接返回主绿支红状态。
5.2软件系统的使用说明
(1)中断服务程序是本系统的程序最核心的子程序。
它用来计算收到8353A发来的中断次数,当次数达到5或25的时候,就自动将次数清零、调用交通灯显示程序、状态更新程序、状态修改程序P1-P4和中断返回程序,完成交通灯态的改变。
下面是其具体分析和详细明:
voidinterruptnewintf1(__CPPARGS)
{
//printf("Clockinterrupt!
");
second++;//秒数加1
outportb(port0_8259,0x20);//发EOI命令
}//时钟中断处理程序
voidinterruptnewintf2(__CPPARGS)
{
printf("Lightinterrupt!
");//提示进入中断
outportb(port1_8259,inportb(port1_8259)&0x7F);//开IRQ3
inportb(port1_8255);//读8255B口
second=0;//时钟清零
outportb(port0_8255,0x0D);//01101主黄支红
do{}
while(second<4);//等待4秒
second=0;//时钟清零
outportb(port0_8255,0x06);//送0110主红支绿到LED
do
{
car=inportb(port2_8255);//读8255C口
car=car&0xF0;//取C口高位
if(second>=25)
break;//等待25秒
}
while(car!
=0xF0);//判断主干道是否来3辆车
second=0;//时钟清零
outportb(port0_8255,0x07);//送0111主红支黄到LED
do{}
while(second!
=4);//持续4秒
outportb(port0_8259,0x20);//发EOI命令
}
由于系统设计中,支干道是来车辆很少线路,故主干道是常绿的状态,因此程序设计中便把支干道状态改变程序嵌入到了中断处理程序中。
(2)初始化程序是本系统的程序正常运行的可靠保证。
通过正确和简明的初始化可以优化系统的性能,同时也决定了各个芯片的功能和工作状态。
下面是其具体实现代码:
//时钟频率10KHZ,设置8253
outportb(port3_8253,0x16);/*8253计数器0工作方式3*/
outportb(port3_8253,0x54);/*8253计数器1工作方式2*/
outportb(port0_8253,0x64);/*通道0计数值1000*/
outportb(port1_8253,0x64);/*通道1计数值1000*/
//设置8255
outportb(port3_8255,0x8F);/*8255工作方式A口方式0输出,B口方式2输入,C口输入*/
outportb(port3_8255,0x05);/*PC2置1*/
//设置中断向量
outportb(port0_8259,0x12);/*设置ICW1*/
outportb(port1_8259,0x08);/*设置ICW2*/
outportb(port1_8259,0);/*设置OCW1*/
outportb(port0_8259,0x20);
针对我们设计的系统的特殊性,我们选择了8259A的特殊全嵌套工作方式,以实现支干道对主干道的中断,同时又不影响主干道的正常通行。
第六章系统调试与使用
6.1系统调试
本实验是由微机原理与接口延伸来的,使用C语言编程实现,在实验的过程中由于各种因素,导致调试的时间占了实验时间的大部分,在调试过程中也发现了不少问题,学习到了很多经验。
首先,实验环境我们采用的是C语言,TurboC++3.1版本和3.0版本,其中3.0版是工作在DOS环境下的,3.1版工作在windows环境下。
对于3.0版本,它比3.1版的优越性在于能够进行单步调试,可以在程序中设置断点,但是它的运行需要设置编译目录,编译出来的程序也容易产生问题,运行后容易死机,因此我们还是采用3.1版进行编译。
由于3.1版无法进行单步调试,我们采用的方法是在程序中相应的地方输出字符,表示程序运行到了。
主要是在两个中断程序中设置输出字符,主程序进入的时候输出字符。
在中断程序中设置输出可以观察到程序是否按照预定响应进入中断处理程序。
中断处理程序包括两个:
时钟中断处理程序、换灯中断处理程序,进入时钟中断处理程序显示“Clockinterrupt”,进入换灯中断显示“Lightinterrupt”。
硬件调试方面,我们使用的主要工具是逻辑笔和示波器,使用逻辑笔检测输出脉冲,使用示波器检测8253输出波形。
由于我们的实验输出的是信号灯,所以从信号灯的变化也能看出实验结果。
在调试过程中,我们首先遇到了实验平台的问题。
在我们使用的第一个实验平台上,我们观察到8253输出的信号一直没有变化,检查连线和程序无误后认定是8253芯片的问题。
在更换了一个实验台后问题解决。
第二个实验平台芯片工作正常,但是在输出的时候发现程序一直在中断处理程序中无法结束,经检测发现实验平台上的单脉冲输出的信号有问题,被机器认为是输出多个单脉冲,结果导致多次运行中断处理程序。
后用开关信号代替解决。
其次,我们在软件和接线上调试出了不少问题。
在程序上,主要问题是一开始没有设置好中断向量号,造成实际使用的中断向量与程序中的不符。
在接线上,主要是片选信号没有和程序对应起来,以及端口接错等问题。
在程序的退出,我们设置的是检测按键输入退出,但是按键检测也会产生中断,如果把检测与8253的初始化放在一处,就会产生冲突,造成系统死机。
解决办法是在检测之前关闭中断,在检测后再打开。
程序经过调试后运行正确稳定,我们也从中学习到调试的方法和手段,最重要的是坚持调试,不怕错误,有坚持的毅力和耐力,还要有仔细观察和思考的过程。
在调试的时候用的最多的就是排除法,排除工作正常的部分就是出问题的部分,以此进行相应的修改。
6.2使用说明
1.打开硬件试验平台,运行软件,则显示初始化状态灯。
2.接下来对十字路口的来车情况进行模拟:
(1)若此时支干道来了一辆车等待通行,则按下单脉冲按键,会发现交通灯状态发生改变。
(2)待支干道绿灯亮起时,若主干道来车一辆,则打开一个模拟开关,当累积数目达到3时,交通灯会变为主红支黄,4秒后变为主绿支红状态。
(3)在支干道为绿灯时,若主干道来车数目未达到3,则在25秒后变为主绿支红状态。
3.当系统状态为主绿支红时,按下任意键退出程序。
第七章综合实验讨论
本实验课与以前我们做的硬件实验有相同点也有不同点。
相同点在于使用的都是我们熟悉的芯片,所采用的方法也是我们以前用过的。
不同点在于综合集成了几个模块一起工作实现预定功能,这样就会出现新的问题,也就是1+1>2的效果。
对于本实验的讨论分以下几个部分:
一、C语言编译环境
在实验中我们使用的是TurboC++3.1版本,但是此版本有一个很大的缺点,无法进行单步调试。
TurboC++3.0版可以进行调试,但是编译产生的程序时无法运行的。
我们从民网上下载过3.0版的汉化版,用此版本产生的程序是可以运行的,但是只能在我们的笔记本电脑上运行,不能移植到实验室的平台上去。
综合权衡下,我们采用的是TurboC++3.1版。
如果安装的是TurboC++3.1汉化版,必须设置文件包含路径,如下图
在选项中选择目录,选择后弹出下列对话框:
设置成头文件和库文件所在的目录即可。
二、实验程序
程序中最主要的是应用了中断嵌套,在进入换灯中断后仍需要时钟中断的响应,即在中断程序内响应中断。
为此需要在8259的初始化中设置为全嵌套方式,并且固定时钟中断的优先级高于换灯中断的优先级,在换灯中断中要开时钟中断。
三、实验收获和体会
经过这次试验,我们组算是比较顺利的完成了任务,经过几天的调试和修改我们不仅是完成了实验,最重要的是学到了不少东西,包括硬件和软件的知识。
在这次试验中,老师基本上没有讲什么,主要是我们自己查阅资料,先根据实验书的大体描述设计总体框架,然后再逐步细化,最终完成实验。
在实验中让我印象最深的是调试阶段。
在调试过程中,有好几次几乎找不到错误,经过自己的认真再思考和别人的帮助,我们最后还是把它做了出来,我相信这对我的意志品质是一次锻炼。
调试硬件不同于调试软件,有很多错误是无法从表面上看出来的。
所以我们必须更加耐心认真。
对于C语言做硬件实验,我们以前没有接触过,所以做起来比较生涩,有一些错误也是比较低级的。
通过上网查阅,我们最终掌握了C语言编程的基本方法和基本思想。
我觉得这种自学能力是我们最大的收获。
参考文献(补充)
[1]刘乐善:
《微机原理接口技术及应用》,华中科技出版社,2004.7
[2]徐晓红、滕秀梅:
《微型计算机原理与接口技术实验报告》,清华出版社,2009.1
[3]郑学坚:
《微型计算机原理及应用实验指导(第二版)》,清华大学出版社,2001年。
[4]宋杰:
《微机原理与接口技术课程设计》,机械工业出版社,2005年。
[5]马平:
《微机原理及应用》,中国电力出版社,2003年。
[6]崔应留:
《微机原理与接口技术实验指导书》,南京审计学院自编教材,2006年。
[7]邹逢兴:
《计算机硬件技术基础实验教程》,高等教育出版社,2010.
附录
#ifdef__cplusplus
#define__CPPARGS...
#else
#define__CPPARGS
#endif
#defineINTR10xB//时钟中断
#defineINTR20xF//换灯中断
/*定义端口*/
#defineport0_82590x20
#defineport1_82590x21
#defineport0_82530x210
#defineport1_82530x211
#defineport2_82530x212
#defineport3_82530x213
#defineport0_82550x230
#defineport1_82550x231
#defineport2_82550x232
#defineport3_82550x233
intsecond;//计时变量
intkey;//键盘输入
intcar;//主干道来车变量
voidinterrupt(*oldintf1)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通灯 实验 报告