本帖最后由 单片机00 于 2010-12-7 20:43 编辑
程序设计要求:
1、使用8个led灯模拟交通灯,编程实现十字路**通灯的变化规律,通行时间为5秒,黄灯时间为1秒,人行灯通行时,闪烁5次,闪烁周期为1秒。
2、应用开关k1手动控制由高到低时,模拟有急救车通过,并使用外部中断实现急救车优先通过的控制,通过时间为1秒。急救车通过时,各方向的灯均为禁行。
下面是我设计的程序,但只能满足要求1,当程序进入外部中断wai时,程序就死这儿了;没有按预期的延时1秒后返回主程序,我想应该是中断嵌套的问题,可不管怎么改都解决不了,请高手们帮忙找找错,先谢了!!!!
org 0
ljmp main
org 0003h
ljmp wai;外部中断入口
org 000bh
ljmp zi;定时器中断入口
org 0030h
main:mov tmod,#1
mov th0,#3ch
mov tl0,#0b0h
mov ie,#83h
setb it0
LOOP1:MOV R7,#5
LOOP2:MOV A,#5BH
MOV P1,A
CLR 7FH
SETB TR0
MOV R6,#10
JNB 7FH,$
MOV A,#0DBH
MOV P1,a
CLR 7FH
MOV R6,#10
JNB 7FH,$
DJNZ R7,LOOP2
MOV A,#0EBH
MOV P1,A
CLR 7FH
MOV R6,#20
JNB 7FH,$
LOOP3:MOV R7,#5
LOOP4:MOV A,#0B5H
MOV P1,a
clr 7fh
mov r6,#10
jnb 7fh,$
mov a,#0bdh
mov p1,a
clr 7fh
mov r6,#10
jnb 7fh,$
djnz r7,loop4
mov a,#0beh
mov p1,a
clr 7fh
mov r6,#20
jnb 7fh,$
ljmp loop1
wai:clr tr0 ;外部中断服务子程序
mov ie,#83h;开中断
mov ip,#02h;设T0为高优先级
mov 30h,r6
mov 31h,r7
mov c,7fh
push acc
push th0
push tl0;前面都为现场保护
mov th0,#3ch
mov tl0,#0b0h
setb tr0 ;
clr 7fh
mov a,#0bbh
mov p1,a
mov r6,#20
jnb 7fh,$
pop tl0
pop th0
pop acc
mov 7fh,c
mov r6,30h
mov r7,31h
mov ip,#01h;
reti
zi:djnz r6,next;定时器中断子程序
setb 7fh
next:mov th0,#3ch
mov tl0,#0b0h
reti
end |