基于8086的智能交通灯的设计
- 格式:doc
- 大小:142.05 KB
- 文档页数:8
摘要:随着交通的不断发展和交通指挥的需要,交通灯的控制指挥系统自始至终都显得尤为重要。
本课题旨在设计一种交通灯控制指挥系统,以实现对交通的有效控制。
在十字路口,当南北方向红灯亮,东西方西绿灯亮时,南北方向车辆禁止通行,东西方向允许通行;反之,南北方向允许车辆通行,东西方向禁止车辆通行。
当发生危急情况时,可使所有路口红灯点亮,禁止所有车辆通行。
本系统使用8255可编程接口进行数据的输入输出,使用8253可编程计时器进行延时。
通过本课程设计,可加深对微机原理与接口技术的进一步理解。
关键词:交通灯汇编语言8255 8253KEY WORDS:the Traffic Lights AssemblyLanguage 8255 82531任务及要求1.1课程设计任务通过开放实验室,学生有兴趣地创造自己的设计课题,并在实验中进行完善,使学生能综合运用微机原理与接口技术、数字电路、汇编语言程序设计等课程学到的知识,掌握微型计算机接口的方法和原理,具备一定的微机应用开发的实践能力,加深对理论课程的理解。
提高汇编语言编程能力及对接口等硬件的理解分析能力和设计接口电路的能力。
提高实践能力,培养独立工作和创新思维的能力,取得设计与调试的实践经验。
1.2课程设计要求利用“微机实验系统”的8255可编程接口的A口(PA7-PA0)、B口(PB7-PB0)、C口(PC7-PC0)控制发光二级管(红、绿灯)的L1-L8和开关KK1- KK2,使发光二级管按照十字路口交通灯的规律交替发光,模拟交通信号灯的工作。
♦发光二级管(LED) 显示电路8个LED L1-L8,4个红灯、4个绿灯L=0 LED亮; L= LED灭♦开关对交通灯的控制①开关KK2=0 红灯皆亮;开关KK2=1 绿灯皆亮②开关KK1=0 启动交通灯的亮灭;开关KK1=1停止交通灯的亮灭(所有发光二级管皆灭)♦交通灯亮灭规律参考①南北方向绿灯亮、东西方向红灯亮20秒②南北方向红灯亮、东西方向绿灯亮20秒重复上述过程注:20秒定时由8253控制2总体设计思想2.1系统原理图示2.2基本工作原理说明此方案是通过并行接口芯片8255A 和8086计算机的硬件连接,以及通过8253延时的方法,来实现十字路口交通灯的模拟控制。
本课题的设计可通过实验平台上的一些功能模块电路组成,由于各模块电路内部已经连接,用户在使用时只要设计模块间电路的连接,因此,硬件电路的设计及实现相对简单。
2.3 8255的工作原理2.3.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.3.2 8255的工作方式方式0---基本输入输出方式;方式1---选通输入输出方式; 方式2---双向选通输入输出方式。
2.3.3 8255的引脚信号8255A 的引脚如图7.5所示,分为数据线、地址线、读/写控制线、输入/输出端口线和电源线。
D7~D0(data bus ):三态、双向数据线,与CPU 数据总线连接,用来传送数据。
(chip select ):片选信号线,低电平有效时,芯片被选中。
A1, A0(port address ):地址线,用来选择内部端口。
(read ):读出信号线,低电平有效时,允许数据读出。
(write ):写入信号线,低电平有效时,允许数据写入。
(PA PB PC) LRESET(reset):复位信号线,高电平有效时,将所有内部寄存器(包括控制寄存器)清0。
PA7~PA0(port A):A口输入/输出信号线。
PB7~PB0(port B):B口输入/输出信号线。
PC7~PC0(port C):C口输入/输出信号线。
VCC:+5V电源。
GND:电源地线。
2.4 8253的工作原理8253是可编程的计数器/定时器,其内部有三个独立的16位计数器/定时器通道,每个计数器通道均可按6种不同的方式工作,并且都可以按二进制或十进制计数。
其CLK0~CLK2是计数器0~2的时钟脉冲输入端, GATE0~GATE2是门控脉冲输入端, OUT0~OUT2是输出端。
3硬件设计3.1硬件设计思路本系统共实现两个功能,分别是①开关KK2=0 红灯皆亮;开关KK2=1 绿灯皆亮②开关KK1=0 启动交通灯的亮灭;开关KK1=1停止交通灯的亮灭(所有发光二级管皆灭)。
可利用开关KK3来控制两个功能,KK3=1,实现功能①;KK3=0,实现功能②3.2硬件连线图3.3实际硬件连线图4软件设计4.1源程序及程序功能data segment;设置数据段,用端口号代替地址porta equ 04b0hportb equ 04b2hportc equ 04b4hptcon8255 equ 04b6hport0 equ 04a0hport1 equ 04a2hport2 equ 04a4hptcon8253 equ 04a6hdata ends;数据段设置完毕assume cs:codecode segment publicorg 100h;程序从100h处开始执行start:mov dx,ptcon8255;初始化8255,方式0,A口输出,C口低4位输入mov al,81hout dx,alputin1:mov dx,portamov al,01010101b;红灯皆亮,绿灯皆灭then1:mov dx,portcin al,dxtest al,04hjnz putin1;检测KK2,KK2=1,则执行putin1;否则顺序执行mov dx,portamov al,10101010b;绿灯皆亮,红灯皆灭out dx,alswitch:mov dx,portcin al,dxtest al,08h;检测kk3,kk3=1,执行then1;kk3=0,执行then2 jnz then1putin2:mov dx,portamov al,0ffh;红灯绿灯皆灭out dx,althen2:mov dx,portcin al,dxtest al,01h;检测kk1,kk1=1,执行putin2;kk1=0,顺序执行jnz putin2mov dx,portamov al,10100101b;南北方向绿灯亮、东西方向红灯亮out dx,almov cx,200next1:call delay;调用延时程序,延时20秒loop next1mov dx,portamov al,01011010b;南北方向红灯亮、东西方向绿灯亮out dx,almov cx,200next2:call delay;调用延时程序,延时20秒loop next2jmp switch;跳回switch,继续查询KK3状态delay:mov dx,ptcon8253;初始化8253mov al,0b0hout dx,almov ax,18750;设置初始值mov dx,port2out dx,alout dx,alwait1:mov dx,portcin al,dxtest al,08h;程序执行过程中检测kk3状态 jnz then1test al,01h;程序执行过程中检测kk1状态 jnz putin2mov dx,portcin al,dxtest al,02hjz wait1retcode endsend start;程序结束end4.2程序流程图5调试记录及结果分析5.1调试记录系统总共实现两个功能,一个是实现全红全绿的选择控制,另一个是实现东西南北不同方向红绿灯的循环点亮。
我另外附加了一个开关KK3来对以上两个功能进行选择。
第一步,分别编写控制两个功能的程序,并分别进行调试。
对第一个功能程序进行调试,未发现有问题。
对第二个功能程序进行调试也未发现问题。
第二步,在增加KK3的基础上对两个程序进行整合,通过switch程序对两个功能程序进行选择。
调试过程中发现,调节KK3的状态并不能即时响应,而是要等待一段时间才能响应,解决方法,在wait1程序中增加了test al,08h;程序执行过程中检测kk3状态jnz then1问题得以解决。
5.2结果分析(1)KK3=1时,KK2=0,红灯全亮,绿灯全灭;KK2=1,红灯全灭,绿灯全亮。
(2)KK3=0时,KK1=0,南北方向红灯全亮,东西方向绿灯全亮,延时20秒,南北方向绿灯全亮,东西方向红灯全亮,延时20秒……不断循环,如果在循环过程中使KK1=0,红灯绿灯全灭。
(3)在程序执行过程中,根据KK3的状态可以即时响应以分别实现KK1和KK2的功能。
6设计总结此次课程设计收获到了许多课堂以外的东西。
通过去网上和图书馆查阅很多资料,更加深化了许多汇编语言程序的设计思想,扩展了编程视野,而不是仅仅再局限于书本中几条简短的程序,而且更重要的是明白写程序的整体思路与编程细节。
在系统加电调试中,学会了如何发现问题之后使用单步执行的方式查找出并解决问题的重要方法和思路。
通过此次课程设计,掌握了如何编写程序,编写程序工作的基本过程及其各阶段的基本任务,自学完成了程序流程框图,从而对课本上的知识有了更深的理解。
在本次课程设计中,把死板的课本知识变得生动有趣,从而激发了学习的积极性。
把学过的计算机编译原理的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。
以前对与计算机操作系统的认识是模糊的,概念上的,现在通过自己动手做实验,从实践上认识了操作系统是如何处理命令的,如何协调计算机内部各个部件运行,对微机原理与接口技术有了更加深刻的认识,是对所学《新版汇编语言程序设计》,《单片机原理及接口技术》和《微型计算机原理及接口技术》的进一步升华。