标题:
请指点下这个中断程序哪里错了?
[打印本页]
作者:
zjhldg
时间:
2013-11-17 22:00
标题:
请指点下这个中断程序哪里错了?
目的:计划用INT1中断发生时,P1.5输出约高电平,延时约0.5秒后,P1.5 输出低电平,P1.6再输出高电平,载延时约0.5秒后,P1.6输出低电平;
程序如下:
但实测后发现奇怪的现象:用示波器接到P1.5, P1.6,中断发生时,居然出现了2次上述过程,即 P1.5输出约高电平,延时约0.5秒后,P1.5 输出低电平,P1.6再输出高电平,载延时约0.5秒后,P1.6输出低电平 ; 按道理到此应该结束了,但事实上紧接着 又出现了P1.5输出约高电平,延时约0.5秒后,P1.5 输出低电平,P1.6再输出高电平,载延时约0.5秒后,P1.6输出低电平 ;
想了半天想不出为什么,请指点下哪里错了?多谢
org 0000h
ljmp start
org 0013h
ljmp ext1
org 0030h
start: ; 主程序开始
setb ea ; cpu开中断
setb ex1 ; 允许外部中断1,P3.3引脚,即INT1
setb it1 ; 设置外部中断1触发方式为跳变触发
lcall dis_0 ; 调用初始输出状态子程序
ajmp $ ; 等待按键发出中断申请
ext1: clr ea ; 进入中断,先关闭中断
lcall dis_key ; 调用输出子程序
pass: setb ea ; 返回主程序之前先开中断
reti ; 中断返回指令,
dis_0: clr p1.5 ; 初始输出子程序
clr p1.6
ret
dis_key: lcall D_100MS
SETB p1.5 ; 中断后输出子程序
lcall D_100MS
lcall D_100MS
lcall D_100MS
lcall D_100MS
lcall D_100MS
lcall D_100MS
lcall D_100MS
CLR p1.5
lcall D_100MS
lcall D_100MS
lcall D_100MS
lcall D_100MS
lcall D_100MS
lcall D_100MS
lcall D_100MS
lcall D_100MS
lcall D_100MS
SETB p1.6
lcall D_100MS
lcall D_100MS
lcall D_100MS
lcall D_100MS
lcall D_100MS
lcall D_100MS
CLR p1.6
next: ret
D_100MS: MOV R3,#100
CALL D_1ms
RET
D_1MS: MOV R1,#10
DL1: MOV R0,#50
DJNZ R0,$
DJNZ R1,DL1
DJNZ R3,D_1MS
RET
end
作者:
zjhldg
时间:
2013-11-18 10:46
希望的脉冲示意图和实际运行结果示意图
未标题-2 复制.jpg
(43.73 KB, 下载次数: 177)
下载附件
2013-11-18 10:45 上传
作者:
ahshmj
时间:
2013-11-19 10:13
试了一下,程序是对的。
中断触发信号是不是用类似按键的或开关类的产生的?如果是,会不会产生误动作或抖动?需要和按键一样的去除抖动和误动作。
其次,电源有没有干扰毛刺等?
作者:
ahshmj
时间:
2013-11-19 10:13
试了一下,程序是对的。
中断触发信号是不是用类似按键的或开关类的产生的?如果是,会不会产生误动作或抖动?需要和按键一样的去除抖动和误动作。
其次,电源有没有干扰毛刺等?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1