实验3 模拟交通灯控制实验
- 格式:doc
- 大小:281.00 KB
- 文档页数:7
综合实验一:模拟交通灯控制实验
一、实验目的
1、了解时间常数的计算方法。
2、了解80C51中断的工作机理、过程,掌握中断服务程序的编制。
3、掌握80C51单片机内部定时/计数器的工作方式选择,初始化程序的设置以及中断服务子程序的设计。
二、实验内容
编写模拟交通灯运行控制程序。要求红绿灯亮灯延时时间为30秒,黄灯亮灯延时时间为10秒。利用二位八段LED显示器进行时间显示。时间显示采用倒计时的方式。时间归零时信号进行切换。
三、实验要求
掌握单片机内部通用资源如中断、定时计数器、串行口及并行端口的应用。
时间的延时必须采用定时器定时中断方式进行,定时器0或定时器1可任选一个(默认为0)。编程时请充分考虑定期器的时间扩展问题。
利用二位八段LED显示器进行时间显示,显示码采用串行口模式0进行输出。
显示方式及相应的程序编写请参考实验一。显示部分的详细接线原理及对应的显示码参考图15。
掌握中断系统的基本概念及使用方法。如:中断被响应所需的必要条件;一个完整的中断响应过程;中断优先级的概念
信号灯的控制由并行口P0口输出进行快关控制。
四、实验线路图
图为交通灯控制接线示意图,除红绿黄六路交通灯外,还需要用到两个八段LED显示器,用于显示交通灯时间显示,显示码采用串行口模式0进行输出。
图为八段显示器接线原理图,具体说明了串行口工作模式0的硬件线路。由于开发板一有6个八段显示器,在实验过程中除正常计时的两个八段LED外,将其余四个灭掉。
图交通灯控制接线示意图
图八段显示器接线原理图五、程序及注释
ORG 0000H
ORG 000BH ;定时器计数器T0中断矢量
AJMP T0INT
ORG 0030H
MAIN:
MOV TMOD,#01H ;设定时器/计数器T0为方式1,T1为方式0 MOV SCON,#00H
MOV SP,#60H ;设堆栈指针SP为60H
SETB TR0 ;启动定时器/计数器T0
SETB PT0 ;T0中断为高优先级
SETB ET0 ;允许定时器/计数器T0中断
SETB EA ;开中断
MOV TL0,#0B0H ;设T0时间常数为100ms
MOV TH0,#3CH
;ORG 0100H
RED:
SETB ;设置灯的初始状态
CLR
CLR
CLR
CLR
SETB
MOV R0,#30 ;红绿灯亮30秒
MOV R1,#10 ;黄灯亮10秒
LOOP1:MOV A,R0
WAIT1:JNB ,WAIT1 ;显示管每隔1秒倒计数CLR
DJNZ R1,WAIT1
MOV R1,#10
DEC R0 ;倒计时从30到1 CJNE R0,#00H,LOOP1
YELLOW: ;设置灯的初始状态CLR
SETB
CLR
CLR
SETB
CLR
MOV R0,#10 ;黄灯亮10秒MOV R1,#10
LOOP2:MOV A,R0
LCALL SHOW
WAIT2:JNB ,WAIT2
CLR
DJNZ R1,WAIT2
MOV R1,#10
DEC R0
CJNE R0,#00H,LOOP2
GREEN:
CLR
CLR
SETB
SETB
CLR
CLR
MOV R0,#30
MOV R1,#10
LOOP3:MOV A,R0 LCALL SHOW
WAIT3:JNB ,WAIT3 CLR
DJNZ R1,WAIT3 MOV R1,#10
DEC R0
CJNE R0,#00H,LOOP3
LJMP MAIN
SHOW:
MOV 21H,R0
MOV 22H,R1
MOV B,#10
DIV AB
MOV DPTR,#TAB MOVC A,@A+DPTR MOV 4BH,A
MOV A,B
MOVC A,@A+DPTR
MOV 4AH,A
MOV 4CH,#0FFH ;前四个显示管灭
MOV 4DH,#0FFH
MOV 4EH,#0FFH
MOV 4FH,#0FFH
MOV R1,#4AH
MOV R0,#06H
TRAN:MOV A,@R1
CLR TI
MOV SBUF,A
HERE:JNB TI,HERE
INC R1
DJNZ R0,TRAN ;循环六次,是的六个显示管有相应的状态MOV R0,21H
MOV R1,22H
RET
TAB:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
T0INT:
MOV TH0,#3CH
MOV TL0,#0B0H
SETB
SETB TR0
RETI
六、实验心得和体会
本次实验综合性较高,囊括了半本书的知识范围。在最初写程序时,我不时参考课本266页的程序,但也遇到了很大的困难,最终是和同学讨论着完成的。一个实验有不同的的程序,用不同的思路写出来的程序不同。