|
2芯积分
各位大神,帮我看一下这个程序,是用MSP430X2619测频率的,但是总显示不了一个确定值,检查程序的时候说Cyc是一个不可利用的值,我是一个新手,对这些不太熟悉,请大神们帮帮忙。万分感谢!
void Init_MCU( void )
{
WDTCTL = WDTPW + WDTHOLD; // 关看门狗
// BCSCTL3 |= XT2S_2; // XT2频率范围设置
BCSCTL1 &= ~XT2OFF; // 打开XT2振荡器
do
{
IFG1 &= ~OFIFG; // 清振荡器失效标志
BCSCTL3 &= ~XT2OF; // 清XT2失效标志
for( uint i = 0x47FF; i > 0; i-- ); // 等待XT2频率稳定
}while (IFG1 & OFIFG); // 外部时钟源正常起动了吗?
BCSCTL2 |= SELM_2 + SELS ; // 设置MCLK、SMCLK为XT2
P4OUT &= ~BIT4;
P4DIR |= BIT4; // 打开LCD显示部分的电源
P8DIR |= BIT3 + BIT4; // 配置MSP430与BU9796的数据数
P8OUT |= BIT3 + BIT4;
}
void main( void )
{
Init_MCU();
Init_BU9796FS();
_NOP();
_NOP();
TACTL=TASSEL_2+ID_3+MC_2+TACLR; //MCLK,8分频,连续计数模式,计数器清零
CCTL0=CM_1+SCS+CCIS_1+CAP+CCIE; //上升沿捕获,异步,捕获,捕获中断允许
lastccr0=0; //上一次计数值
P2DIR &= ~BIT2; //信号输入
P2SEL |= BIT2;
_EINT();
while(1)
{
_BIS_SR(CPUOFF);
_NOP();
}
}
#pragma vector=TIMERA0_VECTOR
__interrupt void TIMER_A(void)
{
Cyc=CCR0-lastccr0;
lastccr0=CCR0;
F=1000000/Cyc;
xianshi();
Segment_Display( 0,Disp_Data,6 ); //显示计数值
}
void xianshi()
{
a=F/100000;
b=F%100000/10000;
c=F%100000%10000/1000;
d=F%100000%10000%1000/100;
e=F%100000%10000%1000%100/10;
f=F%100000%10000%1000%100%10;
Disp_Data[0]=a;
Disp_Data[1]=b;
Disp_Data[2]=c;
Disp_Data[3]=d;
Disp_Data[4]=e;
Disp_Data[5]=f;
} |
|