当前位置:文档之家› 模拟交通灯控制实验

模拟交通灯控制实验

实验报告
课程名称:微机原理与接口技术 指导老师:彭勇刚 成绩:__________________
实验名称:_______________________________实验类型:________________同组学生姓名:__________
一、实验目的和要求(必填) 二、实验内容和原理(必填)
三、主要仪器设备(必填) 四、操作方法和实验步骤
五、实验数据记录和处理
六、实验结果与分析(必填)
七、讨论、心得
模拟交通灯控制实验
一、实验目的
1、了解时间常数的计算方法。

2、了解80C51中断的工作机理、过程,掌握中断服务程序的编制。

3、掌握80C51单片机内部定时/计数器的工作方式选择,初始化程序的设置以及中断服务子程序的设计。

二.实验内容和实验原理
编写模拟交通灯运行控制程序。

要求红绿灯亮灯延时时间为30秒,黄灯亮灯延时时间为10秒。

利用二位八段LED 显示器进行时间显示。

时间显示采用倒计时的方式。

时间归零时信号进行切换。

实验线路图如下图:装 订 线
除红绿黄六路交通灯外,还需要用到两个八段LED显示器,用于显示交通灯时间显示,显示码采用串行口模式0进行输出
三.实验器材:
1. Micetek仿真器一台
2. 实验板一块
四.程序及实验结果:
调试通过的.LST文件如下:
ORG 0000H
0000 0130 AJMP MAIN
ORG 000BH ;定时器T0的中断矢量
000B 21A3 AJMP T0INT ;跳转到中断服务程序
ORG 0030H
MAIN:
0030 758901 MOV TMOD,#01H ;写控制字,T0为方式1;
0033 759800 MOV SCON,#00H
0036 758160 MOV SP,#60H ;设堆栈指针SP为60H
0039 D28C SETB TR0 ;启动T0;
003B D2B9 SETB PT0 ;T0中断为高优先级
003D D2A9 SETB ET0 ;允许T0中断
003F D2AF SETB EA ;开放CPU中断
0041 758AB0 MOV TL0,#0B0H ;定时常数为100ms
0044 758C3C MOV TH0,#3CH
ORG 0100H
RED: ;红灯
0100 D280 SETB P0.0 ;设置输出的初始状态
0102 C281 CLR P0.1
0104 C282 CLR P0.2
0106 C283 CLR P0.3
0108 C284 CLR P0.4
010A D285 SETB P0.5
010C 781E MOV R0,#30 ;红灯亮30s
010E 790A MOV R1,#10 ;黄灯亮10s
0110 E8 LOOP1:MOV A,R0
0111 120166 LCALL SHOW ;转移到数码显示子程序
0114 3000FD WAIT1:JNB 20H.0,WAIT1 ;数码管计数间隔为1s
0117 C200 CLR 20H.0
0119 D9F9 DJNZ R1,WAIT1
011B 790A MOV R1,#10
011D 18 DEC R0 ;红灯从30s开始倒计时
011E B800EF CJNE R0,#00H,LOOP1
YELLOW:
0121 C280 CLR P0.0 ;设置输出的初始状态
0123 D281 SETB P0.1
0125 C282 CLR P0.2
0127 C283 CLR P0.3
0129 D284 SETB P0.4
012B C285 CLR P0.5
012D 780A MOV R0,#10 ;黄灯亮的时间为10s
012F 790A MOV R1,#10
0131 E8 LOOP2:MOV A,R0
0132 120166 LCALL SHOW ;转移到数码显示子程序0135 3000FD WAIT2:JNB 20H.0,WAIT2 ;数码管计数间隔为1s 0138 C200 CLR 20H.0
013A D9F9 DJNZ R1,WAIT2
013C 790A MOV R1,#10 ;黄灯从10s开始倒计时
013E 18 DEC R0
013F B800EF CJNE R0,#00H,LOOP2
GREEN:
0142 C280 CLR P0.0 ;设置灯的初始状态
0144 C281 CLR P0.1
0146 D282 SETB P0.2
0148 D283 SETB P0.3
014A C284 CLR P0.4
014C C285 CLR P0.5
014E 781E MOV R0,#30 ;绿灯亮30s
0150 790A MOV R1,#10 ;黄灯亮10s
0152 E8 LOOP3:MOV A,R0
0153 120166 LCALL SHOW ;转移到数码显示子程序0156 3000FD WAIT3:JNB 20H.0,WAIT3
0159 C200 CLR 20H.0
015B D9F9 DJNZ R1,WAIT3
015D 790A MOV R1,#10
015F 18 DEC R0 ;数码管从30开始倒计时
0160 B800EF CJNE R0,#00H,LOOP3
0163 020030 LJMP MAIN
SHOW: ;数码显示子程序
0166 8821 MOV 21H,R0
0168 8922 MOV 22H,R1
016A 75F00A MOV B,#10
016D 84 DIV AB
016E 900199 MOV DPTR,#TAB
0171 93 MOVC A,@A+DPTR
0172 F54B MOV 4BH,A
0174 E5F0 MOV A,B
0176 93 MOVC A,@A+DPTR
0177 F54A MOV 4AH,A
0179 754CFF MOV 4CH,#0FFH ;前四个数码管灭
017C 754DFF MOV 4DH,#0FFH
017F 754EFF MOV 4EH,#0FFH
0182 754FFF MOV 4FH,#0FFH
0185 794A MOV R1,#4AH
0187 7806 MOV R0,#06H ;循环次数为6次
0189 E7 TRAN:MOV A,@R1
018A C299 CLR TI
018C F599 MOV SBUF,A
018E 3099FD HERE:JNB TI,HERE
0191 09 INC R1
0192 D8F5 DJNZ R0,TRAN ;循环6次,显示数码管相应状态0194 A821 MOV R0,21H
0196 A922 MOV R1,22H
0198 22 RET
TAB:
0199 C0F9A4
019C B09992
019F 82F880
01A2 90 DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H T0INT: ;中断服务程序
01A3 758C3C MOV TH0,#3CH
01A6 758AB0 MOV TL0,#0B0H
01A9 D200 SETB 20H.0
01AB D28C SETB TR0
01AD 32 RETI ;中断结束
实验结果如图:
五.心得体会:
通过本次实验我了解了80C51中断的工作机理、过程并初步掌握了80C51单片机内部定时/计数器的工作方式选择,初始化程序的设置以及中断服务子程序的设计,深化了对于课上理论知识的学习。

我认为本次实验综合型较强,在编写程序时有以下几个关键点:一是理解数码管的接线原理图;二是正确使用中断系统,如定时常数的设置,中断服务子程序的编写等;三是一些使用汇编语言编写程序的基本方法和结构,如使用CJNE、DJNE等指令构造循环结构以实现灯的倒计时计数。

相关主题