MSP430F5529测频法测量信号频率.docx

上传人:罗晋 文档编号:8712781 上传时间:2021-01-03 格式:DOCX 页数:4 大小:20.22KB
返回 下载 相关 举报
MSP430F5529测频法测量信号频率.docx_第1页
第1页 / 共4页
MSP430F5529测频法测量信号频率.docx_第2页
第2页 / 共4页
MSP430F5529测频法测量信号频率.docx_第3页
第3页 / 共4页
MSP430F5529测频法测量信号频率.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《MSP430F5529测频法测量信号频率.docx》由会员分享,可在线阅读,更多相关《MSP430F5529测频法测量信号频率.docx(4页珍藏版)》请在三一文库上搜索。

1、最新 料推荐 MSP430F5529测量频率-测频法信号变换电路过零比较器, lm393 输出上拉电阻,两电阻分压程序#include #include stdio.h/测频法,上限1Mhz/看门狗定时1s,开门狗中断处理程序开启捕获器,捕获1s 中所有的上升脉冲,脉冲个数即为频率/* 优化的反向可以将开门够定时1S 使用定时器去定时1s* main.c*/long fre=0;char buf60=0;void SetVcoreUp (unsigned int level)/ Open PMM registers for write PMMCTL0_H = PMMPW_H;/ Set SVS

2、/SVM high side new levelSVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level; / Set SVM low side to new levelSVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;/ Wait till SVM is settled1最新 料推荐 while (PMMIFG & SVSMLDLYIFG) = 0);/ Clear already set flagsPMMIFG &= (SVMLVLRIFG + SVMLIFG);/ Set VCo

3、re to new levelPMMCTL0_L = PMMCOREV0 * level;/ Wait till new level reached if (PMMIFG & SVMLIFG)while (PMMIFG & SVMLVLRIFG) = 0);/ Set SVS/SVM low side to new levelSVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level;/ Lock PMM registers for write access PMMCTL0_H = 0x00;voidinit_clock()S

4、etVcoreUp (0x01);SetVcoreUp (0x02);SetVcoreUp (0x03);UCSCTL3 = SELREF_2;/ Set DCO FLL reference = REFOUCSCTL4 |= SELA_2;/ Set ACLK = REFO_bis_SR_register(SCG0);/ Disable the FLL control loopUCSCTL0 = 0x0000;/ Set lowest possible DCOx, MODxUCSCTL1 = DCORSEL_7;/ Select DCO range 50MHz operationUCSCTL2

5、 = FLLD_0 + 609;/ Set DCO Multiplier for 25MHz/ (N + 1) * FLLRef = Fdco/ (762 + 1) * 32768 = 25MHz/ Set FLL Div = fDCOCLK/2_bic_SR_register(SCG0);/ Enable the FLL control loop_delay_cycles(782000);doUCSCTL7 &= (XT2OFFG + XT1LFOFFG + DCOFFG);/ Clear XT2,XT1,DCO fault flagsSFRIFG1 &= OFIFG;/ Clear fau

6、lt flagswhile (SFRIFG1&OFIFG);/ Test oscillator fault flagvoid send_char(char sc)UCA0TXBUF=sc;while(!(UCA0IFG&UCTXIFG);2最新 料推荐 void send_string(char *s)while(*s!=0)send_char(*s+);init_uart()P3SEL |= BIT3+BIT4;/ P3.3,4 = USCI_A0 TXD/RXDUCA0CTL1 |= UCSWRST;/ *Put state machine in reset*UCA0CTL1 |= UCS

7、SEL_SMCLK;/ SMCLKUCA0BR0 = 173;/ 1MHz 115200 (see Users Guide)UCA0BR1 = 0;/ 1MHz 115200UCA0MCTL |= UCBRS_5 + UCBRF_0;/ Modulation UCBRSx=1, UCBRFx=0UCA0CTL1 &= UCSWRST;/ *Initialize USCI state machine*/UCA0IE |= UCRXIE;/ Enable USCI_A0 RX interruptsend_string(CLS(0);rn);int main(void) WDTCTL = WDTPW

8、 | WDTHOLD;/ Stop watchdog timerinit_clock();/ 初始化系统时钟为20MHzinit_uart();/ 串口波特率为115200bpsWDTCTL=WDT_ADLY_1000 ;/开门狗定时1sP1DIR &= BIT2;/ P1.2 inP1SEL |=BIT2;/ 捕获输入SFRIE1|=WDTIE; / 开看门狗定时器中断_bis_SR_register(LPM0_bits + GIE);/ Enter LPM0, enable interrupts_no_operation();/ For debuggerreturn 0;void meas

9、ure_fre()if(fre=500)sprintf(buf,DS16(0,60, 频率: %1.1f,4);rn,fre*1.008);if(fre=52)sprintf(buf,DS16(0,60, 频率: %1.1f,4);rn,(fre)*1.0);3最新 料推荐 else if(fre=208)sprintf(buf,DS16(0,60, 频率: %1.1f,4);rn,(fre+1)*1.0);else if(fre=496)sprintf(buf,DS16(0,60, 频率: %1.1f,4);rn,(fre+3)*1.0);send_string( buf);fre=0;TA

10、0CTL = TASSEL_2+ MC_2 + TACLR+TAIE;/ SMCLK,连续 mode, clear TAR8 分频下限可以测到8Hz 。上限 200K 左右TA0CCTL1 =CM_1 +SCS +CAP +CCIE;#pragma vector=WDT_VECTOR_interrupt void WDT_ISR(void)measure_fre();#pragma vector=TIMER0_A1_VECTOR_interrupt void TIMER0_A1_ISR(void)switch(_even_in_range(TA0IV ,14)case0: break;/ No interruptcase2:/CCR1fre+;break;case4: break;/ CCR2 not usedcase6: break;/ CCR3 not usedcase8: break;/ CCR4 not usedcase 10: break;/ CCR5 not usedcase 12: break;/ CCR6 not usedcase 14: break;/定时器溢出default: break;4

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1