Quantcast
Channel: MSP 低功耗微控制器论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 3634

msp430g2553测量较高频率方波测不准&430g2553可以对输入引脚的外来信号分频吗

$
0
0

用8Mhz信号作为时钟,采集P1.1口外来的输入信号的频率。昨天用函数发生器试了一下,最高可以准确测量110khz信号,高了就不行了。100多khz距离8m不是还差那么远为什么就不行了啊???我需要测量400khz左右信号,现在就只能分频了,430可以对外来信号分频吗? 不行的话就只能用芯片了。用74hc4040或者cd4518应该都可以吧?

#include <msp430.h>

int j=0,i,l;

long int k,f,new_cap=0,old_cap=0,cap_diff=0;

int main(void)

{
WDTCTL = WDTPW + WDTHOLD;
P1OUT=0;
if (CALBC1_8MHZ==0xFF) // If calibration constant erased
{
while(1); // do not load, trap CPU!!
}
DCOCTL = 0; // Select lowest DCOx and MODx settings
BCSCTL1 = CALBC1_8MHZ; // Set DCO to 8MHz
DCOCTL = CALDCO_8MHZ;
for(i=0;i<20000;i++);//等晶振稳定震荡
P1DIR=0x10;//P1.4输出SMCLK
P1SEL=0X12;//P1.4输出SMCLK信号,为第二功能。P1.1引脚作输入接受捕获信号,为第二功能。
P2DIR |= BIT1;
P2SEL |= BIT1;
TA1CCR0 = 82-1; // Period Register
TA1CCR1 = 21; // TA1.1 25% dutycycle
TA1CCTL1 |= OUTMOD_7; // TA1CCR1, Reset/Set
TA1CTL = TASSEL_1 + MC_1 + TACLR;
CCTL0=CM_1+CCIS_0+SCS+CAP+CCIE;//上升沿捕获+P1.1捕捉CCI0A 输入+同步+捕获模式+开始中断
TACTL=TASSEL_2+MC_2;//SMCLK时钟+连续模式
_BIS_SR(LPM0_bits+GIE);

#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A(void)
{
P1OUT^=0x40;//led翻转
j++;
if(j%2>=1)
old_cap=TACCR0;//第一次捕获上升沿时,定时器的值
if(j%2==0)
{
new_cap=TACCR0;//第二次捕获上升沿时,定时器的值
if(new_cap<old_cap)
cap_diff=65536+new_cap-old_cap;//两次相减得到一个周期内定时器的计数
else
cap_diff=new_cap-old_cap;//两次相减得到一个周期内定时器的计数

f=8000000/cap_diff*0.99;//根据测试结果430g2553得到的信号比实际信号差不多大0.01
__bic_SR_register_on_exit(LPM0_bits + GIE);
}
}


Viewing all articles
Browse latest Browse all 3634

Trending Articles