CL和CH,还有CCAP1L和CCAP1H 我知道这几个可以控制LED的占空比,但是这个值是怎么换算的哦?
#define pwh_MAX 0xfa // PWM脉宽最小值,占空比2.3%
#define pwh_MIN 0x02 // PWM脉宽最大值,占空比98%
还有这个值怎么取出来的?
现在大概的思路我懂了,就是里面这些参数有点蒙蒙的.
我这个程序是
CL=0x00; // PCA计数器低位
CH=0x00; // PCA计数器高位
// 设置PCA通道1的捕获/比较寄存器,用于定义PWM的占空比
// 这里需要根据实际情况调整CCAP1L和CCAP1H的值
CCAP1L=0xFF; // PCA通道1的捕获/比较值低位
CCAP1H=0x02; // PCA通道1的捕获/比较值高位
- #include "intrins.h"
- #include <STC8G.H>
-
- #define pwh_MAX 0xfa // PWM脉宽最小值,占空比2.3%
- #define pwh_MIN 0x02 // PWM脉宽最大值,占空比98%
- #define STEP 0x03; // PWM脉宽变化步长
- unsigned char pwh; // PWM脉宽变量,即存入CCAP1H中的值
-
- #define MAIN_Fosc 11059200L //定义主时钟
-
- void Delay(unsigned int ms) //注:ms_max=65536
- {
- unsigned int i;
- do
- {
- i=MAIN_Fosc/10000;
- while(--i);
- }
- while(--ms);
- }
-
- void PWM_OUT()
- {
- pwh=pwh_MIN;
- while(1)
- {
- if (pwh>pwh_MAX) break;
- CCAP1H= pwh;
- pwh+=STEP;
- Delay(20);
- }
- pwh=pwh_MAX;
- while(1)
- {
- if (pwh<pwh_MIN) break;
- CCAP1H= pwh;
- pwh-=STEP;
- Delay(20);
- }
- }
- void main()
-
- {
- P0M0 = 0x00; P0M1 = 0x00;
- P1M0 = 0x00; P1M1 = 0x00;
- P2M0 = 0x00; P2M1 = 0x00;
- P3M0 = 0x00; P3M1 = 0x00;
- P4M0 = 0x00; P4M1 = 0x00;
- P5M0 = 0x00; P5M1 = 0x00;
- P6M0 = 0x00; P6M1 = 0x00;
- P7M0 = 0x00; P7M1 = 0x00;
-
- CCON=0x00; // 清除PCA控制寄存器
- CMOD=0x08; // PCA计数模式配置(例如,定时器模式)
- CL=0x00; // PCA计数器低位
- CH=0x00; // PCA计数器高位
-
- // 配置PCA通道1为PWM模式,并启用中断(如果需要)
- CCAPM1=0x42; // 设置PCA通道1为PWM模式,并启用中断(如果需要)
- PCA_PWM1=0x00; // 设置PCA通道1的PWM输出为高有效
-
- // 设置PCA通道1的捕获/比较寄存器,用于定义PWM的占空比
- // 这里需要根据实际情况调整CCAP1L和CCAP1H的值
- CCAP1L=0xFF; // PCA通道1的捕获/比较值低位
- CCAP1H=0x02; // PCA通道1的捕获/比较值高位
-
- CR=1; //启动PCA
-
- while(1)
- {
- PWM_OUT();
- }
- }
复制代码
|