边沿对齐  PWM输出频率=12/(PWMx_PSCR+1)X(PWMx_ARR+1)
中间对齐  PWM输出频率=12/(PWMx_PSCR+1)XPWMx_ARRX2

测试记录

12MHZ

   P2.0  2.4KHZ

   P2.2   2.4KHZ      

              PWMA_CCR1=2000;                     //设置占空比时间
              PWMA_CCR2=2000;                     //设置占空比时间
              PWMA_ARR=5000;                      //设置周期时间

占空比PWMA_CCR1/PWMA_ARR=2000/5000=0.4

              #include     "STC8H.h"             //
              #include     "intrins.h"           //
              #define      uchar unsigned char      //
              #define      uint  unsigned int       //
              #define      ENO1P       0x01
              #define      ENO2P       0x04
              #define      PWM1_2      0x01    //P:P2.0  N:P2.1
              #define      PWM2_2      0x04    //P:P2.2  N:P2.3
              sbit         OutPut0=P2^0;                   //
              sbit         OutPut1=P2^2;  
              uchar        SS;
/*-----------(1)延时子程序12MHz 加千百十个显示--------*/
              void Delay100ms(uint x)              //
              {
              uint i,j;
              for(i=0;i<x;i++)
              for(j=0;j<11000;j++);
              }
/*************关所有输出*******************************/             
              void Init_io()
              {
               P1M0=0X00;                        //    
               P1M1=0X00;                        //
               P2M0=0x05;
               P2M1=0x00; 
               P3M0=0X00;                        //    
               P3M1=0X00;                        //
               P5M0=0X00;                        //
               P5M1=0X00;                        //
              }
/******************** 主函数 **************************/
              void main(void)
              {    
              P_SW2|=0X80;
              EA=1;
              Init_io();
              for(SS=0;SS<5;SS++)
              {
              OutPut0=0;
              OutPut1=0;
              Delay100ms(10);
              OutPut0=1;
              OutPut1=1;
              Delay100ms(10);
              }
//            
              PWMA_PS=0x00;
              PWMA_PS|=PWM1_2;                   //选择 PWM1_2 通道
              PWMA_PS|=PWM2_2;                   //选择 PWM2_2 通道
              PWMA_CCER1=0x00;                   //写 CCMRx 前必须先清零 CCxE    关闭通道
              PWMA_CCER2=0x00;                   //写 CCMRx 前必须先清零 CCxE    关闭通道

              PWMA_CCMR1=0x60;                   //设置 PWM1 模式1 输出
              PWMA_CCMR2=0x60;                   //设置 PWM1 模式1 输出

              PWMA_CCER1=0x11;                   //使能 CC1E 通道, 高电平有效
              PWMA_CCER2=0x01;                   //
            
              PWMA_CCR1=2000;                     //设置占空比时间
              PWMA_CCR2=2000;                     //设置占空比时间
              PWMA_ARR=5000;                     //设置周期时间
              PWMA_ENO = 0x00;
              PWMA_ENO |= ENO1P;                 //使能输出
              PWMA_ENO |= ENO2P;                 //使能输出
              
              PWMA_BKR = 0x80;                   //刹车寄存器 主输出使能
              PWMA_CR1 |= 0x81;                  //BIT7 ARPEA=1 预装载    BIT0 CENA=1 开始计时
              while(1)
               {
               
               }                                 //
              }                                     //

////////////////////////////////////////////

12MHZ

   P2.0  4KHZ

   P2.2  4KHZ  

              PWMA_CCR1=2000;                     //设置占空比时间
              PWMA_CCR2=2000;                     //设置占空比时间
              PWMA_ARR=3000;                       //设置周期时间

占空比PWMA_CCR1/PWMA_ARR=0.666

              #include     "STC8H.h"             //
              #include     "intrins.h"           //
              #define      uchar unsigned char      //
              #define      uint  unsigned int       //
              #define      ENO1P       0x01
              #define      ENO2P       0x04
              #define      PWM1_2      0x01    //P:P2.0  N:P2.1
              #define      PWM2_2      0x04    //P:P2.2  N:P2.3
              sbit         OutPut0=P2^0;                   //
              sbit         OutPut1=P2^2;  
              uchar        SS;
/*-----------(1)延时子程序12MHz 加千百十个显示--------*/
              void Delay100ms(uint x)              //
              {
              uint i,j;
              for(i=0;i<x;i++)
              for(j=0;j<11000;j++);
              }
/*************关所有输出*******************************/             
              void Init_io()
              {
               P1M0=0X00;                        //    
               P1M1=0X00;                        //
               P2M0=0x05;
               P2M1=0x00; 
               P3M0=0X00;                        //    
               P3M1=0X00;                        //
               P5M0=0X00;                        //
               P5M1=0X00;                        //
              }
