在线情况
楼主
  • 头像
  • 级别
    • 积分4
    • 经验351
    • 文章3
    • 注册2011-07-24
    用430完成脉宽和频率的测量
    [P]#include <msp430x14x.h>
    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[/P][P]
    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;[/P][P]
    void delay(uint j)    //延时函数
    {  uint x,y;
       for(x=j;x>0;x--)
       for(y=50;y>0;y--);
    }[/P][P]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;
    }[/P][P]
    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为捕获信号源[/P][P] _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);
       }
    } [/P][P]// 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;  
    }  [/P][P] [/P][P]请各位大虾帮忙看一下这个程序有什么问题么,指导一下!谢谢啦!![EM14][/P]
    [ 此贴最后由DC在2011-8-11 16:36:32编辑过 ]
    微控网感谢您的参与
    在线情况
    2
    • 头像
    • 级别
    • 门派
    • 职务总版主
    • 声望+9
    • 财富5
    • 积分3065
    • 经验390701
    • 文章6744
    • 注册2006-03-07
    哎,[EM03]又是那种贴出代码出叫别人寻答案的贴子....
    [URL=http://www.microcontrol.cn/BBS/a/a.asp?B=100&ID=2673]http://www.microcontrol.cn/BBS/a/a.asp?B=100&ID=2673[/URL]
    [ 此贴最后由DC在2011-8-11 22:19:32编辑过 ]
    [COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
    在线情况
    3
    • 头像
    • 级别
      • 积分4
      • 经验351
      • 文章3
      • 注册2011-07-24
      [P]该程序存在以下问题:
      1,unsigned pwm_wide;已经定义了pwm_wide为整型的,而pwm_wide=(pwm_end-pwm_start+overflow*65536)*0.000125计算出来的结果是float型的,这就出现了一个问题
      2,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); 然后再显示
      不知还有什么问题吗!!??[IMG=0,absmiddle]http://bbs.eeworld.com.cn/images/smilies/default/puzzle.gif[/IMG] [/P]
      微控网感谢您的参与
      在线情况
      4
      • 头像
      • 级别
      • 门派
      • 职务总版主
      • 声望+9
      • 财富5
      • 积分3065
      • 经验390701
      • 文章6744
      • 注册2006-03-07
      [P]要计算每步公式,必须要在这公式里所用到的变量都要为同类型数据。
      在计算完毕后,再将所需转类型的一一独立转换过来。
      估计你的问题是太大口了,将不同数据类型混合运算所致...。[/P]
      [COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
      在线情况
      5
      • 头像
      • 级别
        • 积分4
        • 经验351
        • 文章3
        • 注册2011-07-24
        [P]恩,谢谢版主!![EM14][/P]
        微控网感谢您的参与
        Powered by LeadBBS 9.2 .
        Page created in 0.1875 seconds with 6 queries.