MSP430时钟定性分析

发布者:alpha11最新更新时间:2019-03-14 来源: eefocus关键字:MSP430  时钟  定性分析 手机看文章 扫描二维码
随时随地手机看文章

1.时钟参数

1.1 宏定义时钟注释

//宏定义外接时钟,设置时钟很重要

#define EXTAL_IN_XT1_HZ   (  32768)

#define EXTAL_IN_XT2_HZ   (4000000)

//宏定义内部REFO,VLO时钟频率

#define VLOCLK_FREQUENCY  (  10000)

#define REFOCLK_FREQUENCY (  32768)


1.2 时钟来源

 switch(clk)

 {

  case CLOCK_XT1    :g_sClock.CLK.nHZ = EXTAL_IN_XT1_HZ;break;

  case CLOCK_VLO    :g_sClock.CLK.nHZ = VLOCLK_FREQUENCY;break;

  case CLOCK_REFO   :g_sClock.CLK.nHZ = REFOCLK_FREQUENCY;break;       

  case CLOCK_DCO    :g_sClock.CLK.nHZ = g_sClock.DCO_FLL_Frequency;break;    

  case CLOCK_DCO_DIV:g_sClock.CLK.nHZ = g_sClock.DCO_FLL_Frequency;break;

  case CLOCK_XT2    :g_sClock.CLK.nHZ = EXTAL_IN_XT2_HZ;break;

  default :return;

 }


1.3 时钟参数介绍

typedef enum

{

  CLOCK_XT1,        //XT1      

  CLOCK_VLO,        //内部10K

  CLOCK_REFO,       //内部32768

  CLOCK_DCO, //内部DCO,如果使用内部DCO作为时钟的话,需要先调用DCO_PLLConfig设置DCO频率

  CLOCK_DCO_DIV,   //DCO分频(分频为1且不允许修改,与DCO同频)

  CLOCK_XT2,       //XT2

}CLOCK_Source;     //时钟源


1.4 时钟分表

时钟源 时钟频率(HZ) 时钟源 时钟频率(Hz)

CLOCK_XT1 32768(32.768k) CLOCK_DCO 自主设置倍频

CLOCK_VLO 10000(10k) CLOCK_DCO_DIV 同CLOCK_DCO

CLOCK_REFO 32768(32.768k) CLOCK_XT2 4000000(4M)

2.频率配置过程

2.1 XT1时钟配置初始化

/*******************************************************************************

*  函数名称:XT1_Config(STATUS status)

*  功能说明:设置是否使能XT1

*  参数说明:STATUS status:是否使能XT1

*  函数返回:无

*  使用示例:XT1_Config(ENABLE);   //使能XT1

********************************************************************************/

static inline void XT1_Config(STATUS status)

{

  if(status != DISABLE)

  {

    if(UCS->XT1_OFF == BIT_SET)

    {

      GPIO_MultiBits_Init(P5,(GPIO_Pin_4|GPIO_Pin_5),GPI|SEL);   //选用 XT1 第二功能

      UCS->XT1_OFF = RESET ;                          // 开启 XT1                       

      do

      {

        UCS->XT1_LFOFFG = RESET;                     // 清除XT1,CLOCK_DCO 失效标志                     

        SFRIFG1 &= ~OFIFG;                           //

      }while (UCS->XT1_LFOFFG == BIT_SET);               //

    }

  }

  else

  {

    UCS->XT1_OFF = BIT_SET ;                          // 关闭 XT1                       

  }

}


2.2 XT2时钟配置初始化

/*******************************************************************************

*  函数名称:XT2_Config(STATUS status)

*  功能说明:设置是否使能XT2

*  参数说明:STATUS status:是否使能XT2

*  函数返回:无

*  使用示例:XT2_Config(TRUE);   //使能XT2

********************************************************************************/

static inline void XT2_Config(STATUS status)

{

  if(status != DISABLE)

  {

    if(UCS->XT2_OFF == BIT_SET)

    {

      GPIO_MultiBits_Init(P5,(GPIO_Pin_2|GPIO_Pin_3),GPI|SEL);      //选用 CLOCK_XT2 第二功能

      UCS->XT2_OFF = RESET;                         //开启 CLOCK_XT2                      

      do

      {

        UCS->XT2_OFFG = RESET;

        SFRIFG1 &= ~OFIFG;                       

      }while (UCS->XT2_OFFG == BIT_SET);

    }

  }

  else

  {

    UCS->XT2_OFF = BIT_SET ;                          // 关闭XT2                       

  }


}


