原创 [博客大赛]MSP430F系列单片机学习笔记_库函数编程思想

2013-5-6 09:15 12623 11 18 分类: MCU/ 嵌入式

        最近时间在准备TI430的电子竞赛,每天早上8点开始就一直在实验室,呆到晚上12点多才回来,虽然人已经很疲惫,但是还是坚持每天在EDN China博客更新MSP430F系列单片机的学习笔记,也算是经验总结吧。:)坚持!!

      今天想讲一下的就是MSP430F系列单片机的库函数编程思想,觉得效果很好,代码可移植性很强,实用价值很高!!

      已经很晚了,暂时分享一个简单的例程吧。

                                     基于MSP430F系列单片机TB的PWM输出

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/****************************************************************************
*  文件名称:
*          TB.c
*  文件说明:
*          使用TB输出PWM波形,可通过set_TB设定不同的模式
*****************************************************************************/
#include  "msp430x44x.h"
/******************************************************************************
* 设置TimerB输出PWM的工作模式
********************************************************************************/
void set_TB(int mode)
{
     if (mode==2)
     {                          // 翻转/复位模式,CCR1=25%,CCR2=75%
         TBCCR0  = 11;           // PWM 周期
         TBCCTL1 = OUTMOD_2;      // PWM toggle/reset
         TBCCR1  = 9;           // ccr1 Pwm cycle
         TBCCTL2 = OUTMOD_2;      // PWM toggle/reset
         TBCCR2  = 3;           // ccr2 Pwm cycle
         P2DIR |= BIT1;         // p2.1 模式设置
         P2SEL |= BIT1;         // p2.1 option select
         P2DIR |= BIT2;         // P2.2 output mode
         P2SEL |= BIT2;         // P2.2 option select
         TBCTL |= MC0;          // 设置递增模式
      }else if (mode==0x03)
      {                         //置位/复位模式,CCR1=25%,CCR2=75%

         TBCCR0  = 11;           // PWM 周期
         TBCCTL1 = OUTMOD_3;      // PWM toggle/reset
         TBCCR1  = 9;           // ccr1 Pwm cycle
         TBCCTL2 = OUTMOD_3;      // PWM toggle/reset
         TBCCR2  = 3;           // ccr2 Pwm cycle
         P2DIR |= BIT1;         // p2.1 output mode
         P2SEL |= BIT1;         // p2.1 option select
         P2DIR |= BIT2;         // P2.2 output mode
         P2SEL |= BIT2;         // P2.2 option select
         TBCTL |= MC0;          // 设置递增模式
      }else if (mode==0x04)
      {                         // 翻转模式,CCR1=50%,CCR2=50%
         TBCCR0  = 11;           // PWM 周期
         TBCCTL1 = OUTMOD_4;      // PWM toggle/reset
         TBCCR1  = 9;           // ccr1 Pwm cycle
         TBCCTL2 = OUTMOD_4;      // PWM toggle/reset
         TBCCR2  = 3;           // ccr2 Pwm cycle
         P2DIR |= BIT1;         // p2.1 output mode
         P2SEL |= BIT1;         // p2.1 option select
         P2DIR |= BIT2;         // P2.2 output mode
         P2SEL |= BIT2;         // P2.2 option select
         TBCTL |= MC0;          // 设置递增模式
      }else if (mode==0x06)
      {                         //翻转/置位模式,CCR1=75%,CCR2=25%

         TBCCR0  = 11;           // PWM 周期
         TBCCTL1 = OUTMOD_6;      // PWM toggle/reset
         TBCCR1  = 9;           // ccr1 Pwm cycle
         TBCCTL2 = OUTMOD_6;      // PWM toggle/reset
         TBCCR2  = 3;           // ccr2 Pwm cycle
         P2DIR |= BIT1;         // p2.1 output mode
         P2SEL |= BIT1;         // p2.1 option select
         P2DIR |= BIT2;         // P2.2 output mode
         P2SEL |= BIT2;         // P2.2 option select
        TBCTL |= MC0;           // 设置递增模式
      }else if (mode==0x07)
      {                         // 复位/置位模式

         TBCCR0  = 11;           // P1.2--> CCR1 - 75% PWM
                                // P2.0--> CCR2 - 25% PWM
                                // PWM 周期
         TBCCTL1 = OUTMOD_7;      // ccrl reset/set
         TBCCR1  = 9;           // ccr1 Pwm cycle
         TBCCTL2 = OUTMOD_7;      // ccr1 reset/set
         TBCCR2  = 3;           // ccr2 Pwm cycle
         P2DIR |= BIT1;         // p2.1 output mode
         P2SEL |= BIT1;         // p2.1 option select
         P2DIR |= BIT2;         // P2.2 output mode
         P2SEL |= BIT2;         // P2.2 option select
         TBCTL |= MC0;          // 设置递增模式
      }
}
/******  在Timer B的不同工作模式下输出PWM波形  *****/
void main()
{
     unsigned int pwm_Delay;
     char tmpv,tmp[5] = {2,3,4,6,7};

     WDTCTL = WDTHOLD + WDTPW;  //关闭看门狗
     FLL_CTL0 |= XCAP14PF;
     TBCTL = TBSSEL0 + TBCLR;  //ACLK,清除TAR
     tmpv=0;
     while(1)
     {
        set_TB(tmp[tmpv]);      //选择 PWM 模式
        tmpv = (tmpv + 1) % 5;  //改变模式
        for(pwm_Delay=0;pwm_Delay<0xffff;pwm_Delay++);//delay
     };
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//愿意结识爱好电子的友友

// :)

// 2013-05-05 01:09

// 晚安,深圳

PARTNER CONTENT

文章评论7条评论)

