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

用80S52输出占空比可调的PWM波的程序,C语言编写的,详细点的。
我的邮箱[email protected]
谢谢了!!!!

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以下了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-02
第2个回答  2018-04-02
这个用定时器进行控制,就能模拟生成PWM波。