51单片机是可以实现PWM波输出的,原理其实都是一样的。说白了,PWM波就是让某一个引脚输出周期性连续高低电平变化的信号。
那么如何用51单片机实现周期性的高低电平呢?
答案就是用定时器。首先我们需要配置一下定时器,这里不做过多阐述,资料到处都有。然后设置一个计数周期,比如说让定时器计一百个数产生溢出,那么这一百个数的时间就是一个周期。接下来我们就以这一百个数的时间为基准。比如设置前五十个数的时间某引脚为高电平,后五十个数为低电平。那么这个引脚就会输出一个占空比为50%的高低电平变化。这就是所谓的PWM波。
基本代码实现如下:
sbitPWM=P2^0;//P2.0输出pwm
int time;//定义占空比的变量
void main()
{
TMOD=0x01;//定时器0工作方式1
TH0=0xff;//(65536-10)/256;//赋初值定时
TL0=0xf7;//(65536-10)%256;//0.01ms
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
while(1)
{
;
}
}
void tim0() interrupt1
{
TR0=0;//赋初值时,关闭定时器
TH0=0xff;//(65536-10)/256;//赋初值定时
TL0=0xf7;//(65536-10)%256;//0.01ms
TR0=1;//打开定时器
time++;
if(time>=100)
time=0;
if(time<=50) //占空比%50,可改
PWM=1;
else
PWM=0;
}
PWM波可以用来调节速度,角度,灰度等。