管脚图
我使用的是LQFP48封装的为例子
相关功能引脚说明见芯片手册P35页
例程代码
#include//测试工作频率为11.0592MHz //数据类型宏定义 #define uchar unsigned char #define uint unsigned int //PCA输入时钟频率宏定义 #define PCA_Clock12 0x00 //PCA输入时钟源为系统时钟/12 #define PCA_Clock2 0x02 //PCA输入时钟源为系统时钟/2 #define PCA_ClockTimer 0x04 //PCA输入时钟源为定时器溢出脉冲 #define PCA_ClockECL 0x06 //PCA输入时钟源为ECL脚输入时钟 #define PCA_Clock 0x08 //PCA输入时钟源为系统时钟 #define PCA_Clock4 0x0a //PCA输入时钟源为系统时钟/4 #define PCA_Clock6 0x0c //PCA输入时钟源为系统时钟/6 #define PCA_Clock8 0x0e //PCA输入时钟源为系统时钟/8 //PCA启动、停止计数命令宏定义 #define PCA_START 1 //PCA启动计数 #define PCA_STOP 0 //PCA停止计数 //PCA模块PWM位数控制宏定义 #define PCA_PWM6_EBSn 0x80 //PCA模块输出6位PWM控制位 #define PCA_PWM7_EBSn 0x40 //PCA模块输出7位PWM控制位 #define PCA_PWM8_EBSn 0x00 //PCA模块输出8位PWM控制位 //PCA时钟初始化 void PCA_ClockInit(void) { CCON = 0x00; CMOD = PCA_Clock; //设置PCA时钟 CL = 0x00; CH = 0x00; } //PCA模块0PWM初始化 void PCA0_PWM_Init(void) { PCA_ClockInit(); CCAPM0 = 0x42; //PCA模块0为PWM工作模式 PCA_PWM0 = PCA_PWM6_EBSn; CCAP0L = 0x00; CCAP0H = 0x00; } //PCA模块1PWM初始化 void PCA1_PAM_Init(void) { PCA_ClockInit(); CCAPM1 = 0x42; //PCA模块1为PWM工作模式 PCA_PWM1 = PCA_PWM7_EBSn; //PCA模块1输出7位PWM CCAP1L = 0x00; CCAP1H = 0x00; } //PCA模块2PWM初始化 void PCA2_PAM_Init(void) { PCA_ClockInit(); CCAPM2 = 0x42; //PCA模块2为PWM工作模式 PCA_PWM2 = PCA_PWM8_EBSn; //PCA模块2输出8位PWM CCAP2L = 0x00; CCAP2H = 0x00; } void PCA0_PWM_Set(uint pwm) { CCAP0L = pwm; CCAP0H = pwm; } void PCA1_PWM_Set(uint pwm) { CCAP1L = pwm; CCAP1H = pwm; } void PCA2_PWM_Set(uint pwm) { CCAP2L = pwm; CCAP2H = pwm; } //启动或停止PCA计数器 //输入PCA_START启动PCA计数器,输入PCA_STOP停止PCA计数器 void PCA_Control(bit i) { CR = i; } void main() { PCA0_PWM_Init(); //PCA模块0 PWM工作模式初始化 PCA0_PWM_Set(0x20); //设置占空比50% PCA1_PAM_Init(); //PCA模块1 PWM工作模式初始化 PCA1_PWM_Set(0x40); //设置占空比50% PCA2_PAM_Init(); //PCA模块2 PWM工作模式初始化 PCA2_PWM_Set(0x80); //设置占空比50% PCA_Control(PCA_START); //启动PCA计数器 while (1); }
端口PWM示波器扫描结果
P1.7
P1.6
P1.5