2.3 内部时钟

CLOCK_VLO,CLOCK_REFO为内部时钟源,不需要配置和初始化。


2.4 DCO及DCO_DIV配置过程

由于DCO是可以自主倍频的,倍频函数为CLOCK_DCO_PLLConfig(FLLREF_Source, FLLREF_DIVx, uint32_t DCO_FLL_Fre),由于DCO_DIV分频为1且不允许修改,即DCO_DIV与DCO同频,下面好好分析一下倍频过程


2.4.1 时钟分频系数,共计6种选择

typedef enum

{

  FLLREF_DIV_1     ,   //不分频

  FLLREF_DIV_2     ,   //二分频

  FLLREF_DIV_4     ,   //四分频

  FLLREF_DIV_8     ,   //八分频

  FLLREF_DIV_12    ,   //十二分频

  FLLREF_DIV_16    ,   //十六分频

}FLLREF_DIVx;    //FLL参考时钟分频


2.4.2 参考分频时钟,总计3个

typedef enum

{

  FLLREF_XT1    =0u,    //32.768k

  FLLREF_REFO   =2u,    //10k

  FLLREF_XT2    =5u     //4M

}FLLREF_Source;  //FLL参考时钟源


2.4.3 倍频函数

/*******************************************************************************

*  函数名称:CLOCK_DCO_PLLConfig(FLLREF_Source refsource, FLLREF_DIVx refdiv, uint32_t DCO_FLL_Fre)

*  功能说明:设置DCO频率,单位(HZ)

*  参数说明:FLLREF_Source refsource :参考时钟源

             FLLREF_DIVx refdiv      :参考时钟源分频系数

             uint32_t DCO_FLL_Fre      :DCO设置频率

*  函数返回:无

********************************************************************************/

void CLOCK_DCO_PLLConfig     (FLLREF_Source refsource, FLLREF_DIVx refdiv, uint32_t DCO_FLL_Fre)

{

  static const uint16_t ref_div_value[6]={1,2,4,8,12,16};

  /*根据频率提高内核电压*/

  //SetVcoreUp ( (DCO_FLL_Fre < 12MHz) ? 0 : ((DCO_FLL_Fre < 16MHz) ? 1 : ((DCO_FLL_Fre < 20MHz) ? 2 :3))); //设置内核电压

  if(DCO_FLL_Fre < 12MHz)

    SetVcoreUp (0x00);                      //设置内核电压

  else if(DCO_FLL_Fre < 16MHz)

    SetVcoreUp (0x01);       

  else if(DCO_FLL_Fre < 20MHz)

    SetVcoreUp (0x02);       

  else

    SetVcoreUp (0x03);       


  __bis_SR_register(SCG0);                  // 禁止倍频环FLL,

  UCS->CTL0 = 0x0000;                       // 清零 DCOx, MODx


  if (DCO_FLL_Fre < 0.63MHz)         //           fsystem < 0.63MHz

    UCS->DCORSEL = 0;

  else if (DCO_FLL_Fre < 1.25MHz)    // 0.63MHz < fsystem < 1.25MHz

    UCS->DCORSEL = 1;

  else if (DCO_FLL_Fre < 2.5MHz)     // 1.25MHz < fsystem <  2.5MHz

    UCS->DCORSEL = 2;

  else if (DCO_FLL_Fre <   5MHz)     // 2.5MHz  < fsystem <    5MHz

    UCS->DCORSEL = 3;

  else if (DCO_FLL_Fre <  10MHz)     // 5MHz    < fsystem <   10MHz

    UCS->DCORSEL = 4;

  else if (DCO_FLL_Fre <  20MHz)     // 10MHz   < fsystem <   20MHz

    UCS->DCORSEL = 5;

  else if (DCO_FLL_Fre <  40MHz)     // 20MHz   < fsystem <   40MHz

    UCS->DCORSEL = 6;

  else

    UCS->DCORSEL = 7;


  UCS->FLLREFDIV = refdiv;

  UCS->SELREF = refsource;


  float Fref_value;

  if(refsource == FLLREF_XT2)

  {

    XT2_Config(TRUE);

    Fref_value = (float)((uint32_t)EXTAL_IN_XT2_HZ/ref_div_value[refdiv]);  

  }

  else if(refsource == FLLREF_XT1)

  {

    XT1_Config(TRUE);

    Fref_value = (float)(EXTAL_IN_XT1_HZ/ref_div_value[refdiv]);

  }

  else if(refsource == FLLREF_REFO)

  {

    Fref_value = (float)(REFOCLK_FREQUENCY/ref_div_value[refdiv]);

  }

  uint16_t FLLN_VALUE = (uint16_t)((DCO_FLL_Fre/Fref_value+0.5f)-1u);

  ASSERT(FLLN_VALUE < 1024,"CLOCK_DCO_PLLConfig","FLLN_VALUE不允许超过1023,请将DCO频率设低或者更换为更高频率的参考时钟源!");         //不允许超过1023,请将DCO频率设低或者更换为更高频率的参考时钟源


  g_sClock.DCO_FLL_Frequency = DCO_FLL_Fre;


  UCS->FLLN = FLLN_VALUE;        //

  UCS->FLLD = 0;     //设置DCO分频  


  __bic_SR_register(SCG0);                  // 使能FLL

  do

  {

    UCS->DCO_FFG = RESET; // 清除,CLOCK_DCO 失效标志                                        

    SFRIFG1 &= ~OFIFG;                                             // 清除时钟失效标志

  }while (UCS->DCO_FFG == BIT_SET);                                           // 检查DCO失效标志

  //将使用DCO作为时钟源的时钟频率值修改

  if(UCS->SELM == CLOCK_DCO || UCS->SELM == CLOCK_DCO_DIV)

  {

    CLOCK_DIVx div = (CLOCK_DIVx)UCS->DIVM;

    CLOCK_MCLK_Config ((CLOCK_Source)UCS->SELM, div);

  }


  if(UCS->SELS == CLOCK_DCO || UCS->SELS == CLOCK_DCO_DIV)

  {

    CLOCK_DIVx div = (CLOCK_DIVx)UCS->DIVS;

    CLOCK_SMCLK_Config((CLOCK_Source)UCS->SELS, div);

  }


  if(UCS->SELA == CLOCK_DCO || UCS->SELA == CLOCK_DCO_DIV)

  {

    CLOCK_DIVx div = (CLOCK_DIVx)UCS->DIVA;

    CLOCK_ACLK_Config ((CLOCK_Source)UCS->SELS, div);

  }

}


