51 双定时器输出PWM相互干扰,怎么解决

2020-01-24 11:57发布

51单片机用T0,T1两个定时器输出PWM。
计数值都是1000时,PWM周期都是5.6ms
计数值都是2000时,PWM周期也都是5.6ms
计数值都是3000时,T0的PWM周期输出2.2ms,T1的PWM输出周期为4.2ms
以上结果用示波器测得。
是不是因为优先级造成的干扰呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
lcw_swust
1楼-- · 2020-01-24 15:21
楼主不是用的自动重装模式?
1个定时器可以实现多路PWM的,何必用两个定时器呢
洗澡哥
2楼-- · 2020-01-24 21:08
lcw_swust 发表于 2013-8-3 11:56
楼主不是用的自动重装模式?
1个定时器可以实现多路PWM的,何必用两个定时器呢 ...

应该用八位自动重装模式吗,我用的是十六位计数器
我直接跑了例程,被你一说,感觉是一个定时器就够了。。。。。例程好坑
洗澡哥
3楼-- · 2020-01-25 01:46
lcw_swust 发表于 2013-8-3 11:56
楼主不是用的自动重装模式?
1个定时器可以实现多路PWM的,何必用两个定时器呢 ...

果然,用一个定时器输出多个PWM挺好用的
小豆
4楼-- · 2020-01-25 03:06
 精彩回答 2  元偷偷看……
洗澡哥
5楼-- · 2020-01-25 05:26
小豆 发表于 2013-8-14 23:52
一个定时器怎么输出多路PWM,求楼主给一些资料看看,感谢万分!!!

在定时器了可以调频率
在主函数里可以占空比

void Time1 (void) interrupt 3  
{
       uchar i,j;
        TH0=0xfe;        //16位计数寄存器T0高8位,尝试修改1000成其他值
        TL0=0x0c;        //16位计数寄存器T0低8位,尝试修改1000成其他值
        i++;
        j++
        if(i==10)//调频率
             PWMA++;
        if(j==20)//调频率
             PWMB++;       
}
xdpj
6楼-- · 2020-01-25 05:45
跟楼上又学了一招,谢了。

一周热门 更多>