51单片机 计时器0产生PWM波 计时器1用作串口通信 两个计时器互相影响。。。该怎么处理

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint t=0,f=39,w=2;//t为单位计时数 500次为0.5ms f+1 为周期 (39+1)*0.5=20ms w 为占空比 1w=0.5ms
sbit P10=P1^0; // 输出端
void init()
{
TMOD=0x21;
SM0=0;
SM1=1;
REN=1;
PCON=0;

TH0=(65536-500)/256;
TL0=(65536-500)%256;
ET0=1;
TR0=1;
EA=1;
ES=1;
ET1=1;

TH1=0xFD;
TL1=0xF9;
TR1=1;//计时器互相影响 一个用于传输数据 一个用于产生pwm波

}

void time0() interrupt 1
{
TH0=(65536-500)/256;
TL0=(65536-500)%256;
t++; //t为0.5ms
if(t>=f)
t=0;

}

// void getspeed0() //interrupt 4 using 1
//{
//P0=SBUF;while(!RI);RI=0; //接收数据
//SBUF=P0;while(!TI);TI=0; //发送数据

//}

void main()
{
init();

while(1)
{
if(t<w)P10=1; //单个周期
else P10=0;
}
}

串口和定时器的中断是有优先级的,这两个中断首先不可能同时响应,默认必须是先执行完定时器的中断服务程序后才会去执行串口的中断服务程序,当然当串口中断服务程序执行到一半的时候出现了定时器中断,就会对串口有一定的影响,想避免最好就是在执行串口中断服务程序之前关定时器0中断,等串口中断服务程序执行完毕在开定时器0中断。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-17
这个实际上是不会影响的,因为默认的是定时器0的中断优先级比较高,如果对串口有影响的话,请你试试用定时器1产生PWM,而定时器0产生串口的波特率····
第2个回答  2011-07-21
二楼对
第3个回答  2011-07-16
..混任务的0.0