52单片机的外部中断和定时器中断同时的问题

我想让我的timer2一直运行,而不被外部中断0影响,我就设置了PT2=1;高优先级,但程序的timer2不能正常运行,timer2的工作方式为自动重装,迷惑中,或者别的方法。
主程序是
EA = 1; //开总中断
EX0 = 1; //使能外部中断
ET0=1; //开中断
IT0 = 1; //指定外部中断0下降沿触发,INT0 (P3.2)
TMOD=0x01;//定时器0工作方式2,TH0是重装值,TL0是初值
TR0=0;
PT2=1;
PT0=0;

这个好办,我帮你
一. timer2中断处理时,你不能处理太多事,占用太长时间,尽量短,否则将出问题。
二. 单独试验一下timer2,里面作最简单的处理,比如让某个灯翻转,便于观察是否正常,你的中断时间较短,需要用示波器观察才行。
三. 单独试验一下外部中断,是否有效。
四. 上面没问题了,再往下进行,把外部中断优先级设低,timer2优先级设高,中断后加入一个死循环,目的是看看进入外部中断后,定时器中断还能不能进入。
五. 若可以进入,没问题,再往timer2中断里加东西,恢复外部中断程序。
这样出现问题就知道到哪找解决办法了。
祝你顺利!
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-08-06
可以考虑进TIMER2中断时关中断,等中断执行完开中断
第2个回答  2012-04-26
你定时器0工作方式应该是方式1,TMOD=0x02;//才是方式2。
第3个回答  2010-08-06
是89s52吗?

优先级一般不调 单片不是靠改变优先级来确定工作顺序的 而是靠关闭打开允许控制位

timer工作在自动重装 是因为你吧他的工作方式设成2了
tmod的设置不对

领补充一点 和你的问题无关也有关 中断子程序中的程序运行时间要短才不会出错
第4个回答  2010-08-07
#include<reg51.h>
sbit P20=P2^0;
sbit P22=P2^2;
sbit P24=P2^4;
sbit P25=P2^5;
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P21=P2^1;
sbit P23=P2^3;
sbit P32=P3^2;
int a=0;

int tab[]={ 0x28,0x12,0x28,0x12};

void delay(unsigned int i)
{
while(--i)
{;}
}

void init0(void)
{
EA=1;
EX0=1;
IE0=1;
IT0=1;
//PX0=1;
}

void init(void)
{
EA=1;
EX1=1;
IE1=1;
IT1=1;
PX1=1;
}

void tiem0(void)
{
EA=1;
// TMOD=0x01;
TR0=1;
ET0=1;
TF0=1;
PT0=1;

}

main()
{
while(1)
{

P2=0x3a;

if(P32==0)
{
// a=a+1;
// while(1)
// {

init0();
// P2=tab[a];
// if(P32==0) break;
// }
}

if(P10==1)
{

tiem0();

}

if(P11==1)
{

init();
}

}

}

void IN_0(void) interrupt 0
{
a++;
while(1)
//while(P32==0)
{ //int a=0;
// a++;
P2=tab[a];
delay(1000);
if(P32==1) break;
}

}
void IN_1(void) interrupt 2
{
// while(P11==1)
while(1)
{
P25=0;
if(P11==0) break;

}

}

void t0(void) interrupt 1
{
while(1)
//while(P10==1)
{
P24=0;
if(P10==0) break;
}

}

52单片机的外部中断和定时器中断同时的问题
一. timer2中断处理时,你不能处理太多事,占用太长时间,尽量短,否则将出问题。二. 单独试验一下timer2,里面作最简单的处理,比如让某个灯翻转,便于观察是否正常,你的中断时间较短,需要用示波器观察才行。三. 单独试验一下外部中断,是否有效。四. 上面没问题了,再往下进行,把外部中断优先级...

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

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

51单片机外部中断和定时器中断都开了,进入外部中断后,将外部中断关掉...
正解就是:把定时器中断设置为高优先级,把外部中断设置为低优先级。

51单片机定时器中断和外部中断可不可以同时进行
当然可以同时进行了。还可以根据中断的重要程序,设置一个为优先级。就是把所有的中断都打开,也是可以同时进行的。

用51单片机的外部中断0测脉冲,用定时器\/计数器0定时中断,还有串口中断...
中断有优先级的,默认优先级情况是 外部优先级大于定时,定时优先级大于串口。就是说 如果 外部和定时同时有中断的时候,会优先去处理外部中断,处理完外部中断后,再来处理定时中断。优先级也可以设置的,有专门的寄存器控制,能让 串口优先级最大,外部中断优先级最小 ...

51单片机外部中断疑问
才会进入中断函数。总的来说,就是不会一直在中断里,就算是低电平触发,这次中断完成后,也要至少再执行一条才会进入中断,也就是你的问题,在这个很短的时间内单片机又可以执行其他语句。一个类似的问题,你可以看看 http:\/\/zhidao.baidu.com\/question\/475259582?&oldq=1 ...

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

单片机的定时器和外部中断在同一个引脚上 可以同时使用吗
如果你是使用定时器的计数功能的话。那可以使用计数器功能,此时外部中断就用不了。其实如果使用计数功能的话,外断中断也能做得到。每次进放中断,中断函数的变量自动加1就行了。如果是使用定时器的定时功能的话,那倒不会影响外部中断引脚的影响。其实如果你非得使用计数器和外部中断一起用的话,那也...

51单片机外部中断问题
如果是下降沿触发(it0=1)就只会执行一次中断程序。电平触发(it0=1)的话每次执行完中断里面的程序(只要不关闭中断)就又跳进中断里去了,不断的循环执行。循环的频率跟晶振有关,晶振的频率直接关系到单片机执行指令的速度。频率越高速度也就越快。

相似回答