PLL0CN |= 0x01; // PLL上电
PLL0DIV = 0x01; // 参考时钟不分频
PLL0FLT = 0x01; // 设置PLL滤波器
PLL0MUL = 0x02; // 倍频系数等于2
for (loop=0; loop < 256; loop++); // 至少等待5us
PLL0CN |= 0x02; // PLL使能
while(!(PLL0CN & 0x10)); // 等待PLL频率稳定
CLKSEL = 0x02; // 选择PLL振荡器
SFRPAGE = SFRPAGE_save; // 恢复SFR页
}
void PORT_Init (void)
{
char SFRPAGE_save = SFRPAGE; // 保存当前SFR页
SFRPAGE = CONFIG_PAGE; // 设置SFR页
XBR0 = 0x08; // P0.0
XBR1 = 0x00;
XBR2 = 0x40; // 使能交叉开关
P0MDOUT |= 0x01; // 设置CEX0(P0.0)为推挽方式
SFRPAGE = SFRPAGE_save; // 恢复SFR页
}
void PCA0_Init (void)
{
char SFRPAGE_save = SFRPAGE; // 保存当前SFR页
SFRPAGE = PCA0_PAGE; //把页码改到PCA寄存器所在的页码
PCA0CN = 0x00; // 停止计数器,清除所有标志
PCA0MD = 0x00; // 系统时钟12分频
PCA0CPM0 = 0x46; // 频率输出模式
PCA0CPH0 = (SYSCLK/12)/(2*CEX0_FREQUENCY);
CR = 1; //启动PCA计数器
SFRPAGE = SFRPAGE_save; //恢复SFR页
}
如何修改生成多路PWM方波? |