STC12C5A60S2内部PWM模块及其程序
sfr CCAP1H = 0xFB; //PCA 模块 1 的捕捉/比较寄存器高 8 位。 0000,0000
//-----------------------
// 7 6 5 4 3 2 1 0 Reset Value
sfr PCA_PWM0 = 0xF2; //PCA 模块0 PWM 寄存器。 - - - - - - EPC0H EPC0L xxxx,xx00
sfr PCA_PWM1 = 0xF3; //PCA 模块1 PWM 寄存器。 - - - - - - EPC1H EPC1L xxxx,xx00
//PCA_PWMn: 7 6 5 4 3 2 1 0
// - - - - - - EPCnH EPCnL
//B7-B2: 保留
//B1(EPCnH): 在 PWM 模式下,与 CCAPnH 组成 9 位数。
//B0(EPCnL): 在 PWM 模式下,与 CCAPnL 组成 9 位数。
/*******************************************************/
void pwm_init(void) //PWM初始化函数,初始占空比为0
{
CMOD=0x02; //0000 0010 空闲时不计数,不产生中断,时钟源为fosc/2,因此输出占用率为fosc/512
CL=0x00;
CH=0x00;
CCAPM0=0x42; //0100 0010, 8位 PWM
CCAP0L=0x00;
CCAP0H=0x00; //PWM实现方法,因为是8位,CL基础计数器从0xFF递减到0x00,溢出后将CCAP0H
//的值加载到CCAP0L,若CL递减过程中,若大于CCAP0L,则输出高电平,否则为低电平
CCAPM1=0x42;
CCAP1H=0x00;
CCAP1L=0x00;
CR=1; //开启PCA计数器
}
/*****************************************************/
void pwm_set(uchar x,uchar y) //占空比设置函数
{
CCAP0H=x; //设置比较值
CCAP0L=x;
CCAP1H=y;
CCAP1L=y;
}
/**************************************************/
void main(void)
{
pwm_init();
pwm_set(0xff,0x0c); //设置为25%的占空比 1100 0000, 12*16(低电平):3×16(高电平)
while(1){;}
}
/******************************************************/
/*********************************************************/
/*********************************************************/
STC12C5A60S2 相关文章:
- 智能家居门禁系统指纹锁方案(07-10)
- 一款便携式脑电无线采集系统的设计(07-15)
- STC12C5A60S2引脚详解(07-08)
- 探索STC12C5A60S2定时器(07-08)
- 基于 STC12C5A60S2 的智能循迹小车(附传感器电机驱动电路图)(03-19)
- LT3751如何使高压电容器充电变得简单(08-12)