首先,c51没有自己的专门pwm的硬件部分必须手动通过定时器的调试。
什么是pwm
pwm就是有周期的方形波,这里高电平占多少低电平占多少。
如何在51中设置pwm
看舵机的介绍,可以知道,舵机的角度控制就是高电平的占空比,保证一个周期高电平占空比时间就能形成对应角度。
代码部分
#include"reg52.h"
int cnt=0;
int jd;
sbit pwm=P2^2;
void timer()
{
TMOD=0x01;//1.配置定时器0工作模式
TL0 = 0x33;
TH0 = 0xFE; //2.配置定时器为0.5ms
TR0=1;//3.开始计时
}
void Delay2000ms() //@11.0592MHz
{
unsigned char i, j, k;
// _nop_();
i = 15;
j = 2;
k = 235;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
EA =1;
ET0 =1; //打开中断
timer();
pwm=1;
while(1)//这里是来循环舵机的角度,jd是舵机对应的角度也是0.5的整倍数
{
jd=3;
Delay2000ms();
jd=0;
Delay2000ms();
jd=4;
Delay2000ms();
jd=0;
Delay2000ms();
}
}
void interrupt_() interrupt 1 //中断函数
{
TL0 = 0x33;
TH0 = 0xFE;
cnt++;
if(cnt<=jd)//当小于等于时,这里变为高电平
{
pwm=1;
}
else
{
pwm=0;
}
if(cnt==40)
{
cnt=0;
pwm=1;
}
}