jia_xuan 发表于 2022-5-27 10:11:35

stc单片机IO如何让pwm输出变为低电平

要求一对互补的pwm在故障出现时,关闭pwm输出,使两个口都变为低。故障消除后再输出pwm波

ackyee 发表于 2022-5-27 11:14:33

你都说了 关闭PWM功能了, 那当作普通IO了直接输出0不就行了

jia_xuan 发表于 2022-5-27 13:19:39

看来只能这样了

小李非刀 发表于 2022-5-27 14:35:58

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

STC8G2K64S4的45路15位PWM,连续输出0或1有3种方法(以PWM00为例):

1、禁止输出PWM,对应IO成为普通IO,禁止PWM输出后,需要这个IO输出高或低,自行设置。
PWM00CR |= 0x80;   //ENO=1:允许PWM输出
delay_ms(5);       //输出5ms
P00 = 1;         //连续输出高电平
PWM00CR &= ~0x80;//ENO=0:禁止PWM输出
delay_ms(5);      //关闭PWM, P0.0输出高电平5ms
               
PWM00CR |= 0x80;   //ENO=1:允许PWM输出
delay_ms(5);      //输出5ms
P00 = 0;         //连续输出低电平
PWM00CR &= ~0x80;//ENO=0:禁止PWM输出
delay_ms(5);      //关闭PWM, P0.0输出高电平5ms

2、PWM00T2设置输出高电平时刻,PWM00T1设置输出低电平时刻,PWM00T1-PWM00T2就是输出高电平时间。
   如果将PWM00T1设置的数值比周期值大,则连续输出高电平,输出100%占空比。
   如果将PWM00T2设置的数值比周期值大,则连续输出低电平,输出0%占空比。

3、使用“PWM通道电平保持控制寄存器 PWMnHLD”直接设置输出高或低,
   这个寄存器就是专门用于设置连续输出高或低的。
   PWM00HLD = 0x00;//PWM正常输出
   PWM00HLD = 0x01;//PWM输出连续低电平
   PWM00HLD = 0x02;//PWM输出连续高电平

高级PWM则使用PWMn_ENO寄存器,直接禁止某个输出就可以了。也可以允许异常控制,异常信号出现时,所有PWM都自动停止并高阻输出。

jia_xuan 发表于 2022-5-27 15:00:10

小李非刀 发表于 2022-5-27 14:35
PCA-PWM连续输出0或1的方法,以PCA0(PWM0-CCP0)为例:
PCA_PWM0 &= ~0x02;        // PWM0正常输出
PCA_PWM0 |= 0x ...
(引用自4楼)

谢谢,依据你的提示,我在手册找到了这个pwm输出使能寄存器PWMX_ENO,配置对应的位就可以实现我想要的功能了。


#define                PWM4P_OUT_EN()        PWMA_ENO |= 0x40        /* 使能 PWM3P 输出 */
#define                PWM4P_OUT_DIS()        PWMA_ENO &= ~0x40        /* 禁止 PWM3P 输出 */
#define                PWM4N_OUT_EN()        PWMA_ENO |= 0x80        /* 使能 PWM3N 输出 */
#define                PWM4N_OUT_DIS()PWMA_ENO &= ~0x80        /* 禁止 PWM3N 输出 */
//库函数内宏定义现成的,直接调用。
void PWMEnter(void)
{
        EAXSFR();       
        PWM4P_OUT_EN();        /* 使能 PWM4P 输出 */
        PWM4N_OUT_EN();        /* 使能 PWM4N 输出 */
        EAXRAM();

}
void PWMDisable(void)
{
        EAXSFR();       
        PWM4P_OUT_DIS();/* 禁止 PWM4P 输出 */       
        PWM4N_OUT_DIS();/* 禁止 PWM4N 输出 */
        P26= 0;
        P27= 0;
        EAXRAM();
}
页: [1]
查看完整版本: stc单片机IO如何让pwm输出变为低电平