4017|3

12

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

用msp430完成频率的测量 [复制链接]

#include
unsigned int pwm_start,pwm_end,pwm_wide=0;  
float fre=0.000;
#define uchar unsigned char
#define uint  unsigned int
#define lint  long int


unsigned int start,end;
float data,num,m1;
long int m2=10,j=0;
uchar a[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//0->9,共阴;
uchar num1,num2,num3,num4,num5,num6;


void delay(uint j)    //延时函数
{  uint x,y;
   for(x=j;x>0;x--)
   for(y=50;y>0;y--);
}

void xianshi(float fre)//数码管动态显示函数(P2->位,P3->段)
{
  lint tt,ttt,tttt,ttttt;
  tt=(lint)fre;  //整数部分
  ttt=(lint)(fre*10);//第一位小数
  tttt=(lint)(fre*100);//第二位小数
  ttttt=(lint)(fre*1000);
  num1=(tt/100)%10;
  num2=(tt/10)%10;
  num3=tt%10;
  num4=ttt%10;
  num5=tttt%10;
  num6=ttttt%10;
  P2OUT |= BIT0;//亮第一个数码管
  P3OUT=a[num1];
  delay(6);
  P2OUT=0x00;
  P2OUT = 0x02;//亮第二个数码管
  P3OUT=a[num2];
  delay(6);
  P2OUT=0x00;
  P2OUT = 0x04;//亮第三个数码管
  P3OUT=a[num3];
  P3OUT |=BIT7;//点亮小数点
  delay(6);
  P2OUT=0x00;
  P2OUT = 0x08;//亮第四个数码管
  P3OUT=a[num4];
  delay(6);
  P2OUT=0x00;
  P2OUT = 0x10;//亮第五个数码管
  P3OUT =a[num5];//第一位小数
  delay(6);
  P2OUT =0x00;
  P2OUT = 0x20;//亮第六个数码管
  P3OUT =a[num6];//第二位小数
  delay(6);
  P2OUT=0x00;
}


void main (void)
{
WDTCTL = WDTPW+WDTHOLD;                   //关闭看门狗定时器
P1SEL = BIT2;                             //设置P1.2端口为功能模块使用,CCI0A
P2DIR =0x3f; //位选
P3DIR =0xff; //段选
P2OUT =0x00;
P3OUT =0x00;
                       
TACTL = TASSEL0+TACLR+TAIE+MC1;           //定时器A时钟信号选择ACLK,同时设置定时器A计数模式为连续增计模式
CCTL1 = CM_3+SCS+CAP+CCIE+CCIS0;          //捕获模式,上升和下降都捕获,CCI0A为捕获信号源

_EINT();                                  //中断允许
  for(;;)
   {                                          
   _BIS_SR(LPM0_bits + GIE);
   _NOP();
   pwm_wide=(pwm_end-pwm_start+overflow*65536)*0.000125;
   fre=1/(2*pwm_wide);  // 频率
   xianshi(fre);
   }
}

// Timer_A3 Interrupt Vector (TAIV) handler
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A1(void)
{  
   
  switch(TAIV)  
{case 2:   
      if(TACCTL1 & CCI)  
        pwm_start=CCR1;   
     else  
        pwm_end=CCR1;            
     break;  
  case 4:  
     break;  
  case 10: overflow++;
     break;  
  }  
  LPM0_EXIT;  
}  


请各位大虾看看这个程序有什么问题么,指导一下,谢谢了!!

最新回复

顶,你调试通过没  详情 回复 发表于 2011-8-14 14:22
 
点赞 关注

回复
举报

12

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

回复 楼主 shuizhiqing 的帖子

该程序存在以下问题:
1,头文件不完整,改为#include"msp430x14x.h"
2,unsigned  pwm_wide;已经定义了pwm_wide为整型的,而pwm_wide=(pwm_end-pwm_start+overflow*65536)*0.000125计算出来的结果是float型的,这就出现了一个问题
3,float data,num,m1和 long int m2=10,j=0中定义的data、m1、m2就没用
建议将pwm_wide=(pwm_end-pwm_start+overflow*65536)*0.000125;
            fre=1/(2*pwm_wide); 改为data=(pwm_end-pwm_start+overflow*65536)*0.000125;
                                                           fre=1/(2*data); 然后再显示
不知还有什么问题吗!!??
 
 

回复

99

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
顶,你调试通过没
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

4
 
我这儿硬件显示有点问题,很暗,应该延时那的问题吧!再改改就可以了
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表