MSP430F系列单片机学习笔记_库函数编程思想
[复制链接]
最近时间在准备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
- };
- }
|