MSPF新编测周法测量信号频率

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

M S P430F5529测量频率

-----测周法信号变换电路

过零比较器,lm393输出上拉电阻,两电阻分压

程序

#include<>

#include""

#include""

//测周法,在捕获过程中,定时溢出不能被检测出,选择时钟频率为低频时能测出低频,频率高能测出频率高的部分

/*

*

*/

longlongstart=0;

//longlongintstop=0;

doublefre=;

unsignedchari=0;

unsignedcharover=0;

voidSetVcoreUp(unsignedintlevel)

{

//OpenPMMregistersforwrite

PMMCTL0_H=PMMPW_H;

//SetSVS/SVMhighsidenewlevel

SVSMHCTL=SVSHE+SVSHRVL0*level+SVMHE+SVSMHRRL0*level;

//SetSVMlowsidetonewlevel

SVSMLCTL=SVSLE+SVMLE+SVSMLRRL0*level;

//WaittillSVMissettled

while((PMMIFG&SVSMLDLYIFG)==0);

//Clearalreadysetflags

PMMIFG&=~(SVMLVLRIFG+SVMLIFG);

//SetVCoretonewlevel

PMMCTL0_L=PMMCOREV0*level;

//Waittillnewlevelreached

if((PMMIFG&SVMLIFG))

while((PMMIFG&SVMLVLRIFG)==0);

//SetSVS/SVMlowsidetonewlevel

SVSMLCTL=SVSLE+SVSLRVL0*level+SVMLE+SVSMLRRL0*level;

//LockPMMregistersforwriteaccess

PMMCTL0_H=0x00;

}

voidinit_clock()

{

SetVcoreUp(0x01);

SetVcoreUp(0x02);

SetVcoreUp(0x03);

UCSCTL3=SELREF_2;//SetDCOFLLreference=REFO

UCSCTL4|=SELA_2;//SetACLK=REFO

__bis_SR_register(SCG0);//DisabletheFLLcontrolloop

UCSCTL0=0x0000;//SetlowestpossibleDCOx,MODx

UCSCTL1=DCORSEL_7;//SelectDCOrange50MHzoperation UCSCTL2=FLLD_0+609;//SetDCOMultiplierfor25MHz

//(N+1)*FLLRef=Fdco

//(762+1)*32768=25MHz

//SetFLLDiv=fDCOCLK/2

__bic_SR_register(SCG0);//EnabletheFLLcontrolloop

__delay_cycles(782000);

do

{

UCSCTL7&=~(XT2OFFG+XT1LFOFFG+DCOFFG);

//ClearXT2,XT1,DCOfaultflags

SFRIFG1&=~OFIFG;//Clearfaultflags

}while(SFRIFG1&OFIFG);//Testoscillatorfaultflag

}

voidsend_char(charsc)

{

UCA0TXBUF=sc;

while(!(UCA0IFG&UCTXIFG));

}

voidsend_string(char*s)

{

while(*s!='\0')

{

send_char(*s++);

}

}

init_uart()

{

P3SEL|=BIT3+BIT4;//,4=USCI_A0TXD/RXD

UCA0CTL1|=UCSWRST;//**Putstatemachineinreset**

UCA0CTL1|=UCSSEL__SMCLK;//SMCLK

UCA0BR0=173;//1MHz115200(seeUser'sGuide)

UCA0BR1=0;//1MHz115200

UCA0MCTL|=UCBRS_5+UCBRF_0;//ModulationUCBRSx=1,UCBRFx=0

UCA0CTL1&=~UCSWRST;//**InitializeUSCIstatemachine**

UCA0IE|=UCRXIE;//EnableUSCI_A0RXinterrupt

send_string("CLS(0);\r\n");

}

intmain(void){

charbuf[60]="\0";

WDTCTL=WDTPW+WDTHOLD;//StopWDT

init_clock();

init_uart();

P1DIR&=~BIT2;//

P1SEL|=BIT2;//捕获输入

TA0CTL=TASSEL_2+ID__8+MC_2+TACLR+TAIE;//SMCLK,连续mode,clearTAR8分频下限可以测到8Hz。上限200K左右

TA0CCTL1=CM_1+SCS+CAP+CCIE;

__bis_SR_register(GIE);//EnterLPM0,enableinterrupts

while(1)

{

sprintf(buf,"DS16(0,60,'频率:%',4);\r\n",fre);

send_string(buf);

__delay_cycles(314574);

}

}

//下限频率15,上限200K左右

#pragmavector=TIMER0_A1_VECTOR

__interruptvoidTIMER0_A1_ISR(void)

{

switch(__even_in_range(TA0IV,14))

{

case0:break;//Nointerrupt

case2://CCR1

{

i++;

if(i==1)

{ over=0;

TA0CTL|=TACLR;

}

if(i>=51)

{

i=0;

相关文档
最新文档