MC9S12XS128 8位PWM 舵机控制

来源:互联网 发布:tensorflow中文版文档 编辑:程序博客网 时间:2024/06/06 03:47

Designed by 袁思远
E-mail:fantasy_ysy@163.com 
最后更新:2012年10月16日           
相关信息参考下列地址:
博客:  http://blog.163.com/fantasy_ysy/
------------------------------------
Code Warrior 5.0
Target : MC9S12XS128
Crystal: 16.000Mhz 
============================================   
本程序主要包括以下功能:
1.设置系统工作在80MHZ bus clock时钟下;
2.初始化PWM 
3.PWM1 舵机控制 PP1引脚 

#include     
#include"derivative.h"     



void SetBusCLK_80M(void)
  
   CLKSEL=0X00;    //disengagePLL to system
   PLLCTL_PLLON=1;   //turnon PLL
    SYNR =0xc0 |0x09;                        
   REFDV=0x80 | 0x01; 
   POSTDIV=0x00;      //pllclock=2*osc*(1+SYNR)/(1+REFDV)=160MHz;
   _asm(nop);         //BUS CLOCK=80M
   _asm(nop);
   while(!(CRGFLG_LOCK==1));  //when pll is steady ,then use it;
   CLKSEL_PLLSEL=1;         //engage PLL to system; 
}



void PWMInit()
{
  PWMPOL=0X02;  //通道0输出波形开始极性为1
  PWMCAE=0x00;  //左对齐输出模式
  PWMCLK=0X02;  //PWM时钟源为 SAClock SA is the clock source for PWM channel1
  PWMPRCLK=0X05; //总线时钟128分频 Clock A is80MHz/32=2500000Hz
  PWMSCLA=0X7d;  //对Clock A125*2分频 ,时钟SA为80M/32/125/2=10000Hz
  PWMPER1=0Xc8; //设定输出周期=通道时钟周期*200,即频率=10000/200=50Hz, 即周期为20ms
  PWMDTY1=0x0f;  //占空比 Dutyis   0x0f/0xc8=15/200
 PWME=0X02;    //通道1使能 enable pwm channel 1  PP1引脚

}



void main(void) 
{
  SetBusCLK_80M();
  PWMInit();  
  
 EnableInterrupts;


  for(;;) {
   _FEED_COP();
  }
 
}


0 0