51单片机怎么同时开启T0和T1,我有个程序使用了两个定时器,但是只有T1再跑。T0没有反应,仿真的也是这样
我单独开启T0的时候,T0是可以正常工作的。具体程序如下。初始化程序TMOD=0x17;//定时器0/1工作在16位定时模式;TH1=60000>>8;//定时器0赋初值...
我单独开启T0的时候,T0是可以正常工作的。
具体程序如下。初始化程序 TMOD = 0x17; //定时器0/1工作在16位定时模式;
TH1 = 60000 >> 8; //定时器0赋初值高8位,晶振24M定时时间30ms;
TL1 = 60000 & 0x0f; //定时器0赋初值低8位,晶振24M定时时间30ms;
TH0 = (65535 - 500) >> 8; //定时器1赋初值高8位;
TL0 = (65535 - 500) & 0x0f; //定时器1赋初值低8位;
ET1 = 1; //允许中断1中断;
ET0 = 1; //允许中断0中断
TR1 = 1; //开定时器1;
TR0 = 1; //开定时器0;
EA = 1; //开总中断;
****************T0中断服务函数*************************
void t0_interrupt(void) interrupt 1 //控制频率
{
TH0 = (65535 - 500) >> 8; //定时器1赋初值高8位;
TL0 = (65535 - 500) & 0x0f; //定时器1赋初值低8位;
if(!temp)
{
led2 = ~led2;
temp = time[flag2];
}
else temp--;
}
****************T1中断服务函数*************************
void t1_interrupt (void) interrupt 3 //控制频率的持续时间
{
TH1 = 60000 >> 8; //定时器1赋初值高8位;
TL1 = 60000 & 0x0f; //定时器1赋初值低8位;
if(!flag) //如果循环次数标记位为0则表示定时时间到;
{
flag1 = !flag1; //将间歇标记位去反;
flag = 10; //重新给间歇标记位赋值;
}
else flag--;
} 展开
具体程序如下。初始化程序 TMOD = 0x17; //定时器0/1工作在16位定时模式;
TH1 = 60000 >> 8; //定时器0赋初值高8位,晶振24M定时时间30ms;
TL1 = 60000 & 0x0f; //定时器0赋初值低8位,晶振24M定时时间30ms;
TH0 = (65535 - 500) >> 8; //定时器1赋初值高8位;
TL0 = (65535 - 500) & 0x0f; //定时器1赋初值低8位;
ET1 = 1; //允许中断1中断;
ET0 = 1; //允许中断0中断
TR1 = 1; //开定时器1;
TR0 = 1; //开定时器0;
EA = 1; //开总中断;
****************T0中断服务函数*************************
void t0_interrupt(void) interrupt 1 //控制频率
{
TH0 = (65535 - 500) >> 8; //定时器1赋初值高8位;
TL0 = (65535 - 500) & 0x0f; //定时器1赋初值低8位;
if(!temp)
{
led2 = ~led2;
temp = time[flag2];
}
else temp--;
}
****************T1中断服务函数*************************
void t1_interrupt (void) interrupt 3 //控制频率的持续时间
{
TH1 = 60000 >> 8; //定时器1赋初值高8位;
TL1 = 60000 & 0x0f; //定时器1赋初值低8位;
if(!flag) //如果循环次数标记位为0则表示定时时间到;
{
flag1 = !flag1; //将间歇标记位去反;
flag = 10; //重新给间歇标记位赋值;
}
else flag--;
} 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询