已经做了修改,两个通道的波形都出来了。但是周期有问题。在DIVM默认状态下(00H,即:外接晶振不分频,直接转换成fOSC).预期是出来个1M的信号。但是现在频率都是变成2倍的了。这是什么原因?
程序如下:请周工指教啊。。比较急了
/******************************************* PWM测试,外接16M晶振,A通道产生占空比3:4的波形,D通道产生占空比1:4的波形。PWM频率为1M。 *******************************************/ #include "reg936.h" #include "intrins.h"
#define uchar unsigned char #define ulong unsigned long
void Power_Down ();//电源管理 void CCU_Ini();//PWM发生
void main() { DIVM=0; P1M1=0; P1M2=0;// 设置P1 口 P2M1=0; P2M2=0;// 设置P2 口 CCU_Ini();//开启PWM }
void Power_Down (void)//电源 { PCONA=0xFF; //外部功能模块掉电 PCON=0x03; //完全掉电 }
void CCU_Ini()//PWM输出 { OCA=1; OCD=1; TCR21=0X87; //CCLK=OSCLK/2N,DIVM=0,所以CCLK=OSCLK=16M
//PLL预分频,PLLCLK=PCLK/(N+1)=16M/2/(7+1)=1M //CCUCLK=1M*32=32M //要得到的PWM频率为1M,则定时器重装值=CCU频率/PWM频率=32M/1M=32=0x20 CCCRA=0X03; CCCRD=0X03; TCR20=0X80; //停,PLLEN=1 OCA=1; while(!PLLEN);//等待 TOR2H=0X00; TOR2L=0X10; //定时器重装值 TCR21|=0x80;//更新 OCRAH=0X00; OCRAL=0X40; //A通道的比较值8 OCRDH=0X00; OCRDL=0XC0; //峰值为32,反向的PWM,占空比为3:4 TCR21|=0x80;//更新 TCR20|=7; //启动定时器,非对称PWM,递减计数 }
|