基于微机原理交通灯的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计任务书
一、设计题目
交通信号灯的控制
二、设计目的
巩固“微机原理”课程学过的知识,加强理论与实践的联系。通过本课程设计,使学生初步了解微机系统的硬件设备,学会8086系列编程指令的基本功能。
三、设计时间:
2011-2012学年第1学期
四、设计内容与要求
1、内容
采用8086系列CPU构建控制系统,采用并口8255与定时器8253完成交通信号灯的控制。
2、设计要求
(1)、设计系统的硬件连接原理图,对原理图加以说明。
(2)、画出程序框图,并说明。
(3)、编写应用程序,并注解程序。
(4)、提交课程设计说明书。
五、设计资料与参数
1、通过8255A并口来控制LED发光二极管的亮灭。
2、A口控制红灯,B口控制黄灯,C口控制绿灯。
3、输出为0则亮,输出为1则灭。
4、用8253定时来控制变换时间。
要求:设有一个十字路口,1、3为南,北方向,2、4为东西方向,初始态为4个路口的红灯全亮。之后,1、3路口的绿灯亮,2、4路口的红灯亮,1、3路口方向通车。延迟30秒后,1、3路口的绿灯熄灭,而1,3路口的黄灯开始闪烁(1HZ)。闪烁5次后,1、3路口的红灯亮,同时2、4路口的绿灯亮,2、4路口方向开始通车。延迟30秒时间后,2、4路口的绿灯熄灭,而黄灯开始闪烁。闪烁5次后,再切换到1、3路口方向。之后,重复上述过程。
有关系统定时的一种参考方法:
PC机系统中的8253定时器0工作于方式3,外部提供一个时钟作为CLK信号,用BIOS调用INT 1AH可以取得该定时单位。例:1秒=18.2 (计时单位)
一.设计思路
1. 流程图
东西南北全亮红灯
东西:绿灯点亮30s
南北:红灯点亮30s
东西:黄灯闪烁5次
南北:红灯亮
南北:绿灯点亮30s
东西:红灯点亮30s
南北:黄灯闪烁5次
东西:红灯亮
二.流程图说明
设计中输出使用了8255并行接口直接对各个路口共六个交通灯进行控制。
由于灯光控制只需要开、关两个状态,因此可以用8255的输出端口的输出来控制,即最多只需要六个端口,所以可以采用8位端口,又因为灯光控制不需要联络信号,所以按照方式0输出即可。
采用端口A,按以下方式连接:
南北向:红灯接PA4,黄灯接PA5,绿灯接PA6;
东西向:红灯接PA0,黄灯接PA1,绿灯接PA2;
6个交通灯可能的状态如下:
PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 PA 状态说明
状
态
0 0 0 0 1 0 0 0 1 11H 全部红灯
1 0 0 0 1 0 1 0 0 14H 南北红,东西绿
2 0 0 0 1 0 0 1 0 12H 南北红,东西黄
3 0 0 0 1 0 0 0 0 10H 南北红,东西关
4 0 1 0 0 0 0 0 1 41H 南北绿,东西红
5 0 0 1 0 0 0 0 1 21H 南北黄,东西红
6 0 0 0 0 0 0 0 1 01H 南北关,东西红
从状态1到状态6依次循环变换,又状态2和3,状态5和6之间各循环5次。其中状态1和状态4持续30秒,其他状态持续0.5秒。
按照上面的流程,依次把相应的控制码输出到端口A,6个交通灯就能够按照要求实现交通管理。
以上状态保持时间通过8253得到,使用8253的定时器0,让其工作在方式3,从CLK 端口输入1KHZ的频率,写入计数值500,则可以得到2HZ的输出频率,再通过调用程序来对得到的脉冲数进行计数,并以此来判断各个状态的时间,类似上表,可以将计数个数预先写入存储器中:
累计计数次数状态说明
状态状态保持时间
/s
0 无无全部红灯
1 30 3CH 南北红,东西绿
2 0.5 3DH、3FH、41H、43H、45H 南北红,东西黄
3 0.5 3EH、40H、42H、44H、46H 南北红,东西关
4 30 82H 南北绿,东西红
5 0.5 83H、85H、87H、89H、8BH 南北黄,东西红
6 0.5 84H、86H、88H、8AH、8CH 南北关,东西红
在每个循环结束后,将计数单元清零,同时开始下一次循环。
三.电路连接
本实验利用装置提供的8255A芯片和逻辑电平显示器进行。
将8255的数据线D0-D7,地址线A0、A1,控制线RESET,RD,WR,分别于总线相连,电源和地分别连接到实验箱的+5和地。将8255A芯片的端口A与6个逻辑电平显示器发光二极管之间连接。
、
四.源程序
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
FLAG DB O
TABLE DB 14H, 5 DUP(12H,10H), 41H, 5 DUP ( 21H, 01H );需要依次执行的代码表
COUNT EQU $-TABLE
TABLE1 3CH、3DH、3EH、3FH、40H、41H、42H、43H、44H、45H、46H、82H、83H、84H、85H、86H、87H、89H、8AH、8BH、8CH;计数状态转换表
data ends
code segment
start proc far
assume ss:stack,cs:code,ds:code
push ds
sub ax,ax
push ax
;初始化8253
MOV AL,36H ;定时器0的设置,采用方式3
OUT 43H,AL
MOV AL,533H ;在CLK端输入1khz频率,计数500次,则可以得到2HZ 输出频率
OUT 40H,AL
;初始化8255A
MOV AL,80H ;各口都工作在方式0,作为输出口
OUT 383H,AL
OUT 380H,0BH ;向端口A输出11,即所有路口亮红灯
LOOP: MOV FLAG,1 ;初始化FLAG
MOV CL,0 ;将cL清零
MOV AX,0
JMP LOOP0
LOOP0:IN AL,38H ;38H为计数器0的输出端口,直接输入到8086D0端AND AL,01H ;取AL最低位
CMP AL,FLAG
JNZ NEXT ;若输入电平有变化,则转到NEXT
JMP LOOP0 ;若电平没变化,则继续检测
NEXT: MOV FLAG,AL
INC CL ;CL自加一次,将FLAG改变一次
CMP AL,COUNT ;若检测到一个循环周期已满,则从头开始
JNZ NEXT1
JMP LOOP
NEXT1:CMP CL,TANBLE1[AH];若刚好达到需要切换状态的计数值,则输出下一个状态
INC AL
INC AH
OUT 380H,TABLE[AL]
JMP LOOP0
start endp
code ends
end start