MSP430g2553为什么下面的程序不能产生PWM波

MSP430g2553为什么下面的程序不能产生PWM波,第1张

应该先设置IO口,再初始化CCR0和CCR1。我这有一段程序,供你参考。我自己是用TI公司免费的板子MSP-EXP430G2。

/

说明:P12口输出矩阵波

/

#include<msp430g2553h>

void main(void)

{

WDTCTL=WDTPW+WDTHOLD; //停止看门狗

P1DIR |=0x42; //设P12和P13为输出

P1SEL |=0x42; //设P12和P13为模块功能

CCR0=512-1; //装入PWM周期值

CCTL1=OUTMOD_7; //设CCR1输出单元为复位/置位输出模式

CCR1=348; //装入CCR1PWM的占空值

TACTL=TASSEL_1+MC_1; //时钟源选择ACLK定时器A增计数模式

_BIS_SR(LPM3_bits); //进入LPM3低功耗模式

}

1CACTL2 = P2CA4; // CA1/P11 = +comp

这一句已经激活了P11的功能了

2在这个程序中根本就用不到delay这个程序

是别人后加的 就算有 也不是系统编好的 需要自己编写

3那句低功耗的程序没有错 应该是仿真 *** 作问题 我也遇到过 我自己瞎整 有个方法 我也不知道原理 你在中断程序第一句设个切换断点再试试

至于程序的意义 我认为:P11是输入的不是输出的。全置零 进入低功耗 等计时周期 唤醒cpu,把P11输入的电压值和025Vcc比较,进入低功耗,等计时周期 唤醒cpu P11与05Vcc比较 进入低功耗 等计时周期~~~~~~~

个人意见 不能肯定是对的 你参考一下吧~~~~

设置IAR , options-> FET Debugger->Download:

在Flash erase 栏目中,有三个选项,分别是

1 只擦除主存储区

2 擦除主存储区和信息区

3 保留未改变的存储区。

选择第一项

然后只烧写写入Flash程序,单步调试,调出FLASH窗口,可以看到写入后的数据;

如果写入数据不对,请试试在写入之前配置好FNx(分频,257K~476K)或关其它中断

看起来数组应该是音乐数据,其中包括四种数据,就是休止符(每个100毫秒)、歌曲结束符、音阶(给出的是蜂鸣器的震荡周期)、一个音阶持续的时间长度。如果你的晶振是12MHz,按照定时器中断给Count加一来看,音阶持续的时间应该是以10毫秒为单位。 Play_Song函数要求给出参数i我的看法是这个i是指要播放第几段乐曲,i*217表示每段乐曲都是217个字节。本例中95数组只给出217个字节,所以只有一段乐曲,播放时需要给出参数i=0. if ( Temp1 == 0xFF ) &#47;&#47;休止符 { TR0 = 0; Delay_xMs(100); } 所以休止符每个固定是100毫秒。 如果读到第一个不是休止符或者结束符的字节那就是音阶,而下一个字节就是这个音阶的长度或者说节拍 while(1) { FMQ = ~FMQ; Delay_xMs(Temp1); if ( Temp2 == Count ) { Count = 0; break; } } 这一段是说,如果当前音阶的时间(Temp2次定时器中断,由Count计时)还没完,就每隔Temp1毫秒震动一次蜂鸣器,就形成一个震动频率,这段时间就发出一定音调的乐音不过我也有疑惑,震荡周期如果以毫秒为单位恐怕只能发出次声波,所以以上对有关Delay_xMs函数时间的估算都可能有问题907还得看Delay_xMs函数的具体定义才行。

#include <msp430g2553h>

#include "12864h"

float temp;

float voltage;

void main(void)

{

unsigned char s1[] ={"宝鸡文理学院"};

unsigned char s2[] ={"MSP430GLAUNCHPAD"};

unsigned char s3[] ={"测得当前峰峰值:"};

unsigned char s4[] ={"V"};

WDTCTL = WDTPW+WDTHOLD; // 停止看门狗定时器

P2SEL=0x00;//p26和p27管教默认的第一功能是外部晶体振荡器的接口,设置第二功能-通用IO口

P2DIR |= BIT6+BIT7;//设置P26,P27位输出

P1SEL = 0x01;//将IO选择为AD输入

P1DIR = 0;

/将内部DCO校准至1MHz/

BCSCTL1 |= CALBC1_1MHZ;

DCOCTL |= CALDCO_1MHZ;

BCSCTL2 |= SELM_0;//MCLK采用1M的内部DCO

BCSCTL2 |= DIVS_2;//SMCLK采用250K的时钟

init_lcd();

delay_ms(10);

wr_string(1,0,s1);//写参数格式:wr_string(uchar x,uchar y,uchar p);

wr_string(0,1,s2);

wr_string(0,2,s3);

ADC10CTL0 |= SREF_1+REF2_5V+REFON+ADC10IE;//将AD10基准设置为25V 开启AD允许中断

ADC10CTL0 |= ADC10SHT_0+MSC;//打开AD转换,过采样率设置为4个采样周期

ADC10CTL1 |= ADC10SSEL_3+SHS_0;//选择250K的采样时钟,用ADC10SC触发采集

ADC10CTL1 |= CONSEQ_2+INCH_0;//采样模式,通道0

ADC10CTL0 |= ADC10ON;

ADC10AE0 |= 0xFF;

ADC10CTL0 |= ADC10SC+ENC;

_EINT();//允许中断

while(1)

{

float max[10];

float ma=0;

float dave=0;

uint i,j;

delay_ms(50);

ADC10CTL0 |= ENC+ADC10SC;

for(j=0;j<10;j++)

{

for(i=0;i<500;i++)

{

temp = ADC10MEM;

voltage = temp25/10230;//计算采集到的电压

if(ma<=voltage)

{

ma = voltage;//取峰值电压

}

max[j] = ma;

}

dave += max[j]/10;//求平均值

}

wr_float(1,3,dave);

wr_string(5,3,s4);

}

}

//AD中断服务程序

#pragma vector=ADC10_VECTOR

__interrupt void ADC10_ISR (void)

{

__bic_SR_register_on_exit(LPM0_bits);//将SR里的CPUOFF位置0

}

//定时器输出单元

#pragma vector=TIMER0_A0_VECTOR

__interrupt void ta0_isr(void)

{

TACTL = 0;

__bic_SR_register_on_exit(LPM0_bits);//将SR里的CPUOFF位置0

}

以上就是关于MSP430g2553为什么下面的程序不能产生PWM波全部的内容,包括:MSP430g2553为什么下面的程序不能产生PWM波、新手关于430单片机g2553的问题、需要用msp430g2553 flash掉电保存数据,flash能读能写,就是不能掉电后保存数据,请高手解决!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9515134.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存