
晶振的频率精度已经很高了,必须用更精准的的频率计才能计量它的精度
频率计的精准程度取决于时钟源,你可以选用带恒温高精度有源晶振,价格么。。。。。。
比如这个>
任意找到一组数据DIN(0:7)作为起始,保存到寄存器R1,然后以后连续把每一组数据都保存在R2与R1做比较,if(R1==R2)
begin
R3<=t1;
end
t1是计数器的从0开始计数的值,0时刻是指对R1赋值的时刻,然后把t1根据机器周期换算成确切时间求倒数就得到频率了!
可以利用计数器捕捉模块与定时器模块(可以设置成1秒或者某个固定的时间然后计算)。8位的51与32位的MKL25计数捕捉模块我用过。430系列的你查查使用手册,看看有没有计数器捕捉模块。
时钟初始化子程序实现了DCO的锁频,ADC10初始化子程序采用了序列通道多次采样和DTC数据转存。写这程序的人对MSP430蛮了解的!
void init_Clk (void)
{
unsigned int Compare, Oldcapture = 0;
// ACLK= LFXT1CLK/8为低频振荡器32768HZ频率/8作为辅助系统时钟
BCSCTL1 |= DIVA_3;
CCTL2 = CM_1 + CCIS_1 + CAP;//上升沿捕获+CCI2B(P24)信号输入+捕获模式
// SMCLK
TACTL = TASSEL_2 + MC_2 + TACLR;//TA时钟为SMCLK,增计数模式,计数器清零
//DCO锁频,使得DCO时钟频率与P24信号频率相同
while (1)
{
//等待捕获发生
while (!(CCIFG & CCTL2)) ;//P24信号有上升沿跳出while
//清除标志
CCTL2 &= ~CCIFG;
//得到当前的SMCLK
Compare = CCR2;
//SMCLK的差
Compare = Compare - Oldcapture;
//保存
Oldcapture = CCR2;
if (DELTA == Compare) break;//DELTA=高电平脉宽
else if (DELTA < Compare)//DELTA<高电平脉宽
{
DCOCTL--;//通过改变DCO直流发生器注入电流及插入的Fdco+1来微调降低DCO时钟频率
if (DCOCTL == 0xFF)//微调降到最低了,同时设置为最高
{
if (!(BCSCTL1 == (XT2OFF + DIVA_3)))//粗调降到最低了
{
BCSCTL1--; //通过改变DCO内部阻容振荡电阻来粗调降低DCO时钟频率
}
}
}
else
{
DCOCTL++;//通过改变DCO直流发生器注入电流及插入的Fdco+1来微调提升DCO时钟频率
if (DCOCTL == 0x00)//微调升到最高了,同时设置为最低
{
if (!(BCSCTL1 == (XT2OFF + DIVA_3 + 0x07)))//粗调升到最高了
{
BCSCTL1++; //通过改变DCO内部阻容振荡电阻来粗调升高DCO时钟频率
}
}
}
}
//停止CCR2
CCTL2 = 0;
//停止定时器A
TACTL = 0;
}
void init_ADC(void)
{
//停止转换
ADC10CTL0 &= ~ENC;
//模拟输入使能A0--A2 (P20---P22)
ADC10AE |= 0x07;
//模拟采集设置
//基准选择VR+=Vref+,VR-=AVSS
//AD时钟选择 64 x ADC10CLKs
//AD10供电
//AD中断允许
//内部参考电压(12V)允许并输出
ADC10CTL0 = SREF_1 + ADC10SHT_3
+ ADC10ON + ADC10IE + REFON + REFOUT;
//采集通道设置
//首次采样通道A2
//采样时钟TAout2
//序列通道连续采样
ADC10CTL1 = INCH_2 + SHS_3 + CONSEQ_3;
//清除BUSY位,转换完成跳出
while( ADC10CTL1 & BUSY ){}
//数据传递继续
ADC10DTC0 |= ADC10CT;
//ADC块大小
ADC10DTC1 = 3;
//ADC块的开始地址
ADC10SA = (unsigned int)AdcData;
//打开转换
ADC10CTL0 |= ENC;
}
>
指令运行的时间不一样
精准定时CPU_F是晶振频率
#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F(double)x/10000000)) //x us
#define delay_ms(x) __delay_cycles((long)(CPU_F(double)x/10000)) /// x ms
以上就是关于MSP430外接32768HZ晶振,如何测量这个晶振的精准度全部的内容,包括:MSP430外接32768HZ晶振,如何测量这个晶振的精准度、用C语言写msp430f149单片机程序怎么初始化晶振,使用8M和32768HZ的晶振、用单片机msp430f149的ADC将正弦波转化成方波后如何测量方波的频率 求大神给点思路。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)