解決了...感謝有看的人

看板ASM (組合語言)作者 (大鈞)時間17年前 (2007/11/15 18:20), 編輯推噓2(203)
留言5則, 2人參與, 最新討論串1/1
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
剛剛的初步思考以後..是不是我在ORG 00H跳到START後
11/15 23:52, 1F

11/15 23:53, , 2F
沒有把START用ORG 30H讓他從30H開始存指令跳過中斷點
11/15 23:53, 2F

11/15 23:54, , 3F
我在想是不是主程式存到03H外部中斷的地方導致出錯...
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
文章代碼(AID): #17F1rro0 (ASM)
文章代碼(AID): #17F1rro0 (ASM)