52单片机的外部中断和定时器中断同时的问题 20
我想让我的timer2一直运行,而不被外部中断0影响,我就设置了PT2=1;高优先级,但程序的timer2不能正常运行,timer2的工作方式为自动重装,迷惑中,或者别的...
我想让我的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; 展开
主程序是
EA = 1; //开总中断
EX0 = 1; //使能外部中断
ET0=1; //开中断
IT0 = 1; //指定外部中断0下降沿触发,INT0 (P3.2)
TMOD=0x01;//定时器0工作方式2,TH0是重装值,TL0是初值
TR0=0;
PT2=1;
PT0=0; 展开
5个回答
展开全部
这个好办,我帮你
一. timer2中断处理时,你不能处理太多事,占用太长时间,尽量短,否则将出问题。
二. 单独试验一下timer2,里面作最简单的处理,比如让某个灯翻转,便于观察是否正常,你的中断时间较短,需要用示波器观察才行。
三. 单独试验一下外部中断,是否有效。
四. 上面没问题了,再往下进行,把外部中断优先级设低,timer2优先级设高,中断后加入一个死循环,目的是看看进入外部中断后,定时器中断还能不能进入。
五. 若可以进入,没问题,再往timer2中断里加东西,恢复外部中断程序。
这样出现问题就知道到哪找解决办法了。
祝你顺利!
一. timer2中断处理时,你不能处理太多事,占用太长时间,尽量短,否则将出问题。
二. 单独试验一下timer2,里面作最简单的处理,比如让某个灯翻转,便于观察是否正常,你的中断时间较短,需要用示波器观察才行。
三. 单独试验一下外部中断,是否有效。
四. 上面没问题了,再往下进行,把外部中断优先级设低,timer2优先级设高,中断后加入一个死循环,目的是看看进入外部中断后,定时器中断还能不能进入。
五. 若可以进入,没问题,再往timer2中断里加东西,恢复外部中断程序。
这样出现问题就知道到哪找解决办法了。
祝你顺利!
展开全部
可以考虑进TIMER2中断时关中断,等中断执行完开中断
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你定时器0工作方式应该是方式1,TMOD=0x02;//才是方式2。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是89s52吗?
优先级一般不调 单片不是靠改变优先级来确定工作顺序的 而是靠关闭打开允许控制位
timer工作在自动重装 是因为你吧他的工作方式设成2了
tmod的设置不对
领补充一点 和你的问题无关也有关 中断子程序中的程序运行时间要短才不会出错
优先级一般不调 单片不是靠改变优先级来确定工作顺序的 而是靠关闭打开允许控制位
timer工作在自动重装 是因为你吧他的工作方式设成2了
tmod的设置不对
领补充一点 和你的问题无关也有关 中断子程序中的程序运行时间要短才不会出错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
}
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;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询