AT89C52单片机编程问题。在T0中断函数执行完之后进行T1定时器的初始化,结果造成了T2定时器停止工作

这是什么原因?主要是因为系统用到定时器的多种模式,得复用定时器功能。求指教。voidINIT_TMR0(){TMOD|=0x06;//定时器0设置成方式2,8位自动重置计... 这是什么原因?主要是因为系统用到定时器的多种模式,得复用定时器功能。求指教。
void INIT_TMR0(){
TMOD |= 0x06; //定时器0设置成方式2,8位自动重置计数器模式
TH0 = 0xFF; //装初值,这里N = 256-155 = 1 ,即外部一次电平变化,即产生中断
TL0 = 0xFF;
ET0 = 1;
SM0 = 0;
TR0 = 1; //开定时器0
}
//写入T0计数中断中断所执行的程序,红外分光仪中为 【检测电机初始位置】
void T0_time() interrupt 1
{
gIsMoving = 0; //停止电机
}
上面是T0的初始化,计数模式。
T1定时器的初始化如下
void INIT_TMR1(){
TMOD |= 0x60; //定时器1设置成方式2,8位自动重置计数器模式
TH1 = 0xFD; //装初值,根据电机实际转的圈数进行设定,这里N = 256 - 253 = 3
TL1 = 0xFD;
ET1 = 1;
SM1 = 0;
TR1 = 1; //开定时器1
}
//写入T1计数中断中断所执行的程序,红外分光仪中为 【检测电机角度位置】
void T1_time() interrupt 3
{
}

然后就T2定时器不工作了。何解?
展开
 我来答
胖大海君
2012-08-23 · TA获得超过1.4万个赞
知道大有可为答主
回答量:1436
采纳率:11%
帮助的人:622万
展开全部
嘿嘿 俺来帮你解决
1 问题的关键:
是你在在T0中断函数执行完之后进行T1定时器的初始化时,又改变了定时器0的设置。
造成定时器0不能正常工作。
即是这条指令: TMOD |= 0x60; //定时器1设置成方式2,8位自动重置计数器模式

将定时器0由原来的方式2改为方式0

2将 TMOD |= 0x60; //定时器1设置成方式2,8位自动重置计数器模式
修改为 TMOD |= 0x66; //定时器1设置成方式2,8位自动重置计数器模式
即在设置定时器1时,不改变对定时器0的原来的设置。

呵呵 赶快去试试吧 可惜没有加分呀 就选满意回答吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式