作者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