初学msp430, 买了个f149开发板,在网上找了一个程序代码,部分原代码如下:
Cycle=sum/8+sum%8; //TimerA的时钟为8M、将采集数据转化us
Cycle*=0.962; //对数据进行补偿
sum为两次上升沿捕捉CCR0的差值(已多次取平均值),最终显示周期为Cycle的值,单位us。按我的理解Cycle=sum/8;就可以了,谁能告诉我这两句什么意思,程序是测MCLK的,即32.768Hk,经计算不分频,2分频,4分频,8分频
周期应为: 30.5us, 61.0us, 122.1us, 244.1us,
原代码测得: 34us, 60us, 121us, 242us,
而将原两行代码改为Cycle=sum/8;则为: 33us, 63us, 126us, 252us,(测量数据均取整)
很奇怪,后三个数据确实原代码更接近,求解释两句原代码。。。(问题1)
还有,我还有一个launchpad,运行了下列代码:
#include <msp430G2553.h>
int main( void )
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
P1DIR |= 0x01; // 设置P1.0输出方向
while(1)
{
unsigned int i;
P1OUT ^= 0x01; //取反
i = 50000; // 延时
while (i--);
}
}
P1.0得到的应该是方波,LED灯也确实这么显示。可再用上面问题1的程序测周期怎么也测不出来数据,无论怎么更改 i 的初值怎么回事?(问题2)
还有另一个问题,同样launchpad,以下程序用定时器A0产生pmw波:
#include <msp430G2553.h>
int main( void )
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
TACTL=TACLR+TASSEL0; //ACLK,清除TAR
CCR0=500;
CCTL1=OUTMOD_7;
CCR1=100;
P1DIR|=BIT2;
P1SEL|=BIT2;
TACTL|=MC0; //timer_A为增计数模式
for(;;)
{
_BIS_SR(LPM3_bits);
_NOP();
}
}
改变CCR0,CCR1值确实能感觉到频率和占空比的变化(通过板上自带led闪烁),但也明显感觉到频率极其不稳定,甚至难以预料,将IAR软件关闭又是另一种不稳定(周期好像变大了),同样的程序稍加修改在我的msp430f149开发板上很稳定,怎么回事?(问题三)