Re: [請益] 89C51外部中斷小疑問
: 1. 中斷時,R0~R7最好和一般的程式用的R0~R7分開(利用切BANK達成)
: 2. 試試看,Good Luck!
參考您的說法,將CODE改寫:
ORG 00H
JMP INITIAL
ORG 03H
JMP SETP2
INITIAL:
MOV IE,#10000001B
MOV IP,#00000001B
SETB IT0
JMP START
START:
CLR RS0
CLR RS1
MOV P1,#00000000B
CALL DELAY
MOV P1,#11111111B
CALL DELAY
JMP START
SETP2:
SETB RS0
CLR RS1
CLR IE0
MOV P1,#10101010B
CALL DELAY
MOV P1,#01010101B
CALL DELAY
MOV P1,#10101010B
CALL DELAY
MOV P1,#01010101B
CALL DELAY
MOV P1,#10101010B
CALL DELAY
MOV P1,#01010101B
CALL DELAY
CLR RS0
CLR RS1
RETI
DELAY:
MOV R5,#10
D0: MOV R6,#200
D1: MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,D0
RET
END
發現:
若只針對BANK做切換,仍然會發生問題,但於進入中斷後針對IE0狀態暫存器做
歸零,則可正確的進入REG 03H中斷並於結束後返回被中斷前的位址,故推測進
入中斷後,晶片並未自己將狀態暫存器歸零,要自己手動去做,這點跟參考資料
所述的有點差異。
另外,進入REG 03H後,應該只會交互閃三次:
第一次:01010101->10101010
第二次:01010101->10101010
第三次:01010101->10101010
但是實際上卻交互閃六次:
第一次:01010101->10101010
第二次:01010101->10101010
第三次:01010101->10101010
第四次:01010101->10101010
第五次:01010101->10101010
第六次:01010101->10101010
其中閃LED我是直接採用將值MOV至Port中,並未透過其他暫存器,對於為什麼發生
這個問題,我還是沒有頭緒。
※ 編輯: icetofux 來自: 203.67.181.137 (04/17 17:57)
推
04/17 18:41, , 1F
04/17 18:41, 1F
→
04/17 22:58, , 2F
04/17 22:58, 2F
→
04/17 22:58, , 3F
04/17 22:58, 3F
→
04/17 22:59, , 4F
04/17 22:59, 4F
※ 編輯: icetofux 來自: 218.167.86.219 (04/17 23:00)
推
04/17 23:36, , 5F
04/17 23:36, 5F
→
04/17 23:39, , 6F
04/17 23:39, 6F
推
04/18 00:02, , 7F
04/18 00:02, 7F
推
04/18 00:30, , 8F
04/18 00:30, 8F
→
04/18 00:31, , 9F
04/18 00:31, 9F
→
04/18 00:31, , 10F
04/18 00:31, 10F
→
04/18 09:01, , 11F
04/18 09:01, 11F
→
04/18 09:02, , 12F
04/18 09:02, 12F
→
04/18 09:03, , 13F
04/18 09:03, 13F
討論串 (同標題文章)
完整討論串 (本文為第 3 之 3 篇):
ASM 近期熱門文章
PTT數位生活區 即時熱門文章