stc单片机IO如何让pwm输出变为低电平
要求一对互补的pwm在故障出现时,关闭pwm输出,使两个口都变为低。故障消除后再输出pwm波你都说了 关闭PWM功能了, 那当作普通IO了直接输出0不就行了 看来只能这样了
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都自动停止并高阻输出。
小李非刀 发表于 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]