1、用一个定时器来做时钟分频。具体datasheet,没什么好注意的。
#include <reg52.h>
#define uchar unsigned char
uchar PWM0_Set;
uchar PWM1_Set;
/================= PCA/PWM 特殊功能寄存器定义 ======================/
sfr CCON = 0xD8; //PCA控制寄存器
sfr CMOD = 0xD9; //PCA模式寄存器
sfr CL = 0xE9; //PCA Base Timer Low
sfr CH = 0xF9; //PCA Base Timer High
sfr CCAP0L = 0xEA; //PCA 模块0捕获寄存器 低
sfr CCAP0H = 0xFA; //PCA 模块0捕获寄存器 高
sfr CCAP1L = 0xEB; //PCA 模块1捕获寄存器 低
sfr CCAP1H = 0xFB; //PCA 模块1捕获寄存器 高
sfr CCAPM0 = 0xDA; //PCA 比较/捕获模块0寄存器
sfr CCAPM1 = 0xDB; //PCA 比较/捕获模块1寄存器
sbit CR = 0xDE; //PCA 计数器阵列运行控制位
/=========== 定时器 T0 初始化 ============/
void Init_Timer0(void)
{
TMOD |= 0x00; //使用方式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
TH0 = 0xFD; //装载初值
TL0 = 0x12; //PWM频率 = PCA时钟输入源频率 / 256
//50Hz频率 则 PCA时钟输入源频率 = 50 * 256 = 12800Hz = 1.28kHz
//定时器已经过12分频,所以Fosc = 1MHz,则 1.28kHz = Fosc / 78.125us
EA = 1; //总中断打开
ET0 = 1; //定时器中断打开
TR0 = 1; //定时器开关打开
}