51单片机,想要输出PWM。但是好像没有什么用,大神们看看有什么问题
sbit a=P1^0;
sbit b=P1^1;
unsigned char speed0;
void zz();
void speed();
void model1(unsigned char a);
void main()
{
TMOD|=0x10;
TH0=0xfe;
TL0=0x0c;
EA=1;
ET0=1;//′ò?a?¨ê±?÷0
TR0=1;
zz();
}
void zz()
{
model1(a);
b=0; 0;
}
void model1(unsigned char a)
{
while(1)
{
if(speed0>=100) //PWM?ü?ú?a100*0.5ms
{
speed0=0;
}
else if(speed0< 50) //??±?30?a???μ?éò???±??±á÷μ??úμ??ù?è
{
a=1;
// b=1;
}
else
{
a=0;
// b=0;
}
}
}
void speed(void) interrupt 1
{
TH0 = 0xfe;
TL0 = 0x0c;
speed0++;
}
如果是占空比50%的,定时器取反就可以了
不懂 期待小编搞好后能分享一下经验
可以直接用延时写pwm,但是不准确
你用的什么芯片?如果你这么输出占空比的话很费资源的,现在好多的都带这个功能的,
51
那个while(1)不应该写在那里,会进入死循环,出不来
哎 我也练习过一些非常基本的程序 但是感觉程序模式死板 稍微错一点就不行
#include<reg51.h>
#define uint unsigned int
sbit a=P1^0;
sbit b=P1^1;
unsigned char speed0;
void zz();
void speed();
void model1(uint a);
void main()
{
TMOD|=0x01;
TH0=0xfe;
TL0=0x0c;
EA=1;
ET0=1;//′ò?a?¨ê±?÷0
TR0=1;
b=1;
while(1)
{
model1(80);
}
}
void model1(uint )
{
if(speed0>=100) //PWM?ü?ú?a100*0.5ms
{
speed0=0;
}
else
if(speed0< a) //??±?30?a???μ?éò???±??±á÷μ??úμ??ù?è
{
P1&=0xfe;
// b=1;
}
else
{
P1|=0x01;
// b=0;
}
}
void speed(void) interrupt 1
{
TH0 = 0xfe;
TL0 = 0x0c;
speed0++;
}
这是改好的程序,可以正常使用了
是这样的==想了好久