單片機源程序如下:
#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)單極性波。問題出在哪兒里?萌新求教 |