为什么不能进入AT89S52单片机的定时器2中断服务程序?程序在Keil编译没有问题,请高手指点。程序如下:

#include<AT89X52.H>typedefunsignedcharuchar;sbitLED=P1^0;unsignedintj=0;//-----------... #include <AT89X52.H>
typedef unsigned char uchar;

sbit LED=P1^0;
unsigned int j=0;
//-------------------------------------------------------------------------------
void delay_s(unsigned int s) //延时函数,延时s*0.1 秒
{
int x;
int y=100;
for(x=0;x<=s;x++)
{
for(y=0;y<100;y++)
{
unsigned int k=110;
while(k--);
}
}
}
//---------------------------------------------------------------------------------------------------------
void init() //单片机初始化函数
{
T2MOD=0x00;
T2CON=0x00;

//TH2=0x6F; //将定时器2的定时时间40ms
//TL2=0x77;
RCAP2H=0x6F;
RCAP2L=0x77;

EA=1; //开总中断
ET2=1; //使能定时器2中断
TR2=1; //启动定时器2
TF2=0; //清除定时器2溢出标志
EXF2=0; //清定时器2外部中断
PT2=1; //设定定时器2为高优先级中断
}
//-----------------------------------------------------------------------------------------------------------
void T2_timer() interrupt 5 //定时器2中断服务函数
{
int xy=6;
TF2=0; //清除定时器2溢出标志
EXF2=0; //清定时器2外部中断
if(j>=66) //2.65秒
{
j=0;
while(xy--) //LED灯闪烁xy次
{
LED=0;
delay_s(4); //延时0.4s
LED=1;
delay_s(4);
}
}
}
//-------------------------------主函数main()-----------------------------------------------
main()
{
init(); //初始化单片机
while(1);
}
展开
 我来答
ghost4063
2013-06-22 · TA获得超过6522个赞
知道大有可为答主
回答量:2940
采纳率:75%
帮助的人:2780万
展开全部
你的程序能进入中断服务,但是每次进入中断,你没有让变量j递增,所以j的值永远是0,就永远不会让LED闪烁了。
你把程序改成这样:
if(j>=66)
{
....
}else j++;
另外,尽量不要在中断中进行延时,虽然你这里是没有什么影响,但这种写法应该尽量避免。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一万光年MEGn0
2013-06-22 · TA获得超过3712个赞
知道大有可为答主
回答量:4602
采纳率:67%
帮助的人:1077万
展开全部
AT89S52内部没有定时器2.
STC的有些芯片内部有。
更多追问追答
追问
不是吧,我看资料AT89S52的资料,有定时器0、1、2啊。STC89C52里有定时器2
追答
你是不是搞错了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式