单片机源程序如下:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar t_max = 20; //一个周期
static uchar t = 0,i = 0; //PWM计数
sbit P2_0=P2^0;
sbit P1_0=P1^0;
uchar code SinParam[40]={
10,10,11,12,13,14,14,15,16,16,17,17,18,18,18,19,
19,19,19,19,19,19,19,19,19,19,18,18,17,17,16,16,
15,15,14,13,12,12,11,10
};
// 正弦波样本值
void main(void)
{
TMOD = 0x02; //定时器0,工作模式2,8位定时模式
TH0 =1; //写入预置初值(取值1-255,数越大PWM频率越高)
TL0 =1; //写入预置值(取值1-255,数越大PWM频率越高)
TR0 = 1; //启动定时器
ET0 = 1; //允许定时器0中断
EA = 1; //允许总中断
P2_0=1; //初始化P1
P1_0=0;
while(1)
{
}
}
timer0()interrupt 1 using 2
{
t++; //每次定时器溢出加1
if(t < t_max && t >= SinParam[ i]) //PWM周期 5
{
P2_0 = 0; //使LED灯亮
P1_0=1;
}
else if( t >= t_max)
{
t = 0; //使t=0,开始新的PWM周期
i++;
P2_0 =1;
P1_0=0;
}
if(i >= 40)
{i = 0;}
}
out1.2出来是一个交流,有正负的方波,但滤波后成了正弦,(全大于0)单极性波。问题出在哪儿里?萌新求教 |