作者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