51单片机定时器和串口通讯冲突怎么办?

我做控制电机的PWM波用了定时器0,串口接收用了定时器1,没加上串口的时候PWM波还能用,但是加上串口中断PWM就不能用了。电机转得好快。不方便控制,用的直流电机。发个中... 我做控制电机的PWM波用了定时器0,串口接收用了定时器1,没加上串口的时候PWM波还能用,但是加上串口中断PWM就不能用了。电机转得好快。不方便控制,用的直流电机。发个中断部分程序你们帮看下,谢谢了。
void init_t0() //定时器0,PWM产生
{
TMOD=0x01;
TH0=0xfc; //1ms延时常数
TL0=0xff; //频率调节
EA=1;
ET0=1;
TR0=1;
}
void init_int() //串口、定时器初始化
{
TMOD=0x20; //定时器T1,方式二
TH1=0xfd; //波特率2400
TL1=0xfd;
TR1=1; //启动T1
SM0=0; //串口,工作方式一
SM1=1;
REN=1; //允许接收
ES=1; //串口中断允许
EA=1; //开总中断
}
然后中断里面是这样写的:
void timer0() interrupt 1
{
TH0=0xfc;
TL0=0xff ;
A1++;
if(A1==100)A1=0;
if(A1<B1)PWM=1; //启动输出
else PWM=0 ;
}
void chuank () interrupt 4
{
RI=0;
if(SBUF==0x01)
{ num=2;}
else if(num==2)
{kz=SBUF;num=0;}
}
当我删掉串口部分时PWM波就很正常,加上就不行了,我也试过设置优先级,PT0=1,PS=1,PT1=1都不行
刚刚想到了,自己犯2,谁说出来分就给谁了
展开
 我来答
zhxiufan
2013-08-20 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38384
国家科技进步奖

向TA提问 私信TA
展开全部
void init_t0() //定时器0,PWM产生
{
TMOD|=0x01;
TH0=0xfc; //1ms延时常数
TL0=0xff; //频率调节
PT0=1;
EA=1;
ET0=1;
TR0=1;
}
void init_int() //串口、定时器初始化
{
TMOD|=0x20; //定时器T1,方式二
TH1=0xfd; //波特率2400
TL1=0xfd;
TR1=1; //启动T1
SM0=0; //串口,工作方式一
SM1=1;
REN=1; //允许接收
ES=1; //串口中断允许
EA=1; //开总中断
}
然后中断里面是这样写的:
void timer0() interrupt 1
{
TH0=0xfc;
TL0=0xff ;
A1++;
if(A1==100)A1=0;
if(A1<B1)PWM=1; //启动输出
else PWM=0 ;
}
void chuank () interrupt 4
{
RI=0;
if(SBUF==0x01)
{ num=2;}
else if(num==2)
{kz=SBUF;num=0;}
}
做而论道
高能答主

2013-08-20 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部
两次初始化,TMOD,有两个不同的数值,互相干扰。

合并为一次初始化:

void init() //定时器0,PWM产生
{
TMOD = 0x21;
TH0 = 0xfc; //1ms延时常数
TL0 = 0xff; //频率调节
ET0 = 1;
TR0 = 1;

TH1 = 0xfd; //波特率2400
TL1 = 0xfd;
TR1 = 1; //启动T1
SM0 = 0; //串口,工作方式一
SM1 = 1;
REN = 1; //允许接收
ES = 1; //串口中断允许
EA = 1; //开总中断
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiaomage_2000
2013-08-20 · TA获得超过3621个赞
知道大有可为答主
回答量:1772
采纳率:100%
帮助的人:848万
展开全部
我看出来了,你在设置串口的时候把定时器0给关了“TMOD=0x20; //定时器T1,方式二
”,不过你定时器0采用方式1不如方式2自动装载好,给你我的PWM代码你看看我用的T1
u8 TIME;
sbit PWMO = P1^5;
u8 PWM = 30;

void Timer1(void) interrupt 3
{
TIME++;
if(TIME==99)
{
TIME=0;
PWMO=1;
}
if (TIME == PWM)
{
PWMO=0;
}
}
//定时器设置
TIME=0;
TMOD=0x20;
TH1=156;
TL1=156;
EA=1;
ET1=1;
TR1=1;
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式