1
本帖最后由 ai469406952 于 2012-10-30 22:26 编辑
用89C52芯片弄的简易交通灯汇编文件,带中断(外部中断0)。下面是汇编段:
另附件为ASM文件。QQ邮箱:469406952@qq.com
问题:调试时,没按下中断,灯正常跳转。
当有中断时,两红灯有时亮5秒,有时亮8秒,甚至10秒。为何?
当把触发方式改为电平触发时(下面语句中加粗的那一句),可以正确运行。为何?
;***********************************************
;带中断的简易交通灯控制电路
; 东西方向 南北方向
; 红 黄 绿 红 黄 绿
;P1 : # # # # # # # #
;***********************************************
;
ORG 0000H
AJMP MAIN
ORG 0003H ;中断入口
AJMP INSER
ORG 0030H ;主程序入口
MAIN:SETB EX0 ;------------------------
SETB IT0 ;打开外部中断0,下降沿触发(改为CLR IT0 电平触发可以正确运行,为何
;下降沿触发不行?)
SETB EA ;------------------------
MOV P1,#0DDH
ACALL DELAY3 ;两红灯亮3S
START:MOV P1,#0D7H
ACALL DELAY5 ;东西绿,南北红,5S
MOV R2,#5 ;-----------------------
D1: MOV P1,#0DBH ;
ACALL DELAY02 ;东西黄闪5次,南北红保持
MOV P1,#0DFH ;
ACALL DELAY02 ;
DJNZ R2,D1 ;-----------------------
MOV P1,#0DDH
ACALL DELAY02 ;两红灯亮0.2S
MOV P1,#7DH ;
ACALL DELAY5 ;东西红,南北绿,5S
MOV R1,#5 ;-----------------------
D2: MOV P1,#0BDH ;
ACALL DELAY02 ;南北黄闪5次,东西红保持
MOV P1,#0FDH ;
ACALL DELAY02 ;
DJNZ R1,D2 ;-----------------------
MOV P1,#0DDH ;
ACALL DELAY02 ;两红灯亮0.2S
AJMP START ;返回,START
ORG 00A0H ;中断程序入口
INSER:CLR EA ;关中断
PUSH P1 ;------------
PUSH 03H ;
PUSH 05H ;P1口状态以及寄存器入栈
PUSH 06H ;
PUSH 07H ;------------
SETB EA ;开中断
MOV P1,#0DDH ;
ACALL DELAY5 ;两红灯5S
CLR EA ;关中断
POP 07H ;------------
POP 06H ;
POP 05H ;P1口状态以及寄存器出栈
POP 03H ;
POP P1 ;------------
SETB EA ;开中断
REti ;返回
DELAY02:MOV R7,#2 ;延时0.2S
D3: MOV R6,#200
D4: MOV R5,#250
D5: DJNZ R5,D5
DJNZ R6,D4
DJNZ R7,D3
RET
DELAY3:MOV R4,#15 ;延时3S
D6: ACALL DELAY02
DJNZ R4,D6
RET
DELAY5:MOV R3,#25 ;延时5S
D7: ACALL DELAY02
DJNZ R3,D7
RET
END
|
-
-
6-2.zip
889 Bytes
, 下载次数: 4
这个是ASM文件
|