运用单片机的定时器及外部中断系统,设计具有应急通行功能的简易交通灯应用
功能:
交通灯运行状态有六种:
按照简单的交通路口规则,正常情况有四种状态不停轮换:
状态1:南北绿灯亮,东西红灯亮:
状态2:南北黄灯闪,东西红灯亮;
状态3.南北红灯亮,东西绿灯亮:
状态4.南北红灯亮,东西黄灯闪;
状态5.为应急通行模式。由外部中断0控制。当应急通行开关闭合时,所有路口的红灯处于常亮状态,黄、绿灯熄灭。
状态6为深夜模式,外部中断1控制。当深夜模式开关闭合时,所有路口的黄灯闪烁。
protues连接图:(连接各个点的时候一点要注意是否打点,千万别没点直接跨线)
分析一下情况:
上代码:
ORG 0000H
JMP INIT
ORG 0003H
JMP INIT_0
ORG 0013H
JMP INIT_1
INIT:
CLR IT0
CLR IT1
SETB EA
SETB EX0
SETB EX1
SETB PX0
CLR PX1
S1:
MOV P1,#01111110B
CALL DELAY3S
S2:
MOV R4,#3
L4:
MOV P1,#10111110B
CALL DELAY500MS
MOV P1,#11111110B
CALL DELAY500MS
DJNZ R4,L4
S3:
MOV P1,#11011011B
CALL DELAY3S
S4:
MOV R4,#3
L5:
MOV P1,#11011101B
CALL DELAY500MS
MOV P1,#11011111B
CALL DELAY500MS
DJNZ R4,L5
JMP S1
DELAY3S:
MOV R3,#3
L3:
CALL DELAY1S
DJNZ R3,L3
RET
DELAY1S:
CALL DELAY500MS
CALL DELAY500MS
RET
DELAY500MS:
MOV R2,#250
L2:
CALL DELAY1MS
DJNZ R2,L2
RET
DELAY1MS:
MOV R1,#250
L1:
NOP
NOP
DJNZ R1,L1
RET
INIT_0:
MOV P1,#11011110B
RETI
INIT_1:
;PUSH PSW ;push and pop way
;MOV PSW,#10H
;MOV P1,#10111101B
;CALL DELAY500MS
;MOV P1,#11111111B
;CALL DELAY500MS
;POP PSW
;RETI
MOV P1,#10111101B
CALL DELAY500MS
MOV P1,#11111111B
CALL DELAY500MS
RETI
END
个人理解(不一定正确):
中断并不是靠软件变成来实现,你可能想到的是调用子程序,代码部分仅仅是靠
定时/计数器0、1控制寄存器TCON
中断允许寄存器IE
中断优先级控制寄存器IP
这些来实现