2.5 通过案例分析总结关键步骤

使用示例:


CLOCK_DCO_PLLConfig(FLLREF_REFO, FLLREF_DIV_1, 16MHZ); 

//设置DCO倍频环以REFO的一分频作为参考时钟源,倍频到16MHZ


1. 传入参数,分别传入参考时钟源FLLREF_REFO,分频系数FLLREF_DIV_1,所要倍频数

2. 根据时钟源选择内核电压,这里SetVcoreUp (0x02); UCS->DCORSEL = 5;

3. 确定时钟来源,计算参考频率,这里 Fref_value = 32768

4. 确定锁相环PLLN_VALUE值,这里PLLN_VALUE=487

5. 更新配置参数得到所要时钟频率


2.6 内核电压设置函数

/*******************************************************************************

函数功能:设置内核电压值(与频率设置有关)

函数参数:u8 level :电压阶梯 小于3

********************************************************************************/

void SetVcoreUp (uint8_t level)

{

#if 1  //仿真时修改为0,否则会卡在死循环里

  // Open PMM registers for write

  PMMCTL0_H = PMMPW_H;              

  // Set SVS/SVM high side new level

  SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;

  // Set SVM low side to new level

  SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;

  // Wait till SVM is settled

  uint16_t i=50000;

  while (((PMMIFG & SVSMLDLYIFG) == 0)&&((i--)>0));

  // Clear already set flags

  PMMIFG &= ~(SVMLVLRIFG + SVMLIFG);

  // Set VCore to new level

  PMMCTL0_L = PMMCOREV0 * level;

  // Wait till new level reached

  i =50000;

  if ((PMMIFG & SVMLIFG))

    while(((PMMIFG & SVMLVLRIFG) == 0)&&((i--)>0));

  /*

  if ((PMMIFG & SVMLIFG))

    while ((PMMIFG & SVMLVLRIFG) == 0);

  */

  // Set SVS/SVM low side to new level

  SVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level;

  // Lock PMM registers for write access

  PMMCTL0_H = 0x00;

#endif

}


3.各时钟输出

#define MCLK_OUT()                              GPIO_Init(P7,7,GPO | SEL)       //主时钟输出,   P7.7

#define SMCLK_OUT()                             GPIO_Init(P2,2,GPO | SEL)       //子系统时钟输出P2.2

