单片机 定时器中断

请高手教教我,以下程序,从哪条语句开始中断,从哪条语句打开定时器,进入中断函数的前一条语句是哪条,在哪条语句中断结束?多谢

#include<reg52.h>
void main()
{
EA=1; //打开中断总开关
ET0=1; //打开1号中断
TR0=1; //打开定时器
TMOD=1; //设置为16位定时器
{程序的其余部分…}
}

void timer0() interrupt 1 //中断函数
{
TH0=(65536-50000)/256; //设置高8位寄存器
TL0=(65536-50000)%256; //设置低8位寄存器
i++;
}

第1个回答  2011-06-30
很久没用C51了,记不清了,如果你弄过汇编会更明白,以下请参考:
这断C51程序被编译成汇编后,程序一般是从首地址开始向下执行的,51 mcu的中断入口在最前面,当打开中断时,就进入中断函数,处理完后,在返回接着向下执行。
C51只是更高级的编程语言,方便复杂程序编写,如果想了解细节,还是建议看一看51 mcu的架构(哈弗架构),学习一些汇编的方法就明白了。
第2个回答  2011-06-30
{程序的其余部分…}
这里的某个地方开始中断,进入中断函数也是在这里开始中断时,前一条也是,所以看不出。
TR0=1; //打开定时器。这条打开定时器,都注释了
I++; i加1 后结束中断本回答被提问者采纳
第3个回答  2011-06-30
把while(1)里面的去掉

在timer0里面把 P10=0;改成

P10 = ~ P10;

如果还看不出来,把定时的时间加长。

=================
因为你这样,定时器中断刚刚把LED置0,while里面就把LED置1了。太快了,肉眼看不见