永发信息网

定时器在中断服务程序运行时能不能被自己中断?

答案:2  悬赏:0  手机版
解决时间 2021-01-27 09:21
  • 提问者网友:未信
  • 2021-01-26 19:13
如题,我自己也做过测试,发现即使打开中断也不能被自己的中断源中断....
请问情况确实是这样吗?
我的测试程序如下:
#include
#define _TH0_TL0_ (65536 - 50000)
#define HI (_TH0_TL0_ / 256) //给高8位赋值
#define LO (_TH0_TL0_ % 256) //给低8位赋值

void Timer0Init(void) //初始化定时器0程序
{
TMOD = 0x01; //设置模式1 定时器0 工作方式0

TH0 =HI; //给TH0,TL0赋初始值
TL0 =LO;

TR0 = 1; //启动定时器0
ET0 = 1; //定时器中断开
EA = 1; //总中断开
}

void main(void)//主函数
{
int i;
Timer0Init();//初始化定时器0
while(1)
{
for(i=0;i<65525;i++);//没什么,等待而已,加这句话方便调试
}
}

void Timer0(void) interrupt 1 using 2 //定时器0中断服务程序
{
static unsigned char count = 0; //定义静态变量count
TR0 = 0; //以下调整出栈入栈的时间误差
TL0 += (_TH0_TL0_ + 9) % 256;
TH0 += (_TH0_TL0_ + 9) / 256 + (char)CY;
TR0 = 1;

count++;
//TF0=1;
if(count>=20)
{;

P0=~P0;//P0接8个LED
}
else while(1);//打算让中断服务程序停在这里,等待定时器再次
//计满溢出(保存现场)进入中断,count++,直至20次后LED灯取反...

}

回一楼的朋友,如果计数器不溢出,我的中断服务程序会停留在while(1)循环里面。LED灯不会变化(有足够的延时让人眼分辨得出)。
最佳答案
  • 五星知识达人网友:痴妹与他
  • 2021-01-26 19:24
应该可以的吧 ,只要计数溢出了就会中断。但是你的中断程序执行时很快的,计数还没溢出怎么中断啊
全部回答
  • 1楼网友:荒野風
  • 2021-01-26 20:31
定时器溢出并不一定会进入中断服务程序,还需要etn=1才能进入中断服务程序。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