发新帖我要提问
12
返回列表
打印

求一个定时器B的pwm例程

[复制链接]
楼主: zhanghqi
手机看帖
扫描二维码
随时随地手机跟帖
21
typeof| | 2018-10-15 21:45 | 只看该作者 回帖奖励 |倒序浏览
定时器是单片机常用的其本设备,用来产生精确计时或是其他功能

使用特权

评论回复
22
usysm| | 2018-10-15 21:45 | 只看该作者
P8DIR |= BIT1;              // 设置P1.2为输出    P8SEL |= 0x01; // 设置P1.2为TA0.1输出

使用特权

评论回复
23
cehuafan| | 2018-10-15 21:45 | 只看该作者
#include <msp430f5438a.h>
void delay_1us(void)
   {
     unsigned int i;
     for(i=0;i<100;i++);
   }

// *************************************************************
// 延时函数,延时N*1us
// *************************************************************
void delay_nus(unsigned int n)
   {
     unsigned int i;
     for(i=0;i<n;i++)
     {
       delay_1us();
     }
   }

// *************************************************************
// 延时函数,延时1ms
// *************************************************************
void delay_1ms(void)
   {
     unsigned int i;
     for (i=0;i<1140;i++);
   }

// *************************************************************
// 延时函数,延时N*ms
// *************************************************************
void delay_nms(unsigned int n)
   {
     unsigned int i;
     for (i=0;i<n;i++)
     {
       delay_1ms();
     }
   }

// *************************************************************
// 主程序
// *************************************************************
void main(void)
{
   unsigned const PWMPeriod = 200;
   unsigned const PWMPeriod1= 300;
   unsigned int i;
   unsigned int j;
   WDTCTL = WDTPW + WDTHOLD;   // 关闭看门狗
   P8DIR |= BIT1;              // 设置P1.2为输出
   P8SEL |= 0x01; // 设置P1.2为TA0.1输出
   TA0CCAR0=500-1;
   TA0CCTL1 = OUTMOD_7;           // 设置PWM 输出模式为:7 - PWM复位/置位模式,              
   TA0CCR1 =PWMPeriod;           // 设置PWM 周期
   TA0CCTL2 = OUTMOD_7;
   TA0CCR2 = PWMPeriod1;// 即输出电平在TAR的值等于CCRx时复位,当TAR的值等于CCR0时置位。
   TA0CTL = TASSEL_2 + MC_1;    // 设置TIMERA的时钟源为SMCLK, 计数模式为up
// _BIS_SR(LPM0_bits + GIE);

   
   while(1)
   {
     //渐亮过程:不断设置CCR1的值,使翻转的时间变长,改变PWM的占空比
     
    for(i=0;i<PWMPeriod;i+=1)
     {
       TA0CCR1=i;
       delay_nus(600);           //占空比变化的延时,调整延迟时间可改变呼吸灯变亮的速度
     }
     //渐暗过程:不断设置CCR1的值,使翻转的时间变短,改变PWM的占空比
     
    for(i=PWMPeriod;i>0;i-=1)
     {
       TA1CCR1=i;
       delay_nus(50);           //占空比变化的延时,调整延迟时间可改变呼吸灯变暗的速度
     }
     delay_nms(70);
   
  
   
}
}

使用特权

评论回复
24
xiaoyaozt| | 2018-10-15 21:45 | 只看该作者
详细参考示例工程和main.c。

使用特权

评论回复
25
Ryze| | 2018-10-24 22:27 | 只看该作者
TAPwmSetDuty(1,200);        //1通道 有效200个时钟周期

使用特权

评论回复
26
拉克丝| | 2018-10-27 22:25 | 只看该作者
定时器TA初始化成为PWM发生器

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则