解決了...感謝有看的人
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
→
11/15 23:52, , 1F
11/15 23:52, 1F
→
11/15 23:53, , 2F
11/15 23:53, 2F
→
11/15 23:54, , 3F
11/15 23:54, 3F
※ 編輯: tea1116 來自: 218.175.191.120 (11/17 00:51)
※ 編輯: tea1116 來自: 218.175.191.120 (11/17 00:52)
推
11/17 02:31, , 4F
11/17 02:31, 4F
推
11/17 11:22, , 5F
11/17 11:22, 5F
ASM 近期熱門文章
PTT數位生活區 即時熱門文章