作者tea1116 (大钧)
看板ASM
标题[问题] 上篇外部中断有错的CODE
时间Thu Nov 15 18:20:34 2007
ORG 00H
AJMP START
ORG 13H ;中断进入位置
LJMP INT0
START: SETB IT1 ;使用负缘触发
SETB EX1 ;允许外部中断INT1
LOOP:
CLR EA
SETB P1.1
MOV P2,
#11110000B ;四个灯亮四个不亮
MOV A,
#00000001B ;判断中断是否做完的旗标
LCALL DELAY2
SETB EA ;允许外部中断
CJNE A,
#00000000B,$ ;A为零代表外部中断结束
CLR EA ;禁止外部中断
LJMP LOOP
INT0:
MOV R6,#80
S3: MOV R7,#92
DJNZ R7,$
DJNZ R6,S3
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1 ;送低电位给电脑做定位
SETB P1.1
MOV A,
#00000000B ;做完延迟以後将判断中断是否
结束旗标清楚
CLR IE1
RETI
DELAY2:
S1: MOV R6,#20
S2: MOV R7,#100
DJNZ R7,$
DJNZ R6,S2
MOV R7,#54
DJNZ R7,$ ;4170us
RET
END
问题点:
1.我已经可以做到就是我主程式亮灯的部份作完以後,然後允许外部中断
接着等待中断结束後~立刻禁止中断要求,然後跑回主程式做亮灯动作
2.可是当我在主程式增加DELAY的时间以後,他会影响到我中断副程式的运作
结果....
以上面的CODE例来说~假如我主程式是花的时间是4170us
那我中断做delay然後CLR P1.1所能做的延迟大概只能到13389uS
而当我主程式是花的时间是1000us
那我中断做DELAY所能做正确的延迟时间大概是11400us而已
之後再多加中断副程式延迟的时间就会有错误
可是找遍书都没找到我的问题点在哪边....
可以请好心人帮帮我吗.....
p.s中断讯号是这样子的 108us的高电位--->16332us的低电位
是一个一直重复的方波...
因为之後我要加上串列传输收5个byte的资料时间(至少4170us)
所以我没办法减少主程式所要花的时间,照理说应该主程式做多
久都不会影响中断副程式才对阿?
请问我是否有哪个部份有少了程式码或是有疏漏的地方呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.127.77.235
1F:→ tea1116:刚刚的初步思考以後..是不是我在ORG 00H跳到START後 11/15 23:52
2F:→ tea1116:没有把START用ORG 30H让他从30H开始存指令跳过中断点 11/15 23:53
3F:→ tea1116:我在想是不是主程式存到03H外部中断的地方导致出错... 11/15 23:54
※ 编辑: tea1116 来自: 218.175.191.120 (11/17 00:51)
※ 编辑: tea1116 来自: 218.175.191.120 (11/17 00:52)
4F:推 ruemann:那……是什麽原因呢?我一直想不出合理的答案 11/17 02:31
5F:推 ruemann:我猜有可能是硬体设置的问题…… 11/17 11:22