汇编语言实现简易交通灯(含中断)
运用单片机的定时器及外部中断系统,设计具有应急通行功能的简易交通灯应用
功能: 交通灯运行状态有六种: 按照简单的交通路口规则,正常情况有四种状态不停轮换: 状态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 这些来实现