#define ACLK_OUT()                              GPIO_Init(P1,0,GPO | SEL)       //辅助时钟输出  P1.0   

#define CLOCK_OUT()                            

3.1 设置主时钟源


/*************************************************************************

*  函数名称:CLOCK_MCLK_Config  (CLOCK_Source mclk , CLOCK_DIVx mclk_div)

*  功能说明:设置主时钟源及分频

*  参数说明:CLOCK_Source mclk   :主时钟时钟源

             CLOCK_DIVx mclk_div :主时钟分频系数

*  函数返回:无

*  使用示例:CLOCK_MCLK_Config  (CLOCK_DCO , DIV_1);   //主时钟使用DCO作为时钟源,分频系数为1(不分频)

*************************************************************************/  

--------------------- 

作者:klaus_x 

来源:CSDN 

原文:https://blog.csdn.net/klaus_x/article/details/81039706 

版权声明:本文为博主原创文章,转载请附上博文链接!

 

void CLOCK_MCLK_Config  (CLOCK_Source mclk , CLOCK_DIVx mclk_div)

{

  if(mclk == CLOCK_XT2)

  {

    XT2_Config(TRUE);

  }

  else if(mclk == CLOCK_XT1)

  {

    XT1_Config(TRUE);

  }


  UCS->SELM = mclk;                         //选择DCO作为时钟源

  UCS->DIVM = mclk_div;


  switch(mclk)

  {

  case CLOCK_XT1    :g_sClock.MCLK.nHZ = EXTAL_IN_XT1_HZ;break;

  case CLOCK_VLO    :g_sClock.MCLK.nHZ = VLOCLK_FREQUENCY;break;

  case CLOCK_REFO   :g_sClock.MCLK.nHZ = REFOCLK_FREQUENCY;break;       

  case CLOCK_DCO    :g_sClock.MCLK.nHZ = g_sClock.DCO_FLL_Frequency;break;    

  case CLOCK_DCO_DIV:g_sClock.MCLK.nHZ = g_sClock.DCO_FLL_Frequency;break;

  case CLOCK_XT2    :g_sClock.MCLK.nHZ = EXTAL_IN_XT2_HZ;break;

  default :return;

  }

  g_sClock.MCLK.nHZ  >>= mclk_div;

  g_sClock.MCLK.nKHZ = g_sClock.MCLK.nHZ/1000u;

  g_sClock.MCLK.fMHZ = g_sClock.MCLK.nHZ/1000000.0;

}


3.2 设置系统时钟源

/*************************************************************************

*  函数名称:CLOCK_SMCLK_Config (CLOCK_Source smclk, CLOCK_DIVx smclk_div)

*  功能说明:设置系统时钟源及分频

*  参数说明:CLOCK_Source smclk   :系统时钟时钟源

             CLOCK_DIVx smclk_div :系统时钟分频系数

*  函数返回:无

*  使用示例:CLOCK_SMCLK_Config  (CLOCK_DCO , DIV_2);   //系统时钟使用DCO作为时钟源,分频系数为2(二分频)

*************************************************************************/  

void CLOCK_SMCLK_Config (CLOCK_Source smclk, CLOCK_DIVx smclk_div)

{

  if(smclk == CLOCK_XT2)

  {

    XT2_Config(TRUE);

  }

  else if(smclk == CLOCK_XT1)

  {

    XT1_Config(TRUE);

  }


  UCS->SELS = smclk;//选择smclk时钟源

  UCS->DIVS = smclk_div;


  switch(smclk)

  {

  case CLOCK_XT1    :g_sClock.SMCLK.nHZ = EXTAL_IN_XT1_HZ;break;

  case CLOCK_VLO    :g_sClock.SMCLK.nHZ = VLOCLK_FREQUENCY;break;

  case CLOCK_REFO   :g_sClock.SMCLK.nHZ = REFOCLK_FREQUENCY;break;       

  case CLOCK_DCO    :g_sClock.SMCLK.nHZ = g_sClock.DCO_FLL_Frequency;break;

  case CLOCK_DCO_DIV:g_sClock.SMCLK.nHZ = g_sClock.DCO_FLL_Frequency;break;

  case CLOCK_XT2    :g_sClock.SMCLK.nHZ = EXTAL_IN_XT2_HZ;break;

  default :return;

  }

  g_sClock.SMCLK.nHZ >>= smclk_div;

  g_sClock.SMCLK.nKHZ = g_sClock.SMCLK.nHZ/1000u;;

  g_sClock.SMCLK.fMHZ = g_sClock.SMCLK.nHZ/1000000.0;

}


