Re: [問題] 8051的中斷問題

看板ASM (組合語言)作者 (拉拉拉)時間13年前 (2011/10/07 21:51), 編輯推噓5(5015)
留言20則, 4人參與, 最新討論串2/2 (看更多)
哇! 真的是太感動了,Wolf大真是個能力強又熱心的人.跪拜Orz 這禮拜我想該來買本組合語言的書來看一下了 不然每次看板上的問題或回覆都有種天書的感覺 囧"a 不過還是很謝謝Wolf大的解答~等我買了書研究一下再回來細細品嘗~~ 另外 : if(SerialISR){ : SerialISR(); : TimerISR(); : }else{ : TimerISR(); : SerialISR(); : } 以上是要寫在時間副程式嗎? 我的理解是下面的結構 void timer(void) interrupt 3 { if(RI) { SerialISR();//在這寫好把SBUF fetch到一個資料陣列裡的指令 TimerISR(); //在這個副程式中執行PWM? } else TimerISR(); RI=0; TI=0; } 最後有位版有回覆說:中斷結束會回到主程式被中斷的位置 那如果"低優先中斷的副程式"被"高優先中斷副程式"給中斷了 在"高優先中斷副程式"結束後,程式會回到"低優先中斷的副程式"繼續執行? 還是直接回到"主程式"被中斷的位置呢? -- 感謝大家~~這裡真是個學習的好地方XD -- ※ 引述《WolfLord (呆呆小狼)》之銘言: : 人腦編譯一下嚕....用這樣的ASM替代C馬應該就不會 : 影響20K以下的PWM了吧?(@12MHZ) : SerISR: ; void SerISR(void) interrupt SERIAL { : jnb RI,Eserisr ;2 if(RI){ : mov A,#S ;1 S[n]=SBUF; : add A,n ;1 : mov R1,A ;1 : mov @R1,SBUF ;2 : inc n ;1 n++; : anl n,#0FEH ;2 if(n>2){n=0;} : setb ok ;1 ok=1; : Eserisr: ; } : anl SCON,#0EFH ;2 RI=0;TI=0; : reti ;2 } : ;================================================================== : ;Recived 15 Cycles Non-recived 5 Cycles : : 2.若在串列中斷執行時間裡計時中斷被觸發了,程式執行的順序會是 : if(SerialISR){ : SerialISR(); : TimerISR(); : }else{ : TimerISR(); : SerialISR(); : } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 175.181.142.73

10/08 02:51, , 1F
那只是用C語法表達CPU會怎麼做而已 :P
10/08 02:51, 1F

10/08 21:51, , 2F
XDD 果然被誤會了
10/08 21:51, 2F

10/08 21:52, , 3F
同時中斷時,先進入高優先中斷,回主程式,立刻進入低優先
10/08 21:52, 3F

10/08 21:52, , 4F
中斷
10/08 21:52, 4F

10/08 21:53, , 5F
mcu不會在中斷中再進行另一個中斷
10/08 21:53, 5F

10/08 22:01, , 6F
那也不一定,8080、8085、Z80還有PENTIUM家族以及68K家族
10/08 22:01, 6F

10/08 22:02, , 7F
這些純種CPU(不是MCU)中斷中還能進入NMI,有些甚至還能
10/08 22:02, 7F

10/08 22:02, , 8F
外部排成中斷優先順序以即可不可以重複進入....不過很可
10/08 22:02, 8F

10/08 22:03, , 9F
惜,大部分的MCU的硬體都沒那麼聰明.....
10/08 22:03, 9F

10/08 23:35, , 10F
8051有高跟低兩個interrupt priority levels,
10/08 23:35, 10F

10/08 23:35, , 11F
low-level interrupt的ISR進行中可被high-level
10/08 23:35, 11F

10/08 23:36, , 12F
interrupt 中斷
10/08 23:36, 12F

10/09 13:51, , 13F
我在書中也是看到ksmart大的描述,所以對於被中斷的中斷
10/09 13:51, 13F

10/09 13:52, , 14F
在高優先中斷結束後程式會跳回哪邊開始執行?
10/09 13:52, 14F

10/09 13:52, , 15F
不是很了解Orz....
10/09 13:52, 15F

10/09 13:53, , 16F
哈哈,是ksmrt大,拍謝筆誤,囧"a
10/09 13:53, 16F

10/09 14:00, , 17F
那大概是我的ICE有BUG,反正十多年前發現8051中斷只有一
10/09 14:00, 17F

10/09 14:01, , 18F
曾後,我就一直只一一層做設計的方法 :P
10/09 14:01, 18F

10/09 23:48, , 19F
會跳回低優先中斷ISR之前被中斷的地方
10/09 23:48, 19F

10/10 22:03, , 20F
感謝~我來寫個比較好觀察中斷會回到哪的程式來試驗一下
10/10 22:03, 20F
文章代碼(AID): #1EZmFir7 (ASM)
文章代碼(AID): #1EZmFir7 (ASM)