STC官方给的:
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); // PWM输出5ms
P00 = 1; // 连续输出高电平
PWM00CR &= ~0x80; // ENO=0:禁止PWM输出
delay_ms(5); // P0.0输出高电平5ms
PWM00CR |= 0x80; // ENO=1:允许PWM输出
delay_ms(5); // PWM输出5ms
P00 = 0; // 连续输出低电平
PWM00CR &= ~0x80; // ENO=0:禁止PWM输出
delay_ms(5); // P0.0输出低电平5ms
2、PWM00T2设置输出高电平时刻,PWM00T1设置输出低电平时刻,PWM00T1-PWM00T2就是输出高电平时间。
如果将PWM00T1设置的数值比周期值大,则连续输出高电平,输出100%占空比。
如果将PWM00T2设置的数值比周期值大,则连续输出低电平,输出0%占空比。
3、使用“PWM通道电平保持控制寄存器 PWMnHLD”直接设置输出高或低,
这个寄存器就是专门用于设置连续输出高或低的。
PWM00HLD = 0x00; //PWM正常输出
PWM00HLD = 0x01; //PWM输出连续低电平
PWM00HLD = 0x02; //PWM输出连续高电平
STC8H系列的高级PWM,连续输出0或1有2种方法(以PWM1P为例):
1、使用PWMx_ENO禁止输出PWM,对应IO成为普通IO,禁止PWM输出后,由这个IO直接输出高或低电平。
PWMA_ENO |= 0x01; // 允许PWM1P输出
delay_ms(5); // P1.0输出PWM 5ms
P10 = 1; // P1.0输出高电平
PWMA_ENO &= ~0x01; // 关闭PWM输出
delay_ms(5); // P1.0输出高电平5ms
PWMA_ENO |= 0x01; // 允许PWM1P输出
delay_ms(5); // P1.0输出PWM 5ms
P10 = 0; // P1.0输出低电平
PWMA_ENO &= ~0x01; // 关闭PWM输出
delay_ms(5); // P1.0输出高电平5ms
2、设置PWMx_CCMRn,强制PWM输出有效(高)电平/无效(低)电平。
PWMA_CCMR1 = (PWMA_CCMR1 & ~0x70) | 0x60; // PWM正常输出
delay_ms(5); // PWM输出5ms
PWMA_CCMR1 = (PWMA_CCMR1 & ~0x70) | 0x40; // 强制PWM输出无效(低)电平
delay_ms(5); // PWM输出低电平5ms
PWMA_CCMR1 = (PWMA_CCMR1 & ~0x70) | 0x60; // PWM正常输出
delay_ms(5); // PWM输出5ms
PWMA_CCMR1 = (PWMA_CCMR1 & ~0x70) | 0x50; //强制PWM输出有效(高)电平
delay_ms(5); // PWM输出高电平5ms
|