3.3 设置辅助时钟源

/*************************************************************************

*  函数名称:CLOCK_ACLK_Config  (CLOCK_Source aclk , CLOCK_DIVx aclk_div)

*  功能说明:设置辅助时钟源及分频

*  参数说明:CLOCK_Source aclk   :辅助时钟时钟源

             CLOCK_DIVx aclk_div :辅助时钟分频系数

*  函数返回:无

*  使用示例:CLOCK_ACLK_Config  (XT! , DIV_4);   //辅助时钟使用XT1作为时钟源,分频系数为4(四分频)

*************************************************************************/  

void CLOCK_ACLK_Config  (CLOCK_Source aclk , CLOCK_DIVx aclk_div)

{

   if(aclk == CLOCK_XT2)

  {

    XT2_Config(TRUE);

  }

  else if(aclk == CLOCK_XT1)

  {

    XT1_Config(TRUE);

  }


  UCS->SELA = aclk;//选择时钟源                   

  UCS->DIVA = aclk_div; //设置分频系数为0


  switch(aclk)

  {

  case CLOCK_XT1    :g_sClock.ACLK.nHZ = EXTAL_IN_XT1_HZ;break;

  case CLOCK_VLO    :g_sClock.ACLK.nHZ = VLOCLK_FREQUENCY;break;

  case CLOCK_REFO   :g_sClock.ACLK.nHZ = REFOCLK_FREQUENCY;break;       

  case CLOCK_DCO    :g_sClock.ACLK.nHZ = g_sClock.DCO_FLL_Frequency;break;   

  case CLOCK_DCO_DIV:g_sClock.ACLK.nHZ = g_sClock.DCO_FLL_Frequency;break;

  case CLOCK_XT2    :g_sClock.ACLK.nHZ = EXTAL_IN_XT2_HZ;break;

  default :return;

  }

  g_sClock.ACLK.nHZ >>= aclk_div;

  g_sClock.ACLK.nKHZ = g_sClock.ACLK.nHZ/1000u;;

  g_sClock.ACLK.fMHZ = g_sClock.ACLK.nHZ/1000000.0;

}


4.更改时钟来源操作

具体路径请改变msp430f5529_system.h里面的宏定义修改时钟源及时钟分频


//宏定义初始化时钟频率及时钟源

#define FLL_REF         FLLREF_REFO     //FLL参考时钟源

#define FLLREF_DIV      FLLREF_DIV_1    //FLL参考时钟分频系数

#define DCO_CLK_HZ      25MHZ            //DCO时钟频率

//主时钟设置

#define MCLK_SOURCE     CLOCK_DCO       //主时钟时钟源

#define MCLK_DIV        CLOCK_DIV_1     //主时钟时钟分频系数

//系统时钟设置

#define SMCLK_SOURCE    CLOCK_XT2       //系统时钟时钟源

#define SMCLK_DIV       CLOCK_DIV_1     //系统时钟分频系数

//辅助时钟设置

#define ACLK_SOURCE     CLOCK_REFO      //辅助时钟时钟源

#define ACLK_DIV        CLOCK_DIV_1     //辅助时钟分频系数


5.时钟图

1


关键字:MSP430  时钟  定性分析 引用地址:MSP430时钟定性分析

上一篇:MSP430定时器介绍
下一篇:NEC单片机 0527系列编程解读

推荐阅读最新更新时间:2024-03-16 16:25

