⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 “飞思卡尔”MC9S12XS128微控制器输出PWM的一个程序
💻 C
字号:
/*---------------------------------------------------------*/
/************************************************************
飞翔科技MC9S12XS128汽车电子综合开发平台 
E-mail:bhfengchong@gmail.com
       2008f.d@163.com
淘宝店:http://fxfreefly.taobao.com
        http://fxfreefly2.taobao.com
************************************************************/
/*---------------------------------------------------------*/
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */

#define LEDCPU PORTK_PK4
#define LEDCPU_dir DDRK_DDRK4
#define BUS_CLOCK		   32000000	   //总线频率
#define OSC_CLOCK		   16000000	   //晶振频率

/*************************************************************/
/*                      初始化锁相环                         */
/*************************************************************/
void INIT_PLL(void) 
{
    CLKSEL &= 0x7f;       //set OSCCLK as sysclk
    PLLCTL &= 0x8F;       //Disable PLL circuit
    CRGINT &= 0xDF;
    
    #if(BUS_CLOCK == 40000000) 
      SYNR = 0x44;
    #elif(BUS_CLOCK == 32000000)
      SYNR = 0x43;     
    #elif(BUS_CLOCK == 24000000)
      SYNR = 0x42;
    #endif 

    REFDV = 0x81;         //PLLCLK=2×OSCCLK×(SYNR+1)/(REFDV+1)=64MHz ,fbus=32M
    PLLCTL =PLLCTL|0x70;  //Enable PLL circuit
    asm NOP;
    asm NOP;
    while(!(CRGFLG&0x08)); //PLLCLK is Locked already
    CLKSEL |= 0x80;        //set PLLCLK as sysclk
}

/*************************************************************/
/*                        初始化PWM                          */
/*************************************************************/
void init_pwm(void) 
 {
  PWMCTL_CON01= 1;   //联结通道0,1为16位的PWM
  PWMPOL_PPOL1= 1;   //通道01的极性为高电平有效
  PWMPRCLK = 0x55;   //A时钟和B时钟的分频系数为32,频率为1MHz
  PWMSCLA  =   25;   //SA时钟频率为20KHz
  PWMCLK =0x02;      //通道01用SA时钟作为时钟源
  PWMPER01  = 200;   //通道01的周期为100Hz 
  PWMDTY01  = 0;     //通道01的占空比为0%  
  PWME_PWME1 = 1;    //使能通道01
 }

/*************************************************************/
/*                        延时函数                           */
/*************************************************************/
void delay(void) 
{
    unsigned int i,j;
    for(i=0;i<20;i++)
      for(j=0;j<50000;j++);
}

/*************************************************************/
/*                          主函数                           */
/*************************************************************/
void main(void) {
  DisableInterrupts; 
  INIT_PLL();
  init_pwm();
  LEDCPU_dir=1;
  LEDCPU=0;
  EnableInterrupts; 

  for(;;) 
  {
      delay();
      PWMDTY01=20;     //占空比为10%
      delay();
      PWMDTY01=40;     //占空比为20%
      delay();
      PWMDTY01=60;     //占空比为30%
      delay();
      PWMDTY01=80;     //占空比为40%
      delay();
      PWMDTY01=100;     //占空比为50%
      delay();
      PWMDTY01=120;     //占空比为60%
      delay();
      PWMDTY01=140;     //占空比为70%
      delay();
      PWMDTY01=160;     //占空比为80%
      delay();
      PWMDTY01=180;     //占空比为90%
      delay();
      PWMDTY01=200;     //占空比为100%
      delay();
      PWMDTY01=180;     //占空比为90%
      delay();
      PWMDTY01=160;     //占空比为80%
      delay();
      PWMDTY01=140;     //占空比为70%
      delay();
      PWMDTY01=120;     //占空比为60%
      delay();
      PWMDTY01=100;     //占空比为50%
      delay();
      PWMDTY01=80;     //占空比为40%
      delay();
      PWMDTY01=60;     //占空比为30%
      delay();
      PWMDTY01=40;     //占空比为20%
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -