MSP430g2553为什么下面的程序不能产生PWM波
voidmain(void){WDTCTL=WDTPW+WDTHOLD;//停止看门狗init_clk();//初始化时钟TACCTL1|=OUTMOD_7;TACCR0...
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //停止看门狗
init_clk(); //初始化时钟
TACCTL1 |= OUTMOD_7;
TACCR0 = 32768 - 1;
TACCR1 = 8192;
TACTL |= TASSEL_2 + TACLR + MC_1;
P1DIR |= BIT4; //方向为输出
P1OUT |= BIT4; //选择外部模块功能
LPM0;
} 展开
{
WDTCTL = WDTPW + WDTHOLD; //停止看门狗
init_clk(); //初始化时钟
TACCTL1 |= OUTMOD_7;
TACCR0 = 32768 - 1;
TACCR1 = 8192;
TACTL |= TASSEL_2 + TACLR + MC_1;
P1DIR |= BIT4; //方向为输出
P1OUT |= BIT4; //选择外部模块功能
LPM0;
} 展开
6个回答
展开全部
应该先设置IO口,再初始化CCR0和CCR1。我这有一段程序,供你参考。我自己是用TI公司免费的板子MSP-EXP430G2。
/********************************************************
说明:P1.2口输出矩阵波
*******************************************************/
#include<msp430g2553.h>
void main(void)
{
WDTCTL=WDTPW+WDTHOLD; //停止看门狗
P1DIR |=0x42; //设P1.2和P1.3为输出
P1SEL |=0x42; //设P1.2和P1.3为模块功能
CCR0=512-1; //装入PWM周期值
CCTL1=OUTMOD_7; //设CCR1输出单元为复位/置位输出模式
CCR1=348; //装入CCR1PWM的占空值
TACTL=TASSEL_1+MC_1; //时钟源选择ACLK定时器A增计数模式
_BIS_SR(LPM3_bits); //进入LPM3低功耗模式
}
/********************************************************
说明:P1.2口输出矩阵波
*******************************************************/
#include<msp430g2553.h>
void main(void)
{
WDTCTL=WDTPW+WDTHOLD; //停止看门狗
P1DIR |=0x42; //设P1.2和P1.3为输出
P1SEL |=0x42; //设P1.2和P1.3为模块功能
CCR0=512-1; //装入PWM周期值
CCTL1=OUTMOD_7; //设CCR1输出单元为复位/置位输出模式
CCR1=348; //装入CCR1PWM的占空值
TACTL=TASSEL_1+MC_1; //时钟源选择ACLK定时器A增计数模式
_BIS_SR(LPM3_bits); //进入LPM3低功耗模式
}
展开全部
#include <msp430g2553.h>
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
{
while(1); // If calibration constants erased, trap CPU!!
}
BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation
BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO
IFG1 &= ~OFIFG; // Clear OSCFault flag
BCSCTL1 |= DIVA_3;//设置辅助时钟 其源是LFXT1,对其8分频 // ACLK = VLO/8
BCSCTL2 |= SELM_3 + DIVM_3 + DIVS_3; // MCLK = DCO/8, SMCLK = DCO/8
P1DIR|=BIT2;
P1SEL|=BIT2;
//以上(理论上要设置6个)2句是将P1.2用于输出PWM的设置
TACTL = TASSEL_2 + MC_1; // Source: 1/1*SMCLK, UP mode 增 允许中断
CCR0 = 3100;//Timer count 5100
CCR1 = 1000;
CCTL1 |= OUTMOD_3;
_BIS_SR(GIE);
for(;;);
}
P1.2产生PWM 已经试验过了,可以的
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
{
while(1); // If calibration constants erased, trap CPU!!
}
BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation
BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO
IFG1 &= ~OFIFG; // Clear OSCFault flag
BCSCTL1 |= DIVA_3;//设置辅助时钟 其源是LFXT1,对其8分频 // ACLK = VLO/8
BCSCTL2 |= SELM_3 + DIVM_3 + DIVS_3; // MCLK = DCO/8, SMCLK = DCO/8
P1DIR|=BIT2;
P1SEL|=BIT2;
//以上(理论上要设置6个)2句是将P1.2用于输出PWM的设置
TACTL = TASSEL_2 + MC_1; // Source: 1/1*SMCLK, UP mode 增 允许中断
CCR0 = 3100;//Timer count 5100
CCR1 = 1000;
CCTL1 |= OUTMOD_3;
_BIS_SR(GIE);
for(;;);
}
P1.2产生PWM 已经试验过了,可以的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.查查2553的手册,io对不对。
2.pwm算定时器功能,应该在TA里,看看设置
3.基本功能调试成功前最好别开低功耗,比如最后一句…
4.晚上手机上网,没手册,要是还没解决请追问,我再看看。用这个芯片做过竞赛,pwm不难出
2.pwm算定时器功能,应该在TA里,看看设置
3.基本功能调试成功前最好别开低功耗,比如最后一句…
4.晚上手机上网,没手册,要是还没解决请追问,我再看看。用这个芯片做过竞赛,pwm不难出
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
虽然不知道你的初始化时钟程序是什么。但很明显你的Pwm输出端口设置错了,你用的是定时器0(timer_0)以及CCi1A来产生PWm。根据端口手册你只能选择p1.2和p1.6来输出。另外端口的第二功能(就是你所说的外部模块功能)选择应该是PxSEL(x=1,2)。
希望对你有帮助!!!
希望对你有帮助!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
msp430g2553产生PWM波,TA0支持的引脚有P1.1,P1.2,P1.5,P2.6(P2.6一般不用,因为要接晶振);TA1支持的引脚有P2.0——》P2.5。所以P1.4不在范围内。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询