登录后参与讨论

用户377235 2013-5-23 08:17

insit on

chen_zs2012_704941858 2013-5-9 14:33

嗯嗯,可以的,个人习惯吧,:)

用户377235 2013-5-9 10:05

兄弟,那么多else-if我觉得应该改成switch-case更好

chen_zs2012_704941858 2013-5-6 12:44

其中滋味只有自己知道。。。

chen_zs2012_704941858 2013-5-6 12:38

51假期都是一样过的。。。

用户403664 2013-5-6 09:27

坚持到凌晨啊!

用户436823 2013-5-5 08:13

赞一个.....
相关推荐阅读
chen_zs2012_704941858 2014-03-19 17:49
学习LabVIEW要记住的几句话
学习LabVIEW要记住的几句话1. LabVIEW是门程序设计语言,不是画图工具!2. 不要以为LabVIEW很简单,设计个庞大工程难度不亚于C++!3. 语言本身永远只是招式,请注意修炼内功:数据...
chen_zs2012_704941858 2014-01-24 23:46
【博客大赛】易络盟-飞思卡尔MCU大赛_KL25Z
【博客大赛】易络盟-飞思卡尔MCU大赛    Element14、Embest、Freescale三方联合推出的FRDM-KL...
chen_zs2012_704941858 2014-01-24 23:20
《深入理解Altera FPGA 应用设计》赠书已到,感谢EDNChina和coyoo博主
《深入理解Altera FPGA 应用设计》赠书已到,感谢EDNChina和coyoo博主         //深圳 ...
chen_zs2012_704941858 2014-01-20 20:08
【博客大赛】单片机软件抗干扰的几种常见方法
【博客大赛】单片机软件抗干扰的几种常见方法       在提高硬件系统抗干扰能力的同时,软件抗干扰以其设计灵活、节省硬件资源、可靠性好越来越受到重视。下面以MCS-51单片机系统为例,...
chen_zs2012_704941858 2014-01-19 21:19
【博客大赛】说说单片机、PSOC、FPGA之间的主要区别
【博客大赛】说说单片机、PSOC、FPGA之间的主要区别   现在的单片机一般是mcu+有限的固定的模拟或数字外围;FPGA是可编程数字外围电路;PSoC 相当于MCU+可编程模拟外围电路...
chen_zs2012_704941858 2014-01-19 16:13
你知道你的个人隐私在互联网上有多么的多不堪一击吗?
你知道你的个人隐私在互联网上有多么的多不堪一击吗?     //听着就恐怖,看着就可怕!我已经开始清理我在互联网的个人隐私了,你呢?   最近我废弃了两个加起来用了十几年的QQ...
EE直播间
更多
我要评论
7
11
关闭 站长推荐上一条 /3 下一条