接口交通灯控制器课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本科生课程实习交通灯控制器设计
课程名称微型计算机原理及接口技术
学生姓名
学生学号
所在专业计算机科学与技术
所在班级
日期2011/12/23
指导教师职称
成绩
目录
交通灯控制器设计 (2)
1需求分析 (3)
1.1 需求说明 (3)
1.2 设计内容 (3)
1.3 设计平台 (3)
2总体设计 (3)
2.1 芯片选择 (3)
2.2 设计思想 (3)
2.3 线路图设计 (3)
2.4 流程图设计 (4)
3详细设计 (5)
3.1 设计源程序 (5)
4调试与运行 (6)
5设计结果 (6)
6设计分析总结与体会 (6)
7参考文献 (6)
8附件 (7)
交通灯控制器设计
摘要:十字道口的自动红绿灯是交通法规的无声命令,是司机和行人的行为准则。
它具有固定的“红灯—绿灯”转换间隔,并自动切换。
它们一般由“通行与禁止时间控制显示、红黄绿三色信号灯和方向指示灯”三部分组成。
在交通灯的通行与禁止时间控制显示中,如东西、南北两方向各30秒,最后还有3到5秒的闪烁缓冲时间。
关键字:计算机接口汇编语言交通灯控制 8259 8253 8255
1需求分析
1.1需求说明
当前,国内大多数城
市正在采用“自动”红绿交通灯,它具有固定的“红灯—绿灯”转换间隔,并自动切换。
它们一般由“通行与禁止时间控制显示、红黄绿三色信号灯和方向指示灯”三部分组成。
在交通灯的通行与禁止时间控制显示中,东西、南北两方向
各30秒,闪烁时间3秒。
本次课程设计采用定时加中断控制的方式进行,对两个方向车辆的通行时间分别计时,可随意进行更改双向的通行时间。
1.2设计内容
为交通信号灯的实时控制和管理。
利用并行接口8255A、中断接口8259A 和定时器8253A,以及键盘和数码显示电路,设计一套十字路口的交通灯管理系统,通行时间(或禁止时间)30秒,准备时间3秒,在准备时间里黄灯闪烁3次,闪烁频率为0.5秒,周而复始。
用 LED 数码管倒计时显示时间。
个人增加内容:数码管重新计数
1.3设计平台
TDN86/51(西安唐都科教仪器公司产品)试验仪的硬件资源,PC机一台,导线若干
2总体设计
2.1芯片选择
1.用实验系统8255A实现对信号灯的控制;2位数码显示用8255A 实现控制。
2. 用实验系统8235的计数器2定时向实验系统主片8259A的IRQ7请求中断,以实现要求的30秒、3秒钟定时。
实验系统8235的计数器2的CLK2接OPCLK,频率为1.19318MHZ;GATE2已接 +5V;定时采用软硬件相结合的方式实现。
⒊用实验系统的发光二极管模拟红绿灯。
注:8259A的端口地址为:20H、21H
8255A的端口地址为:端口A-60H、端口B-61H、端口C-62H、
控制端口-63H
8253的端口地址为:计数器0-40H、计数器1-41H、计数器2-42H、
控制寄存0-43H。
2.2设计思想
设计数器2的计数初值为59520,由于CLK2接脉冲信号,频率为1.193MHZ,所以每50ms中断一次。
利用CX对不同的状态时间计数,用来实现计数器2对1秒,3秒钟定时。
中断子程序分为数码显示刷新部分和红绿黄灯,各种状态切换部分。
每20次中断即刷新LED显示。
交通灯由8255的C端口输出的数字量控制。
2.3线路图设计
2.4 流程图设计
CX=20
开中断
调用数码管显示
显示东西绿灯 最后
3
秒?
绿灯
(黄灯)绿灯闪烁
CX=0?
修改时间
时间=0?
显示南北绿灯
最后3
秒?
CX=0?
绿灯
(黄灯)绿灯闪烁
修改时间 时间=0?
8259,8253,8255
初始化
开始
CX=20 开中断 调用数码管显示
IRQ7
8259
IRQ6 8253 OUT2 CLK GATE2
OPCLK +5V PB0-PB7 PA0 P A1 8255
PA2 PA3
A~P
东西 南北 东西 南北
Kk+
3详细设计
3.1设计源程序
1.数据段定义
T1 DB 00H
T2 DB 03H
LEDTAL DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
用T1作为个位取数的指针
用T2作为十位取数的指针
2.芯片及其端口的初始化
IN AL,21H;
AND AL,08H
OUT 21H,AL
MOV AL,80H;初始化8255 ,A,B,C三口均工作在方式0
OUT 63H,AL
MOV AL,0B6H;初始化8253,计数器#2工作在方式3,产生方波信号OUT 43H,AL
MOV AX,59500;
OUT 42H,AL;C口传出数据,先传低4位,然后传高4位
MOV AL,AH
OUT 42H,AL
3.写IRQ6和IRQ7
PUSH DS
MOV AX,0000H
MOV DS,AX
MOV AX,OFFSET IRQ7
ADD AX,2000H
MOV SI,003CH
MOV [SI],AX
MOV AX,0000H
MOV SI,003EH
MOV [SI],AX
POP DS
CLI
PUSH AX
PUSH DS
MOV AX,0000H
MOV DS,AX
MOV AX,OFFSET IRQ6
ADD AX,2000H
MOV SI,0038H
MOV [SI],AX
MOV AX,0000H
MOV SI,003AH
MOV [SI],AX
POP DS
POP AX
4.显示红绿灯主程序的设计
分别设了用于显示南北道和东西道的不同段,DEC_60表示在南北方向通向,DEC_45表示在东西方向同行,由于篇幅问题,代码查看下面源程序附件。
4调试与运行
程序是一开始几个人一起商量后实现的,无论是在语法上和逻辑上都没有大的问题。
在实验室用反汇编工具的D命令查看了数据段是否写入,和IRQ7的入口地址等都正确写入了,接着用G=0000:2000运行程序,查看验证结果是否和预想的一样。
5设计结果
经装载入程序后,数码管开始显示30,代表交通灯的二极管,显示东西红灯,南北绿灯亮,每一秒数码管减一,减到3时,南北绿灯闪烁直到零换道显示,东西绿灯亮,南北红灯亮,直到数码管计数到3,绿灯闪烁,如此不断循环。
当按下KK+的时候,无论数码管计数到何数值都重新从30秒开始计数。
6设计分析总结与体会
此次课程设计中,由于考试前对8255,8253,8259都弄得比较透了,所以,一开始和队友就有了思路该如何设计下去,应该是用那个8253来实现50ms输出方波,然后用8259申请中断,每20次中断就是一秒。
8255实现控制交通灯的红灯绿灯和闪烁。
基本上没有遇到什么问题,唯一遇到的问题是,在连接线路图的时候,搞不懂IRQ应该接在机子上的哪个IRQ引脚。
经尝试后才知道,另一片8259应该是作为从片的时候用的。
因此,可以说是获益匪浅。
了解了许多汇编程序的思想,扩展了自己的视野,不再仅仅局限于书本中几条简短的程序,而且更重要的是明白写程序的态度:仔细谨慎,精益求精。
在原要求的基础上实现了计数的复位。
另外针对一些问题,熟练掌握了根据原理分步测试,将错误之处缩小的最小范围内。
而且在设计中,把死板的课本知识变得生动有趣,激发了学习的积极性。
把学过的计算机接口技术的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。
同时,本次课程设计,是在队友的配合和黄超英老师和彭小红老师的指导下如此顺利地,一天完成了。
体会到了团队精神的强大与不懂即问和查阅资料的重要性。
以后会在实践中不断加强自己的团队精神意识!
7参考文献
1.《微型计算机原理与接口技术》中国矿业大学出版社李长青李泉溪主编
2.《微机原理及应用》机械工业出版社胡钢主编
3. 《微型计算机原理与接口技术》机械工业出版社林志贵主编
8附件
源程序:
STACK SEGMENT STACK
DB 64 DUP(0)
STACK ENDS
DATA SEGMENT
T1 DB 00H
T2 DB 03H
LEDTAL DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,73H DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: CLI
MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET LEDTAL
PUSH DS
MOV AX,0000H
MOV DS,AX
MOV AX,OFFSET IRQ7
ADD AX,2000H
MOV SI,003CH
MOV [SI],AX
MOV AX,0000H
MOV SI,003EH
MOV [SI],AX
POP DS
CLI
PUSH AX
PUSH DS
MOV AX,0000H
MOV DS,AX
MOV AX,OFFSET IRQ6
ADD AX,2000H
MOV SI,0038H
MOV [SI],AX
MOV AX,0000H
MOV SI,003AH
MOV [SI],AX
POP DS
POP AX
IN AL,21H ;开IRQ7,IRQ6中断源
AND AL,3FH
OUT 21H,AL
MOV AL,80H ;初始化8255 ,A,B,C三口均工作在方式0
OUT 63H,AL
MOV AL,0B6H ;初始化8253,计数器2工作在方式3,产生方波信号
OUT 43H,AL
MOV AX,59500 ;传入50毫秒的初值
OUT 42H,AL ;C口传出数据,先传低4位,然后传高4位
MOV AL,AH
OUT 42H,AL
MLOAD: MOV T1,00H ;初始值显示30秒,并开始倒计时
MOV T2,01H
COUNT_1: MOV CX,14H ;作为1秒的中断次数计数器,南北道倒计时程序DEC_60: STI ;开中断
CALL DISP1
CMP T2,00H ;判断十位是否减到0,如果不是则保持南北道绿灯亮
JNZ K1
CMP T1,03H ;判断各位是否为3秒,如果是则用全部的灯闪烁表示黄灯JG K1
MOV AL,33H ;此处灯显示状态不变
OUT 62H,AL
CMP CX,0AH
JG K2
MOV AL,3FH ;绿灯二极管灭
OUT 62H,AL
JMP K2
K1: MOV AL,33H ;显示南北干道绿灯亮通行
OUT 62H,AL
K2: CMP CX,00H ;判断是否到了一秒,然后倒计时减1
JNZ DEC_60
CMP T1,03H ;如果够1秒,且个位大于3秒
JG LIGHT_60
CMP T2,00H ;小于3秒判断十位是否为零?唔为零,则跳到判断各位是否为零
JNZ N1
TEST T1,0FFH ;判断是否个位、十位均减到0
JNZ LIGHT_60 ;不是则继续倒计时
JMP SLOAD ;是则(标志位ZF=0)跳转到东西干道程序
N1: TEST T1,0FFH ;此处的功能是判断个位是否为0,且十位不为0 JNZ LIGHT_60
MOV T1,09H ;个位为0则使个位为9
DEC T2 ;十位减1
JMP COUNT_1
LIGHT_60:DEC T1 ;个位减一秒
JMP COUNT_1
SLOAD: MOV T1,00H
MOV T2,01H
COUNT_2: MOV CX,14H ;东西干道倒计时程序
DEC_45: STI ;开中断
CALL DISP1
CMP T2,00H ;判断十位是否减到0,如果不是东西道绿灯亮
JNZ K3
CMP T1,03H ;判断各位是否为3秒,如果是则用全部的灯闪烁表示黄灯JG K3
MOV AL,0CCH ;此处灯显示状态不变
OUT 62H,AL
CMP CX,0AH
JG K4
MOV AL,0CFH ;绿灯二极管灭
OUT 62H,AL
JMP K4
K3: MOV AL,0CCH ;显示东西干道绿灯亮通行
OUT 62H,AL
K4: CMP CX,00H ;判断是否到了一秒,然后倒计时减1
JNZ DEC_45
CMP T1,03H
JNBE LIGHT_45
TEST T2,0FFH
JNZ N2
TEST T1,0FFH ;判断是否个位、十位均减到0
JNZ LIGHT_45 ;不是则继续倒计时
JMP MLOAD ;是则(标志位ZF=0)跳转到南北道程序,依次循环
N2: TEST T1,0FFH ;此处的功能是判断个位是否为0,且十位不为0 JNZ LIGHT_45
MOV T1,09H ;是则使个位为9
DEC T2 ;十位减1
JMP COUNT_2
LIGHT_45:DEC T1
JMP COUNT_
IRQ7: DEC CX ;确定是否为1秒的中断服务程序
MOV AL,20H
OUT 20H,AL
IRET
IRQ6:
MOV T1,00H
MOV T2,03H
MOV AL,20H ;从三十秒重新开始计数
OUT 20H,AL
JMP COUNT_1
IRET
DISP1 PROC NEAR ;显示子程序_1,用来显示8段数码管中0-9数字。
MOV DL,0FEH
MOV SI,OFFSET T1;显示内容首地址送SI
L1: MOV AL,DL ;点亮最左边的显示器,位码送AL
TEST AL,04H ;判断是否点亮了从右往左的第二个LED
JZ END1 ;已经点亮了
OUT 60H,AL ;位码送A口
ROL AL,01H ;改变位码
MOV DL,AL ;位码送DL保存
MOV AL,[SI] ;去要显示的字符
XLAT ;把显示字符换成相应的8断段码
OUT 61H,AL ;显示字符的8段码送端口B
CALL DELAY ;延时,1位显示器点亮的时间
INC SI ;地址加1
JMP L1
END1: RET
DISP1 ENDP
DELAY PROC NEAR ;软件延时子程序_1:延时5毫秒
PUSH DX
PUSH AX
MOV DX,20
LOOP1: MOV AX,10
L4: DEC AX
JNZ L4
DEC DX
JNZ LOOP1
POP AX
POP DX
RET
DELAY ENDP
CODE ENDS
END START
10。