单片机 外部中断0停止不了定时器的任务

按理说,外部中断0的优先级比定时器高,怎么会中断不了,要等定时器执行完才响应外部中断,可能是我哪里写的不对,求大神写个例子,用外部中断来停止定时器,外部中断退出后继续执行定时器剩下的任务,谢谢

不知道你整体控制思路,如果只是需要在外边中断0中停止定时器,可以设置IP寄存器使外部中断0最高优先级,在引用REG51.H头文件时可直接PX0=1;引用其他头文件时请查看头文件内的定义,而后在外部中断INT0的中断函数加入一句TR0=0;就关闭了T0,中断函数后面加一句TR0=1;就重新启动了T0。示意如下:
void IN_T0(void) interrupt 0
{
TR0=0;
****
}
TR0=1;追问

谢谢,以我现在的能力还无从下手,PX0=1;加在这个文件头部吗

追答

不是的,只要将PX0=1加在主函数下的住循环前就可以了,查看头文件的目的就是要核实一下PX0的书写格式及大小写格式,就是这一句:sbit PX0 = 0xB8;如同I/O接口编程时有的写 P01=1有效,而有的写P0_1=1有效,这就与头文件的定义有关,虽然现在使用的头文件各种设置都是固定的,引用例程时都不会出现问题,但编程时为了心中有数,在用库定义符号时核实一下心理放心些。

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-09-30
同级中断必须要等到其他中断服务完成后才能进入中断服务的。只有高级中断才能打断低级中断的进程。因此,你可以设置外部中断0位高级中断,即PX0=1。追问

void Outer0_Init()
{
EX0 = 1;
IT0 = 1;
PX0 = 1;
}
void Timer0_Init(void)
{
TMOD &= 0xf0;
TMOD |= 0x01;
AUXR |= 0XC0;
IP |= 0x02;
TR0=1;
ET0=1;
TL0 = 0x5C;
TH0 = 0xF7;
}
void Outer0() interrupt 0
{
if( cdxsh==1 || bzhw1==0 )
{
MOTOR_GO_STOP;
}
}
void Timer_0(void) interrupt 1
{
TH0 = 0xA9; //1MS定时
TL0 = 0x9A;
xj_count++;
}

本回答被网友采纳

单片机 外部中断0不能立刻停止正在在执行的任务?
同级中断必须要等到其他中断服务完成后才能进入中断服务的。只有高级中断才能打断低级中断的进程。因此,你可以设置外部中断0位高级中断,即PX0=1。

51单片机,定时器中断和外部中断冲突了,外部中断后再也进不入定时中断...
外部中断里不要做太多事情吧。简单置个标志位之类的,在主函数里轮询标志位去执行代码。在中断里做太多事情,是一大忌。

单片机外部中断进行时,定时器会停止工作吗?如果在工作,进入外部中断...
单片机外部中断进行时,定时器会停止工作吗?——不会。定时器仍然会默默运行。如果在工作,进入外部中断后对定时器重新赋值,定时器会按新值继续定时吗?——是的,会按照新值重新工作。但是假如在这个期间定时器已经溢出产生了中断源,那么在退出外部中断处理程序之后,会很快进去定时器中断服务程序。外部...

51单片机,如果外部中断0被触发,定时器0、外部中断1、定时器1还能工作么...
如果外部中断1被触发,CPU执行X1的中断程序,这时,定时器1和定时器0仍然在做自己的工作,并没有停止工作。楼主的问题,可能是问CPU的,当CPU在执行外部中断1的程序期间,还能不能接受T1、T0的中断申请。答案是:不能。只有高级的,可以中断低级的。楼主已经说它们是同一级别的中断源,那么它们就是不能...

判断:定时器t0中断可以被外部中断0中断?
“定时器T0中断可以被外部中断0中断。”这句话是正确的。定时器中断是由单片机中的定时器溢出而申请的,有两个定时器T0和T1:TF0:定时器T0溢出中断请求。当定时器TO产生溢出时,TO中断请求标志TF0置1,请求中断处理。TF1:定时器T1溢出中断请求。当定时器Tl产生溢出时,T1中断请求标志TF1置1,请求...

51单片机外部中断和定时器中断都开了,进入外部中断后,将外部中断关掉...
执行中断服务程序这段时间),外部中断都被关闭了,定时器为什么不工作?? 求正解 勿懂勿进 谢谢 我想你这样做带有实验性质,因为正常情况下没必要这么处理。你需要一个正解,这么爱学习的人,不给不好意思。正解就是:把定时器中断设置为高优先级,把外部中断设置为低优先级。

单片机外部中断和定时器冲突了?帮忙看看程序~外部中断有几率使定时器...
首先你的Timer1是模式0(13位计数器),除非用很低频率的外部晶体,否则Timer1的定时时间根本就不是秒级。其次你没有贴出 timerun 标志被修改的位置。如果你怀疑Timer1没有持续工作,可以暂时去掉if(timerun==1)条件,观察数码管是否每次都显示变化的值。顺便说一句你的Timer0中断里面的语句效率低下...

51单片机外部中断0的问题
可以设置),比如下降沿触发、低电平触发.如果是下降沿触发,长按只能执行一次,因为只有一次下降沿嘛。而低电平触发的话,其实还是跟你中断服务程序的内容有关,一般是可以跳出中断,执行多次中断的;除非你在中断服务程序里面特意让它检测按键,直到按键释放才执行完,这样肯定就要松手才能跳出来了。

51单片机外部中断0为何不能打断外部中断1???
回答都是错的。网友说:外部中断0优先级高于外部中断1 同优先级情况下,外部中断0还是会比的外部中断1更优先;都是不对的。。你没有设置中断短优先级,那么,它们,就都是低级的。要想嵌套,必须有高、低两个级别。同样的优先级,是不能出现中断嵌套的。只有高级的,才能中断低级的。

52单片机的外部中断和定时器中断同时的问题
三. 单独试验一下外部中断,是否有效。四. 上面没问题了,再往下进行,把外部中断优先级设低,timer2优先级设高,中断后加入一个死循环,目的是看看进入外部中断后,定时器中断还能不能进入。五. 若可以进入,没问题,再往timer2中断里加东西,恢复外部中断程序。这样出现问题就知道到哪找解决办法了。...

相似回答