|
|
我的好像也沒錯(cuò),但是萬用表測不出來,只有占空比在0.5附近才能明顯測到電壓約等于2.4v,其他時(shí)候都有4v多,但是接個(gè)led上去會(huì)亮。
//pwm的頻率f、占空比d,單片機(jī)定時(shí)器+1要是1us才準(zhǔn)確
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define f 1000//輸出頻率f,Hz
#define d 0.5//占空比,H時(shí)的
sbit pwm=P2^7;//pwm輸出口
float t;
uchar temp1h,temp1l,temp2h,temp2l;//temp1為要H時(shí)定時(shí)器初值,temp2為要L時(shí)的初值
bit flag;//頻率一個(gè)周期中的標(biāo)志位,當(dāng)pwm輸出h為1,輸出l為0
void init_pwm()
{
EA=1;
TMOD=0X20;
ET1=1;
TH1=temp1h;
TL1=temp1l;
flag=1;
TR1=0;
}//初始化設(shè)置定時(shí)器1,但沒有啟動(dòng)
void main()
{
// float f,d;
uint a1,a2;
t=1000000/f;//一個(gè)周期的時(shí)間t
a1=65536-d*t;
a2=65536-(1-d)*t;//因?yàn)?不能對(duì)小數(shù),多加入了a1,a2取整
temp1h=(65536-d*t)/256;
temp1l=a1%256;
temp2h=(65536-(1-d)*t)/256;
temp2l=a2%256;
init_pwm();
TR1=1;
while(1);
}
void t1() interrupt 3
{
if(flag==0)//要h輸出時(shí)的t1初值
{
TH1=temp1h;
TL1=temp1l;
pwm=1;
flag=1;
}
else if(flag==1)//要L輸出時(shí)的t1初值
{
TH1=temp2h;
TL1=temp2l;
flag=0;
pwm=0;
}
}
|
|