我MC9S12DG128B中PWM生成1Hz 50%的方波(外晶振16M)
用PLL升频32后方波变成4Hz 50%了
我想应该是2Hz 50%才对的啊?
是不是我程序错了 或者计算有误?
请教大虾们来了
谢谢!
代码如下:
/********晶振16MHz PWM产生 1 Hz占空比为50%的矩形波,先为低后为高 *********/
//已经验证 正确
#include /* common defines and macros */
#include /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
/****** 初始化PLL锁相环 ******/
/*****void PLL_Init(void)
{
DisableInterrupts; //关全局中断
//设置PLL锁相环(内部)时钟32MHz为系统时钟 (外部时钟为16MHz,经PLL内部时钟为32MHz)
//PLLCTL=0x40; //
CLKSEL &= 0x7F;
REFDV = 1; //PLLCLK = 2*OSCCLK x (SYNR + 1)/(REFDV + 1)=64M
SYNR = 3;
while(!(CRGFLG&0x08));
while(CLKSEL != 0x80)
{
CLKSEL |= 0x80; //Bus Clock =PLLCLK/2=32M
}
} *********/
void pwminitial()
{
PWMPOL=0X01; //通道0输出波形开始极性为0 先为低后为高
PWMCAE=0x00; //左对齐输出模式
PWMCLK=0X01; //PWM时钟源为SA
PWMPRCLK=0X07; //时钟A128分频 Clock A is 16MHz/128=128KHz
PWMSCLA=0XFF; //时钟SA为128KHz/(256*2)/2 Clock SA is 128KHz/512/2=128Hz
PWMPER0=128; //设定输出周期=通道时钟周期*128 (1/128)*128=1s
PWMDTY0=64; //占空为50%
PWME=0X01; //通道0使能
}
void main()
{
//PLL_Init();
pwminitial();
DDRB=0XFF;
for(;;)
{
PORTB=PTP; //点亮LED
}
} |