中断服务程序可以有两个么 单片机
就是在一个内部中断里面我可写入两个服务程序么,就是计时器计20次一个服务,计40次一个服务。或者是我可以写两个内部中断么?两个内部中断怎么写啊?我是刚刚学单片机的求助...
就是在一个内部中断里面我可写入两个服务程序么,就是计时器计20次一个服务,计40次一个服务。或者是我可以写两个内部中断么? 两个内部中断怎么写啊? 我是刚刚学单片机的 求助
展开
3个回答
展开全部
同一个中断,不可能有两个中断服务程序,从物理上讲,一个中断只能对应一个中断向量,一个中断向量,怎么可能有两个中断服务程序呢?
你可以在一个中断服务程序里用条件进行关断,到底是20次的服务,还是40次的服务,比如:
void ISR_Timer(void) interrupt 1
{
if(ServiceCode == SER20)
{
//---执行20次的功能
}
else if(ServiceCode == SER40)
{
//---执行40次的功能
}
}
你也可以用两个变量来做,比如:
unsigned char Timer_20 = 0,Timer_40 = 0;
void ISR_Timer(void) interrupt 1
{
Timer_20 ++;
Timer_40 ++;
if(Timer_20 == 20)
{
Timer_20 = 0;
//---执行20次的功能
}
if(Timer_40 == 40)
{
Timer_40 = 0;
//---执行40次的功能
}
}
展开全部
用一个标示变量就行
比如这个变量初始化为1 ——flag
计时器还是20次一个服务,
这个服务有两个功能
中断处理函数根据flag判断,如果是1,switch,就执行20次的中断服务,如果是-1,就执行40次的终端服务和执行20次的中断服务
执行完之后
每次进入中断给变量乘-1
比如这个变量初始化为1 ——flag
计时器还是20次一个服务,
这个服务有两个功能
中断处理函数根据flag判断,如果是1,switch,就执行20次的中断服务,如果是-1,就执行40次的终端服务和执行20次的中断服务
执行完之后
每次进入中断给变量乘-1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果是很短时间的话(不能超过定时时间,如果超过了,那么定时器就不准确了,一次的中断还没结束又产生另外一次的中断),100个都没问题,两个中断是不能同时执行的,因为只有一个程序指针,你程序运行到哪里,程序指针就指向下一条程序,如果两个中断同时发生了,那程序指针指向哪里呢????因此有了中断优先级
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询