/******************** 主函数 **************************/
              void main(void)
              {    
              P_SW2|=0X80;
              EA=1;
              Init_io();
              for(SS=0;SS<5;SS++)
              {
              OutPut0=0;
              OutPut1=0;
              Delay100ms(10);
              OutPut0=1;
              OutPut1=1;
              Delay100ms(10);
              }
//            
              PWMA_PS=0x00;
              PWMA_PS|=PWM1_2;                   //选择 PWM1_2 通道
              PWMA_PS|=PWM2_2;                   //选择 PWM2_2 通道
              PWMA_CCER1=0x00;                   //写 CCMRx 前必须先清零 CCxE    关闭通道
              PWMA_CCER2=0x00;                   //写 CCMRx 前必须先清零 CCxE    关闭通道

              PWMA_CCMR1=0x60;                   //设置 PWM1 模式1 输出
              PWMA_CCMR2=0x60;                   //设置 PWM1 模式1 输出

              PWMA_CCER1=0x11;                   //使能 CC1E 通道, 高电平有效
              PWMA_CCER2=0x01;                   //
            
              PWMA_CCR1=2000;                     //设置占空比时间
              PWMA_CCR2=2000;                     //设置占空比时间
              PWMA_ARR=3000;                     //设置周期时间
              PWMA_ENO = 0x00;
              PWMA_ENO |= ENO1P;                 //使能输出
              PWMA_ENO |= ENO2P;                 //使能输出
              
              PWMA_BKR = 0x80;                   //刹车寄存器 主输出使能
              PWMA_CR1 |= 0x81;                  //BIT7 ARPEA=1 预装载    BIT0 CENA=1 开始计时
              while(1)
               {
               
               }                                 //
              }                                     //

 /////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////

             PWMA_CCR1=2000;                     //设置占空比时间
              PWMA_CCR2=2000;                    //设置占空比时间
              PWMA_ARR=2200;                      //设置周期时间          

             占空比PWMA_CCR1/PWMA_ARR=

             2000/2200=0.9

12MHZ

              P2.0  5.46KHZ

              P2.2  5.46KHZ  

              #include     "STC8H.h"             //
              #include     "intrins.h"           //
              #define      uchar unsigned char      //
              #define      uint  unsigned int       //
              #define      ENO1P       0x01
              #define      ENO2P       0x04
              #define      PWM1_2      0x01    //P:P2.0  N:P2.1
              #define      PWM2_2      0x04    //P:P2.2  N:P2.3
              sbit         OutPut0=P2^0;                   //
              sbit         OutPut1=P2^2;  
              uchar        SS;
/*-----------(1)延时子程序12MHz 加千百十个显示--------*/
              void Delay100ms(uint x)              //
              {
              uint i,j;
              for(i=0;i<x;i++)
              for(j=0;j<11000;j++);
              }
/*************关所有输出*******************************/             
              void Init_io()
              {
               P1M0=0X00;                        //    
               P1M1=0X00;                        //
               P2M0=0x05;
               P2M1=0x00; 
               P3M0=0X00;                        //    
               P3M1=0X00;                        //
               P5M0=0X00;                        //
               P5M1=0X00;                        //
              }
/******************** 主函数 **************************/
              void main(void)
              {    
              P_SW2|=0X80;
              EA=1;
              Init_io();
              for(SS=0;SS<5;SS++)
              {
              OutPut0=0;
              OutPut1=0;
              Delay100ms(10);
              OutPut0=1;
              OutPut1=1;
              Delay100ms(10);
              }
//            
              PWMA_PS=0x00;
              PWMA_PS|=PWM1_2;                   //选择 PWM1_2 通道
              PWMA_PS|=PWM2_2;                   //选择 PWM2_2 通道
              PWMA_CCER1=0x00;                   //写 CCMRx 前必须先清零 CCxE    关闭通道
              PWMA_CCER2=0x00;                   //写 CCMRx 前必须先清零 CCxE    关闭通道

              PWMA_CCMR1=0x60;                   //设置 PWM1 模式1 输出
              PWMA_CCMR2=0x60;                   //设置 PWM1 模式1 输出

              PWMA_CCER1=0x11;                   //使能 CC1E 通道, 高电平有效
              PWMA_CCER2=0x01;                   //
            
              PWMA_CCR1=2000;                     //设置占空比时间
              PWMA_CCR2=2000;                     //设置占空比时间
              PWMA_ARR=2200;                     //设置周期时间
              PWMA_ENO = 0x00;
              PWMA_ENO |= ENO1P;                 //使能输出
              PWMA_ENO |= ENO2P;                 //使能输出
              
              PWMA_BKR = 0x80;                   //刹车寄存器 主输出使能
              PWMA_CR1 |= 0x81;                  //BIT7 ARPEA=1 预装载    BIT0 CENA=1 开始计时
              while(1)
               {
               
               }                                 //
              }                                     //

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