3216|5

3

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

msp430g2553测幅值和频率 [复制链接]

初学者,编的程序在下面,求大佬们看看为甚么我的程序幅值可以测量出来但是频率测不出来/*
#include "msp430g2553.h"
#include "user.h"
char data_display[10];
uint U_sample[20];
uint index=0;
float U1=0;
uint f=0;
uint num2=0;
uint period=0;
uint temp=0;
uint overfloat=0;

void GPIO_Init(void)
{
P1DIR &=~BIT2;
P1SEL |= BIT2;
P1REN |= BIT2;
P1DIR &=~BIT1;
P1SEL |= BIT1;
P1REN |= BIT1;
}

void BCS_Init(void)
{
if(CALBC1_8MHZ ==0xFF)
{
  while(1);
}
DCOCTL = 0;
BCSCTL1 = CALBC1_8MHZ;
DCOCTL = CALDCO_8MHZ;
BCSCTL2 |= DIVM_3;
__delay_cycles(100);
}

void Frequency(void)
{
TACTL = TASSEL_2 + MC_1 + TAIE + TACLR;        //SMCLK,Up to CCR0,Timer A counter clear
TACCTL1 = CM_1 + CCIS_0 + SCS + CAP + CCIE;        //Capture mode: 1 - pos. edge,Capture input select: 0 - CCIxA
if(period > 0)
  f = 1000000/period;
floatTochar(f,data_display,1);
StrDisplay(data_display,3,0,0);
}
void ADC_DY(void)
{
  ADC10CTL0 = SREF_1 + ADC10SHT_2 + ADC10ON + REFON + REF2_5V;            // ADC10ON, interrupt enabled
  ADC10CTL1=INCH_1;                                       // input A1
  ADC10AE0 |= 0x02;           // P1.1 ADC option select
  while(1)
  {
   num2++;
   ADC10CTL0 |= ENC + ADC10SC;          // Sampling and conversion start
   U_sample[index] = ADC10MEM;
   index ++;
   if(index >= 20)
   {
    index =  0;
    U1 = M_Filter(U_sample,20)*2.5/1023;
    U1 = U1*5;
    floatTochar(U1,data_display,2);
    StrDisplay(data_display,1,0,0);
   }
   if(num2>40)
      {
             num2=0;
             break;
     }
  }
}


void main(void)
{
WDTCTL = WDTPW +WDTHOLD;
BCS_Init();
GPIO_Init();
_EINT();
Lcd_Init();
Lcd_Clear();
StrDisplay("电压值:",0,0,0);
StrDisplay("频率:",2,0,0);
while(1)
{
  ADC_DY();
  Frequency();
}
}

#pragma vector = TIMER0_A1_VECTOR   //Timer_A中断向量
__interrupt void Timer_A(void)
{
switch (TA0IV)
{
case 2:
  temp++;
  if(temp == 1)
  {
   overfloat = 0;
   TA0CTL = TACLR;
  }
  if(temp == 2)
    {
     period = CCR1;
     period = overfloat*65536 + period;
     temp = 0;
    }
  break;
case 4:break;
case 10: overfloat++;break;              // TimerA溢出中断;
}
}


TAT感觉自己写的不是特别清楚但是真的尽力写了,希望有大神解答,感激不尽!!!!!
此帖出自单片机论坛

最新回复

还没弄出来?  详情 回复 发表于 2017-5-2 15:23
点赞 关注
 

回复
举报

4005

帖子

0

TA的资源

版主

沙发
 
本帖最后由 huo_hu 于 2017-4-22 11:52 编辑

你先截一下period的值对不对
此帖出自单片机论坛
 
 

回复

4005

帖子

0

TA的资源

版主

板凳
 
uint 类型不对吧
此帖出自单片机论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

4
 

unsigned int 不对吗?
此帖出自单片机论坛
 
 
 

回复

4005

帖子

0

TA的资源

版主

5
 
还没弄出来?
此帖出自单片机论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

6
 

嗯嗯因为有事情就一直搁置了单片机还不在我这所以
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表