作者Petrucci99 (拉拉拉)
看板ASM
標題Re: [問題] 8051的中斷問題
時間Fri Oct 7 21:51:37 2011
哇! 真的是太感動了,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
1F:推 WolfLord:那只是用C語法表達CPU會怎麼做而已 :P 10/08 02:51
2F:推 ruemann:XDD 果然被誤會了 10/08 21:51
3F:→ ruemann:同時中斷時,先進入高優先中斷,回主程式,立刻進入低優先 10/08 21:52
4F:→ ruemann:中斷 10/08 21:52
5F:→ ruemann:mcu不會在中斷中再進行另一個中斷 10/08 21:53
6F:推 WolfLord:那也不一定,8080、8085、Z80還有PENTIUM家族以及68K家族 10/08 22:01
7F:→ WolfLord:這些純種CPU(不是MCU)中斷中還能進入NMI,有些甚至還能 10/08 22:02
8F:→ WolfLord:外部排成中斷優先順序以即可不可以重複進入....不過很可 10/08 22:02
9F:→ WolfLord:惜,大部分的MCU的硬體都沒那麼聰明..... 10/08 22:03
10F:→ ksmrt0123:8051有高跟低兩個interrupt priority levels, 10/08 23:35
11F:→ ksmrt0123:low-level interrupt的ISR進行中可被high-level 10/08 23:35
12F:→ ksmrt0123:interrupt 中斷 10/08 23:36
13F:→ Petrucci99:我在書中也是看到ksmart大的描述,所以對於被中斷的中斷 10/09 13:51
14F:→ Petrucci99:在高優先中斷結束後程式會跳回哪邊開始執行? 10/09 13:52
15F:→ Petrucci99:不是很了解Orz.... 10/09 13:52
16F:→ Petrucci99:哈哈,是ksmrt大,拍謝筆誤,囧"a 10/09 13:53
17F:推 WolfLord:那大概是我的ICE有BUG,反正十多年前發現8051中斷只有一 10/09 14:00
18F:→ WolfLord:曾後,我就一直只一一層做設計的方法 :P 10/09 14:01
19F:推 ksmrt0123:會跳回低優先中斷ISR之前被中斷的地方 10/09 23:48
20F:→ Petrucci99:感謝~我來寫個比較好觀察中斷會回到哪的程式來試驗一下 10/10 22:03