求单片机输出占空比可调的PWM波程序

2024-12-18 07:14:26
推荐回答(3个)
回答1:

80S52没有硬件PWM功能,靠 定时器中断很简单,只不过频率不能太高,或调 节精度比较差
下面是双定时器产生PWM主要语句:
TMOD=0X11;
TH0=(65536-20000)/256;// 定时20ms
TL0=(65536-20000)%256;
TH1=(65536-b)/256;//定时要小于20ms,改变b的值即改变占空比
TL1=(65536-b)%256;
ET0=1;
EA=1;
TR0=1;
PWM=1;
b=2000;
while(1);
void timer0()interrupt 1
{
TH0=(65536-20000)/256;
TL0=(65536-20000)%256;
PWM=1;
TR1=1;
ET1=1;
}
void timer1()interrupt 3
{
TH1=(65536-b)/256;
TL1=(65536-b)%256;
PWM=0;
TR1=0;
ET1=0;
}
定时器0中断负责每 20ms将管脚置 1,定时1负责在20ms之内的某一时间将该管脚清0
当然也可以采用自动重装方式,中断可以更频繁一些,产生的PWM频率要高一些
也可以只用一个定时器,这时产生PWM波要么频率低,要么调节精度差,因中断一次至少10US,你就不用指望一次调节步距10us以下了

回答2:

参考一下:
http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/f2005aed1643a12a63d09f24.html

回答3:

这个用定时器进行控制,就能模拟生成PWM波。