单片机交通灯综合实验报告
时间:2021-10-05 来源:博通范文网 本文已影响 人
河 北 工 业 大 学
实
验
报
告
学
院:
专
业:
班
级:
姓
名:
学
号:
实验课程:单片机应用系统设计开发入门 指导教师:
实验名称:
交通信号灯控制实验
实验时间:
2019 年
5
月 23 日
2019 年 5 月 23 日
一
实验要求
1
实验目的及实验内容要求 实验目的:1.熟悉外部中断源的扩展方法。
2.初步掌握单片机综合应用系统设计。
3.掌握用 Proteus 调试汇编源程序的方法。
实验内容要求:
用发光二极管模拟交通信号灯,用逻辑电平开关模拟控制开关,设计一个交通信号灯控制系统。设计要求如下:
(1) A 车道与 B 车道交叉组成十字路口,A 是主道,B 是支道;正常情况下,A、B 两车道轮流放行。具体放行时间和要求如下:
(2) A 车道放行 50s,其中绿灯常亮 44s,绿灯闪烁 3s(用于警告),黄灯常亮 3s(用于警告)。
(3) B 车道放行 30s,其中绿灯常亮 24s,绿灯闪烁 3s(用于警告),黄灯常亮 3s(用于警告)。
在交通繁忙时,交通信号灯控制系统应有手控开关,可人为地改变信号灯的状态,以缓解交通拥挤状况。控制要求如下:
(1) 在 B 车道放行期间,若 A 车道有车而 B 车道无车,按下开关使 A 车道放行 15s。
(2) 在 A 车道放行期间,若 B 车道有车而 A 车道无车,按下开关使 B 车道放行 15s。
(3) 有紧急车辆通过时,按下开关使 A、B 车道均为红灯,禁行 15s。
2
实验设备或运行软件平台 完成本实验需要使用到单片机仿真软件 Proteus8,该软件是英国 Lab Center Electronics 公司出版的 EDA 工具软件,是目前比较好的仿真单片机及外围器件的工具。从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到 PCB 设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB 设计软件和虚拟模型仿真软件三合一的设计平台。在编译方面,它也支持 IAR、Keil、MATLAB 等多种编译器。其具有的基本功能特点为:1.原理布图。2.PCB 自动或人工布线。3.SPICE 电路仿真。革命性的特点是 1.互动的电路仿真。
2.仿真处理器及其外围电路。
二
实验内容及过程
1
实验设计及分析(或者实验程序)
实验原理图如下所示:
交通信号灯模拟控制系统程序流程图如下图所示:
主程序
一道有车另一道无车时
紧急车辆通过时 的中断服务程序
的中断服务程序
A
绿灯闪、
B
红灯延时
s
3
A
红灯、
B
绿灯闪动延
s
3
A
红灯、
B
绿灯延时
25
s
A
绿灯、
B
红灯延时
55
s
A
红灯、
B
黄灯延时
s
2
A
黄灯、
B
红灯延时
s
2
初始化
开中断
保护现场
关中断
A
道有车
B
道有车
A
红灯、
B
绿灯延时
s
5
A
绿灯、
B
红灯延时
5
s
关中断
恢复现场
开中断
返回
中断响应
保护现场
A
红灯、
B
红灯延时
s
20
恢复现场
返回
N
N
Y
Y
中断响应
开始
实验程序及程序分析如下:
ORG
0000H LJMP
MAIN ;LJMP,转向主程序 ORG
0003H LJMP
INT00 ;转向紧急车辆中断服务程序 ORG
0013H LJMP
INT11 ;转向有车车道放行中断服务 ORG
0030H MAIN : SETB
PX0
;置外部中断 0 为高优先级中断 MOV
TCON,#00H ;置外部中断 0、1 为电平触发 MOV
IE,#85H ;开 CPU 中断、外部中断 0、1 中断 LOOP:
;A 道绿灯亮;B 红灯亮 MOV
P1,#0F3H MOV
R1,#88 ;44s 延时循环次数 AP1:
;调用 0.5s 延时子程序 DELAY LCALL
DELAY DJNZ
R1,AP1 ;44s 不到,继续循环(DJNZ RN,REL 是一条件转移指令,先将工作寄存器Rn 中的数减“1”,判断结果是否为“0”,不为“0”程序就跳转到行标为REL 的地方执行,否则,为“0”就不转移,继续执行下一条指令。)
MOV
R1,#6 ;3s 延时的循环次数(循环一次延时 0.5 秒。)
AP2:
;A 道绿灯闪烁 CPL
P1.2 LCALL
DELAY ;参考程序中缺少此句,若缺失会导致无法延时。
DJNZ
R1,AP2 ;3s 未到,继续循环 MOV
P1,#0F5H ;A 道黄灯亮,B 道红灯亮 MOV
R1,#6
AP3: LCALL
DELAY DJNZ
R1,AP3
;3s 未到,继续循环 MOV
P1,#0DEH ;A 道红灯亮,B 道绿灯亮 MOV
R1,#48
;延时循环 48 次
BP1: LCALL
DELAY
DJNZ
R1,BP1 ;24s 未到继续循环 MOV
R1,#6 BP2: CPL
P1.5 ;B 道绿灯闪烁 LCALL
DELAY DJNZ
R1,BP2 ;3s 未到,继续循环 MOV
P1,#0EEH;A 道红灯亮,B 道黄灯亮 MOV
R1,#6 BP3: LCALL
DELAY DJNZ
R1,BP3 ;3s 未到,继续循环 SJMP
LOOP ORG
0200H INT00:
保护 P1 口数据 PUSH
P1
;PUSH 入栈指令 MOV
P1,#0F6H
;A 道红灯亮;B 道红灯亮 MOV
R2,#30
;15 秒延时的循环次数 DELAY0: LCALL
DELAY DJNZ
R2,DELAY0
POP
P1
;恢复 P1 口数据 POP 是出栈指令 RETI
;返回主程序 ORG
0300H INT11: CLR
EA
;关中断 EA 为总中断 PUSH
P1
;保护现场 PUSH
04H PUSH
05H PUSH
06H SETB
EA
;开中断 JNB
P3.0,AP0 ;A 道无车,转向判断 B 道(JNB 比较转移指令。当 P3.0 是 0 时就转移执行 AP0,否则就顺序执行。)
MOV
P1,#0F3H;A 道绿灯亮,B 道红灯亮 SJMP
DEL1
;转向 15 秒延时程序 AP0: JNB
P3.1,EXIT ;B 道无车,退出中断
MOV
P1,#0DEH;A 道红灯亮,B 道绿灯亮 DEL1 : MOV
R3,#30 ;15s 延时的循环次数 NEXT : LCALL
DELAY DJNZ
R3,NEXT ;15 秒未到循环继续 EXIT : CLR
EA POP
06H
;恢复现场 POP
05H POP
04H POP
P1 SETB
EA RETI
;返回原程序 ORG
0350H DELAY : MOV
R4,#20;0.5 秒延时子程序参考程序中为#10,经实验发现只能延时 0.25s 故改为#20,以达到实验目的。
LP1 : MOV
R5,#50 LP2 : MOV
R6,#248 NOP LP3: DJNZ
R6,LP3 DJNZ
R5,LP2 DJNZ
R4,LP1 RET END
交通信号灯与控制管脚的对应关系如下:
控制状态
P1 口控制码
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
未用
未用
B 道
绿灯
B 道
黄灯
B 道
红灯
A 道
绿灯
A 道
黄灯
A 道
红灯
A 绿灯亮、B 红灯亮
F3H
1
1
1
1
0
0
1
1
A 黄灯亮、B 红灯亮
F5H
1
1
1
1
0
1
0
1
A 红灯亮、B 绿灯亮
DEH
1
1
0
1
1
1
1
0
A 红灯亮、B 黄灯亮
EEH
1
1
1
0
1
1
1
0
A 红灯亮、B 红灯亮
F6H
1
1
1
1
0
1
1
0
2
实验步骤及实验数据记 录 1.先接线按下表所示的管脚与 LED 或逻辑开关的对应关系接线。在 Proteus8 中原理图绘制界面中将接线接好。
管脚
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P3.0
P3.1
P3.3
P3.2
LED 或逻辑开关
L3
L1
L2
L7
L5
L6
K1
K2
K3
K8
控制对象
A 红灯
A 黄灯
A 绿灯
B 红灯
B 黄灯
B 绿灯
A 道
B 道
使有车车道放行低电平有效
紧急车辆放行低电平有效
高电平表示有车低电平表示无车
接线完成后如图所示:
2.输入程序,在 Proteus8 中 SourceCode 界面将程序输入完成后试运行保证程序正确。
出现编译成功后进行下一步。
3 运行程序。
4.观察六只发光二极管的亮灭规律。
实验中六只发光二极管亮灭规律:(0 代表灭,1 代表亮,2 代表闪)
运行时间(s )
A 绿 A 黄 A 红 B 绿 B 黄 B 红 0 1 0 0 0 0 1 44 2 0 0 0 0 1 47 0 1 0 0 0 1 50 0 0 1 1 0 0 74 0 0 1 2 0 0 77 0 0 1 0 1 0 80 1 0 0 0 0 1 八十秒后开始重复 0-80 秒内的亮灭规律。
5.
部分连接图如图所示。
1)
在 A 红灯、B 绿灯亮时,先将 K1 拨至高电平(表示 A 道有车)、K2 拨至低电平(表示 B 道无车),再将 K3 拨至低电平使有车车道(A 道)放行,A 绿灯、B 红灯同时亮 5s 后返回原先状态。
对逻辑开关 K1、K2、K3 的操作对应于 SW2 开关,闭合 SW2 后,A 红灯灭,绿灯亮,B 绿灯灭,红灯亮。15s 后恢复回闭合开关前的的亮灯状态。
2)
在 A 绿灯、B 红灯亮时,先将 K1 拨至低电平(表示 A 道无车)、K2 拨至高电平(表示 B 道有车),再将 K3 拨至低电平使有车车道(B 道)放行,A 红灯、B 绿灯同时亮 5s 后返
回原先状态。
对逻辑开关 K1、K2、K3 的操作对应于 SW1 开关,闭合 SW1 后,A 绿灯灭,红灯亮,B 红灯灭,绿灯亮。15s 后恢复回闭合开关前的的亮灯状态。
(提示:K3 拨至低电平后,应在 5s 内改为高电平,否则,单片机可能将再一次响应中断。)
6.不论 A 道、B 道的信号灯处于什么状态,将 K8 拨至低电平后,A 红灯、B 红灯同时亮 20s后返回原先状态。(提示:K8 拨至低电平后,应在 20s 内改为高电平,否则,单片机可能将再一次响应中断。)
对逻辑开关 K8 的操作对应于 JINJI 开关,闭合 JINJI 后,A 只有红灯亮,B也只有红灯亮。20s 后恢复回闭合开关前的的亮灯状态。
3
实验数据分析 1.一道有车而另一道无车时,K3 拨至低电平即向单片机发出中断请求(低优先级别);若此时单片机正在执行主程序,会响应中断转入到相应的中断服务程序,先依次查询 A、B 车道的空闲状态,再去控制 A、B 车道的信号灯;若此时单片机正在执行紧急车辆通过时中断服务程序,单片机不会响应中断。
2.紧急车辆通过时,K8 拨至低电平即向单片机发出中断请求(高优先级别),不论单片机正在执行主程序还是一道有车而另一道无车时的中断服务程序,会响应中断转入到相应的中断服务程序。
3.在进行步骤 5 1)或 2)操作时,若在闭合开关后没有在 5s 内断开开关,则在 15 秒时无法按时恢复回闭合开关时的亮灯状态。
4.操作过程中发现,若操作 SW1 开关后亮灯状态已经发生改变,则在 15 秒内再操作 SW2开关则无法继续使亮灯状态改变。
三
总结与体会
1
实验任务完成情况 本实验完成情况良好。通过老师的精心指导、本人的不懈努力和同学的热心帮助,能够基本上完成所有实验内容,且在实验过程中对单片机的了解更加深入了。但也无法避免地遇到一些问题,比如对实验程序代码的理解不够深入,只停留在表面,且对 51 单片机的 111 条指令仍比较陌生,只能记住一些特别常用的。对于此我的做法是,在分析实验程序的过程中,一遇到不熟悉的指令就百度搜索一下加深印象。在反复的搜索过程中我也记住了不少指令。通过课程的学习,目前达到的水平是能够基本看懂实验程序,能够绘制简单原理图,但仍无法做到独立编写实验程序。
2
实验体会、收获、建议回答问题
通过对该实验的学习,本人也有了许多不小的收获。对于一位非电技专业的学生来说,我在学习单片机的过程中确实存在许多问题。老师讲的东西很多在课堂上都无法及时弄明白,必须要靠课余时间的学习。所以起初在做该实验的时候也是感觉苦难重重,觉得自己肯定是无法完成的,但我不想轻易放弃,将老师上用的课件反复查看,发现很多上课没有注意到的重要知识点,这让我的实验变得更加容易完成了许多。我觉得通过本次实验我的最大收获是学会了如何解决难题。首先要做的就是对自己有信心,相信自己一定能够完成。其次才是去认真解决问题。
杭州电子科技大学单片机技术与应用实验报告
单片机技术与应用
实验报告
实验名称:外部中断实验(急救车与交通灯) 班
级:
11062811
学
号:
11061118
姓
名:
吕琳涛
指导老师:
谷雨
2013年 5月 20日
杭州电子科技大学单片机技术与应用实验报告
} } XBYTE[0xf200]=0x6f; delay(1000); XBYTE[0xf200]=0x09; delay(5000);
void exter0() interrupt 0
{
XBYTE[0xf200]=0x0f;
delay(10000); }
//中断服务程序,中断为外部中断0
//全红10s,急救车通过
4.心得体会
本次实验中我们做的是一个交通灯的控制与救护车通过时的一个中断问题。我想这次实验是上两次实验的结合。然后我想对于一些看似很复杂的问题,如果我们可以将其分解为一些我们学过的会做的问题的话,问题就会迎刃而解。
结构完整!
作者太棒了。