51单片机 计时器0产生PWM波 计时器1用作串口通信 两个计时器互相影响。。。该怎么处理
#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharuintt=0,f=39,w=2;//t为单...
#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;
}
} 展开
#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;
}
} 展开
4个回答
展开全部
这个实际上是不会影响的,因为默认的是定时器0的中断优先级比较高,如果对串口有影响的话,请你试试用定时器1产生PWM,而定时器0产生串口的波特率····
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询