- 打卡等级:偶尔看看III
- 打卡总天数:52
- 最近打卡:2025-05-03 23:41:15
超级版主
- 积分
- 12085
|
发表于 2023-12-15 10:21:40
|
显示全部楼层
本帖最后由 梁工 于 2023-12-15 10:22 编辑
请参考、测试“01A-STC8G1K08A-8PIN-PCA-3路PWM-C语言”。
//========================================================================
// 函数: void PwmOutContinue(u8 id, u8 level)
// 描述: 设置PWM连续输出电平(高或低).
// 参数: id: PCA序号, 0~2对应 PCA0 ~ PCA2
// level: 连续输出的电平,0为低电平, 1为高电平.
// 返回: none.
// 版本: V1.0, 2018-5-10
//========================================================================
void PwmOutContinue(u8 id, u8 level)
{
if(id == 0)
{
if(level == 0) PWM0_OUT_0();
else PWM0_OUT_1();
}
else if(id == 1)
{
if(level == 0) PWM1_OUT_0();
else PWM1_OUT_1();
}
else if(id == 2)
{
if(level == 0) PWM2_OUT_0();
else PWM2_OUT_1();
}
}
//========================================================================
// 函数: void UpdatePwm(u8 id, u16 pwm_value)
// 描述: 更新PWM值.
// 参数: id: PCA序号, 0~2对应 PCA0 ~ PCA2
// pwm_value: pwm值, 这个值是输出低电平的时间.
// 返回: none.
// 版本: V1.0, 2018-5-10
//========================================================================
void UpdatePwm(u8 id, u16 pwm_value)
{
if(id == 0)
{
PCA_PWM0 = (PCA_PWM0 & ~0x32) | (u8)((pwm_value >> 4) & 0x30);
CCAP0H = (u8)pwm_value;
// PWM0_NORMAL();
}
else if(id == 1)
{
PCA_PWM1 = (PCA_PWM1 & ~0x32) | (u8)((pwm_value >> 4) & 0x30);
CCAP1H = (u8)pwm_value;
// PWM1_NORMAL();
}
else if(id == 2)
{
PCA_PWM2 = (PCA_PWM2 & ~0x32) | (u8)((pwm_value >> 4) & 0x30);
CCAP2H = (u8)pwm_value;
// PWM2_NORMAL();
}
}
PCA-PWM连续输出0或1的方法,以PCA0(PWM0-CCP0)为例:
PCA_PWM0 &= ~0x02; // PWM0正常输出
PCA_PWM0 |= 0x3f, CCAP0H = 0xff, CCAP0L = 0xff; // PWM0一直输出0
PCA_PWM0 &= 0xc0, CCAP0H = 0, CCAP0L = 0; // PWM0一直输出1
STC8G系列-PCA相关程序.rar
(309.7 KB, 下载次数: 93)
|
|