C8051F320-时钟和4in1八段管
C8051F320包含一个内部振荡器,也可以采用其他方式提供振荡。手头没有任何元器件,所以只考虑使用内部振荡器。 一、时钟设定 系统复位时,默认使用内部振荡器作为系统时钟,出厂前已经将基频定为12MHZ,可以根据需要对其进行分频操作。 分频方法: 寄存器OSCICN 最低两位 D1D0的值决定了分频数,00~11分别为8分频、4分频、2分频、不分频。 此外,D7=1表示内部振荡器使能,反之禁止内部振荡器 D6=1内部振荡器频率准备好标志 D5=1强行挂起内部振荡器 寄存器OSCICL 内部振荡器校准,D4~D0的数值决定了校准后的频率偏差,计算方法由如下公式决定: 第
[单片机]
C8051F320-<font color='red'>时钟</font>和4in1八段管
STM32的时钟分割
TIM_TimeBaseStructure.TIM_ClockDivision ;//时钟分割 TIMx_CCMR1 寄存器 Fck_int是定时器的输入频率(TIMxCLK),一般是 72Mhz,而 则是根据 TIMx_CR1 的 CKD 的设置来确定的,如果 CKD 设置为 00,那么 = 。 N 值就是滤波长度,举个简单的例子:假设 IC1F =0011,并设置 IC1 映射到通道 1 上,且为上升沿触发,那么在捕获到上升沿的时候,再以的频率,连续采样到 8 次通道 1 的电平,如果都是高电平,则说明确实是一个有效的触发,就会触发输入捕获中断(如果开启了的话)。这样可以滤除那些高电平脉宽低于 8 个采样周期的脉冲信号
[单片机]
嵌入式低功耗射频/红外转换控制器的研制
  0 引言   在智能化家居控制系统应用中,无线通信和控制已经越来越广泛地被运用。为了实现对居室电器设备的集中无线控制,可采用电话遥控、手持遥控器进行远程或短距离的无线控制,但所控制和传输的信号都是RF信号。然而有些被控对象本身是用红外信号遥控的,例如电视机、空调,由于各种品牌的空调都有自己的红外编码信号,相互不能通用,这就给智能化家居控制系统中红外遥控器的集中无线控制带来了极大的不便。本文就基于Msp430的低功耗RF/红外控制器的设计与实现进行介绍。   1 工作原理   大多数红外遥控信号的输出都是用编码后串行数据对38~40KHz的方波进行脉冲幅度调制而产生的PWM信号,如图1所示。各种品牌的红外遥控器的编码信号
[工业控制]
基于MSP430的开关电源的系统设计方案和实验结果分析
MSP430系列单片机是美国TI公司生产的新一代16位单片机,是一种超低功耗的混合信号处理器(MixedSignal Processor),它具有低电压、超低功耗、强大的处理能力、系统工作稳定、丰富的片内外设、方便开发等优点,具有很高的性价比,在工程控制等领域有着极其广泛的应用范围。开关Boost稳压电源利用开关器件控制、无源磁性元件及电容元件的能量存储特性,从输入电压源获取分离的能量,暂时把能量以磁场的形式存储在电感器中,或以电场的形式存储在电容器中,然后将能量转换到负载。对DC—DC主回路采用Boost升压斩波电路。 2 系统结构和总设计方案 本开关稳压电源是以MSP430F449为主控制器件,它是TI公司生产的16位超低
[单片机]
基于<font color='red'>MSP430</font>的开关电源的系统设计方案和实验结果分析
数码管显示的电子时钟C51程序
/************************************************************* 功能:     实现电子时钟显示(C) 定义:     P3口位选,P1口段选,P0.0,P0.1,P0.2为调时口 时间:     2010 11 26 说明:     仿真存在问题,这可能是仿真软件的问题,需要将段位扫描反调 实际运行的结果是正确的 *************************************************************/ #include AT89X51.H unsigned char code dispcode ={0x3f,0x06,0x5b,0x
[单片机]
msp430学习笔记_按键点亮LED
//在系统上实现按一次按键,对应的发光二极管状态改变一次 #include msp430x14x.h void main(void) { WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 P2DIR = 0XfF; //全部P2口设置为输出 P2OUT = 0Xff; // 全部P2口设置为高电平 灯全灭 P1OUT = 0Xff; //P1口全部设置为高电平 P1DIR = 0Xf0; //全部P1口按键设置为输入,其他的为输出 P1IES = 0X0f; //P1口按键设置为下降沿触发 P1IFG = 0; //设置P1口全
[单片机]
MSP430F5529单片机程序整理(串口、AD、定时器等)
#include msp430.h #include stdint.h #include uart.h #include Flash.h #include ad.h #include stdio.h #include string.h #define CPU_F ((double)1000000) #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/
[单片机]
msp430F149调PWM
还说好好安下心调我的PID 结果又被某人喊调一个占空比为10%的PWM波 这不,直接上代码吧: But first,还是要先解释一下端口:按键改变PWM的占空比 按键IO口如下: 然后就是用P2.3和P2,4口输出两路PWM信号 #include msp430x14x.h #define uchar unsigned char #define uint unsigned int #define keyin (P1IN & 0x0f) uchar T ={10,20,40,100,150,200}; //高电平持续 void delay(void) { uint tmp; for(tmp =
[单片机]
<font color='red'>msp430</font>F149调PWM
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved