求教51单片机生成spwm波形的程序

采用89c51单片机,双极性调制,在任意两个管脚输出相位差180度脉冲就行

1、用普通I/O口采用软件定时器中断可以模拟SPWM输出。"/**/"里面的内用是对程序的标注,解析。
2、/*采用6MHz晶振,在P1.0脚上输出周期为2.5s,占空比为20%的脉冲信号*/
/*定时100ms,周期2.5s需25次中断,高电平0.5s需5次中断*/
#include <reg51.h>
typedef unsigned char uchar;
sbit P1_0=P1^0;
uchar time=0;
uchar period=25;
uchar high=5;
void timer0() interrupt 1 using 1
{
TH0=0x3c; /*定时器初值重装载*/
TL0=0xb0;
time++;
if(time==high) /*高电平持续时间结束,变低*/
{ P1_0=0;}
else if(time==period) /*周期时间到,变高*/
{ time=0;
P1_0=1;
}
}
void main()
{
TMOD=0x01; /*定时器0方式1*/
TH0=0x3c; /*定时器装载初值*/
TL0=0xb0;
EA=1; /*开CPU中断*/
ET0=1; /*开定时器0中断*/
TR0=1;/*启动定时器0*/
while(1) /*等待中断*/
{}
}
3、说明:本程序主要采用了51单片机(具体型号STC89C52RC)的定时器,工作在方式3,来产生规定时间内的方波,制造SPWM.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-25
这个型号的单片机我没用过,我主要应用dsp,在dsp里面是利用pwm模块产生的pwm,有好几种模式,相差多少度都可以设置,你有空的时候看看单片机的这一部分就行,没有pwm功能的话就利用普通定时器也是可以产生的,利用里面的比较中断控制普通io就可以
第2个回答  2011-10-25
用STC 芯片就行 有2个PWM, 10mS 轮换输出就可以,经过LC滤波,形成正弦波。
可做正弦波逆变器用。本回答被提问者采纳
第3个回答  2012-11-25
PWM可以用定时器产生,相位的话,你用两个引脚,P1.0 P1.1 在一个周期内轮换输出PWM,P1.0输出PWM则P1.1输出低电平,P1.1输出PWM则P1.0输出低电平,这里有一篇文章挺好http://wenku.baidu.com/view/61592b6c1eb91a37f1115c1e.html
思路有了,程序就好办了
第4个回答  2011-10-29
用STC 芯片就行 有2个PWM, 10mS 轮换输出就可以,经过LC滤波,形成正弦波。
可做正弦波逆变器用