STC15W4K32S4单片机怎么使用自带的PWM功能同时输出控制3个电机

STC15W4K32S4单片机怎么使用自带的PWM功能同时输出控制3个电机,且能够执行其他的程序,如通讯。求范例程序... STC15W4K32S4单片机怎么使用自带的PWM功能同时输出控制3个电机,且能够执行其他的程序,如通讯。求范例程序 展开
 我来答
匿名用户
2017-06-15
展开全部
/*任意周期和任意占空比DUTY%的PWM*/
#define CYCLE 6000L //定义PWM周期(最大值为32767)
sbit PWM2=P3^7;
sbit PWM3=P2^1;
sbit PWM4=P2^2;

void pwminit()
{ P_SW2 |= 0x80;
PWMCFG = 0x00; //配置PWM的输出初始电平为低电平
PWMCKS = 0x0f; //选择PWM的时钟为Fosc/(0+1)
PWMC = CYCLE; //设置PWM周期,定义PWM周期(最大值为32767)
PWM2CR = 0x00; //选择PWM2输出到P3.7,不使能PWM2中断
PWM3CR = 0x00;
PWM4CR = 0x00;
PWM2T1 = 0x0001;
PWM2T2 = 0;
PWM3T1 = 0x0001;
PWM3T2 = 0;
PWM4T1 = 0x0001;
PWM4T2 = 0;
PWMCR |= 0x80; //使能PWM模块
P_SW2 &=~0x80;
}
void pwm2( unsigned int DUTY) //PWM2
{
if(DUTY==0)
{
PWMCR &=~0x01;
PWM2=0;
}
else if (DUTY==100)
{
PWMCR &=~0x01;
PWM2=1;
}
else
{
P_SW2 |= 0x80; //使能访问PWM在扩展RAM区的特殊功能寄存器XSFR
PWM2T1 = 0x0001; //设置PWM2第1次反转的PWM计数
PWM2T2 = CYCLE * DUTY / 100; //设置PWM2第2次反转的PWM计数
P_SW2 &=~0x80; //占空比为(PWM2T2-PWM2T1)/PWMC
PWMCR |= 0x01; //使能PWM信号输出

}

}
void pwm3(unsigned int DUTY) //PWM3
{
if(DUTY==0)
{
PWMCR &=~0x02;
PWM3=0;
}
else if(DUTY==100)
{
PWMCR &=~0x02;
PWM3=1;
}
else
{
P_SW2 |= 0x80;
PWM3T1 = 0x0001;
PWM3T2 = CYCLE * DUTY / 100;
P_SW2 &=~0x80;
PWMCR |= 0x02;

}
}
void pwm4(unsigned int DUTY) //PWM4
{
if(DUTY==0)
{
PWMCR &=~0x04;
PWM4=0;
}
else if (DUTY==100)
{
PWMCR &=~0x04;
PWM4=1;
}
else
{
P_SW2 |= 0x80;
PWM4T1 = 0x0001;
PWM4T2 = CYCLE * DUTY / 100;
P_SW2 &=~0x80;
PWMCR |= 0x04;

}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式