完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 成谶 于 2016-4-20 22:02 编辑
在网上看到一篇高精度测频模块论文,我改了一下 ,在闸门时间内,用F5529TA2CCR0捕获测频,可是好像有很大问题,一是捕获值会出现负值,不应该是在0-65535内吗?二是频率误差非常大,不知道为什么?这是我修改的代码,希望大家探讨指点。#include #include #include #include "Dogs102x6.h" #define CPUF ((double)1048576) #define delay_us(x) __delay_cycles((long)(CPUF*(double)x/1000000)) #define delay_ms(x) __delay_cycles((long)(CPUF*(double)x/1000)) #define delay_s(x) __delay_cycles(CPUF*x) #define ulint unsigned long int /* * main.c */ ulint captar=0,pulse=0,time=0,capfirst,caplast,flag=0,f; void main(void) { WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗 lcdinit(); P2DIR &= ~BIT3; P2SEL |=BIT3; TA2CCTL0=CM_1+SCS+CCIS_0+CAP+CCIE; TA2CTL=TASSEL_1+MC_2+TAIE; _EINT(); while(1){ if(flag==1){ f=pulse*32768/time; display(f);//显示程序 flag=0; } } } #pragma vector = TIMER2_A0_VECTOR __interrupt void TIMER2_A0 (void) { if(captar==0)//第一次捕获上升沿 { capfirst=TA2CCR0; captar++; } else{ caplast=TA2CCR0; captar++; } } #pragma vector = TIMER2_A1_VECTOR __interrupt void TIMER2_A1 (void) { //TA2CTL&=~TAIE; switch(TA2IV){ case 14:{//开启闸门时间2s; if(captar==0) pulse=0; else{ //TA2CTL&= ~TAIE; pulse=captar-1;待测信号个数 time=caplast-capfirst;标准信号个数 captar=0; flag=1;//置位标志 } break; } default:break; } //TA2CTL |= TAIE; } 这时我参考的网上资料http://wenku.baidu.com/link?url= ... cWPM9vV0Cx4bEyx4gby |
|
相关推荐
2个回答
|
|
|
|
|
|
可能都没做出来吧
|
|
|
|
只有小组成员才能发言,加入小组>>
3031个成员聚集在这个小组
加入小组2923 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3594 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2341 浏览 1 评论
4800 浏览 1 评论
2573 浏览 1 评论
1325浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3596浏览 2评论
2925浏览 1评论
1508浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 05:14 , Processed in 1.285112 second(s), Total 105, Slave 88 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号