微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > STC12C5A60S2内部PWM模块及其程序

STC12C5A60S2内部PWM模块及其程序

时间:07-08 来源: 点击:

  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){;}

  }

  /******************************************************/

  /*********************************************************/

  /*********************************************************/

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top