工具/软件:Code Composer Studio
大家好、我的项目有一个问题、就是我要使用 msp430g2231微控制器、我想测量高达10MHz 的频率。我不熟悉微控制器(不是编程)、我不确定如何正确执行。我使用定制的 itoa 函数将 long int 转换为字符串、然后我发送 将计算值存储为 long 后、将其串接 LCD、然后我将其发送到 LCD、如下所示:
void send_string (char * s)
{
while (* s)
{
SEND_DATA (*秒);
S++;
}
}
void main (void)
{
WDTCTL = WDTPW + WDTHOLD;//停止看门狗计时器
BCSCTL1 = CALBC1_1MHz; //设置范围
DCOCTL = CALDCO_1MHz; //设置 DCO 步长+调制
延迟(100); //延迟100mS,直至下次屏幕刷新
/*** Timer_A 设置***/
TA0CCR0 = SampleTuneTime;
TA0CCTL0 |= CCIE; //中断使能
TA0CTL |= TASSEL_2 + ID_3; // SMCLK
TA0CCTL1 |= CCIE + CCIS_0 + CM_1 + CAP;//中断使能、捕获选择 CCIxA、正边沿、捕获模式
TA0CTL |= tassel_2; //SMCLK
_BIS_SR (GIE); //输入启用中断的 LPM0
while (1)
{
TA0CTL |= MC0; //启动定时器递增模式。定时器递增计数到 TACCR0
TA0CTL |= MC1; //启动计时器
//while (CounterValue!= 400);//等待 CounterValue 不等于400
TA0CTL &=~MC0; //停止计时器模式
TA0CTL &=~MC1; //停止计时器
结果>=2; //将结果除以4
CALC_FREQ();
//将 long 转换为频率
char buffer[8]={0、};
unsigned long toLCD =频率;
// int Base = 10;
itoa (toLCD、buffer); //转换十进制
lcd_init();
send_string ("frequency is");
SEND_COMMAND (0xC0);
send_string (buffer);
SEND_COMMAND (0xC8);
send_string ("Hz");
结果= 0; //零结果
计数器值= 0; //零计数器值
StoredCount = 0; //零 StoredCount
TA0R = 0; //零 Timer_A0寄存器
}
}
#pragma vector=TIMER0_A0_VECTOR
_interrupt void Timer0_A0 (void)
{
TA0CTL &=~MC0; //停止计时器
TA0CTL &=~MC1; //停止计时器
计数器值++; //递增计数器值
if (CounterValue >=(NumberSamples +1))//如果达到 NumberSamples +1、则重置值
{
计数器值= 0; //零计数值
StoredCount = 0; //无 StoredCount
}
Result += StoredCount; //将累积计数存储在结果中(我使用 Result / Sample Time 计算频率
StoredCount = 0; //零 StoredCount
TA0CTL |= MC1; //启动计时器
TA0CTL |= MC0; //启动计时器
StoredCount++; //递增 StoredCount
}
这是使用定制函数对 itoa 和与 LCD 通信的程序 im 的主代码。我有两个问题
1) 我能否使频率计高达10MHz、因为 g2231有一个定时器和1MHz 校准可用。
2.)MC0和 MC1只能使用一个定时器 TA0CTL
感谢你能抽出时间。