Timer_A之典型应用——PWM

来源:本站
导读:目前正在解读《Timer_A之典型应用——PWM》的相关信息,《Timer_A之典型应用——PWM》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《Timer_A之典型应用——PWM》的详细说明。
简介:这两天没有闲着的自己,重点还是放在了Timer_A上,总觉得这一块再学一个星期也未必能掌握。接下来与大家分享一下自己“玩”PWM的亲身经历吧。PWM即脉冲调制,想必大家应该知道,强大的Timer_A可以输出任意占空比的脉冲。上次我分享的是定时闪烁,很简单但效果很直观。而这次我的简单玩法依然是通过led的直观来测试我的程序效果的!观察led的亮暗程度得以验证。

接下来的程序采用的单片机均为MSP430F149,编程环境为IAR

程序一:

#include "msp430x14x.h"

void main( void )

{

WDTCTL = WDTPW + WDTHOLD; //关看门狗

TACTL=TASSEL0+TACLR+MC0; //ACLK为时钟源,清TAR,增计数模式

TACCR0=512-1; //设定PWM周期

TACCTL1=OUTMOD_7; //CCR1输出为reset/set模式

TACCR1=384; //CCR1的PWM占空比设定

TACCTL2=OUTMOD_7; //CCR2输出为reset/set模式

TACCR2=128; //CCR2的PWM占空比设定

P1DIR|=0X0c; //P1.2、P1.3输出,对应TA1,TA2

P1SEL|=0X0c; //TA1,TA2输出功能

while(1);

}

功能:P1.2,P1.3分别输出TA1,TA2的pwm信号,通过杜邦线接两个led,

可观察到不同占空比的pwm效果。一个亮些,一个暗些。

程序二:

#include "msp430x14x.h"

void main( void )

{

// Stop watchdog timer to prevent time out reset

WDTCTL = WDTPW + WDTHOLD;

TBCTL=TBSSEL_2+TBCLR+MC0; //SMCLK(800K),增模式

TBCCTL1=OUTMOD_3; //置位/复位模式

TBCCR0=8000; //PWM周期

TBCCR1=0; //PWM的低电平时间

P4DIR=0X02; //P4.1输出,P4.1受TBCCR1控制

P4SEL=0X02; //P4.1作为定时器B的PWM输出

P1DIR=0XFC; //P1.0 P1.1输入

P1IE=0X03; //允许中断P1.1和P1.2

P1IES=0XFC; //上升沿中断

_EINT();

while(1);

}

#pragma vector=PORT1_VECTOR

__interrupt void PORT_INTERRUPT(void)

{

uint i;

for(i=8000;i>0;i--); //延时,去抖

if(P1IFG&BIT0)

{

if(TBCCR1>=8000)

{

TBCCR1=1000;

}

else

{

TBCCR1=TBCCR1+1000;

}

}

if(P1IFG&BIT1)

{

if(TBCCR1<1000)

{

TBCCR1=8000;

}

else

{

TBCCR1=TBCCR1-1000;

}

}

P1IFG=0X00; //消除按键中断标志

}

功能:通过P4.1外接一个led灯

430板子的key1,key2调节亮度。一个增,一个减。

今天的分享就这样结束了,有什么不足之处希望大家指正。最后希望大家能一起探讨学习过程中的疑问,分享自己的经历,大家一起努力。

提醒:《Timer_A之典型应用——PWM》最后刷新时间 2024-03-14 01:05:51,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《Timer_A之典型应用——PWM》该内容的真实性请自行鉴别。