运行程序后 new和old都有值可是相减后T值总是0为什么

[复制链接]
 楼主| shimx 发表于 2018-6-13 20:41 | 显示全部楼层 |阅读模式
#include "MSp430G2553.h"
#include"LCD.h"
unsigned int old=0,new=0,T,zhuangsu;
unsigned char overflow;

void main( void )
{


          WDTCTL = WDTPW + WDTHOLD;
         P1DIR|=BIT6;
          P1SEL|=BIT2;//P1.2->捕获输入
          P1OUT&=~BIT6;//关闭LED
          BCSCTL1 = CALBC1_1MHZ;         
          DCOCTL  = CALBC1_1MHZ;
          Port_init();
                                      //delay_ms(100);
                                      LCD_init();
                                      LCD_clear();
          CCTL1=CM_1+SCS+CCIS_0+CAP+CCIE;//上升沿+同步+CCI0A(p1.2)+捕获功能+捕获中断
          TACTL=TASSEL_2+MC_2+TAIE+TACLR;
          _EINT();
          while(1){_BIS_SR(GIE);
          xianshi();
          }
}
void xianshi(void)
{

             T=2*T/1000000;
             zhuangsu=60/T;
        LCD_write_str(0,0,"zhuangsu:");
                                                                LCD_write_char(0,1,num_char_table[zhuangsu/10000]);
                                                                LCD_write_char(1,1,num_char_table[zhuangsu%10000/1000]);
                                        //LCD_write_char(3,1,'.');
                                                                LCD_write_char(2,1,num_char_table[zhuangsu%1000/100]);
                                                        LCD_write_char(3,1,num_char_table[zhuangsu%100/10]);
                                                LCD_write_char(4,1,num_char_table[zhuangsu%10]);
                                                                 //LCD_write_char(4,1,num_char_table[0]);
                                                                  LCD_write_str(5,1,"zhuang/min");
}
#pragma vector=TIMER0_A1_VECTOR
__interrupt void Timer_A (void)
{
  switch(TAIV)
  {
    case 2:
      if(CCTL1&CM_1)
      {
      
        new=TAR;
        T=new-old;
        overflow=0;
      }
      old=new;
      P1OUT^=BIT6;
      break;
    case 10:
      overflow++;
      break;
    default:
      break;
   }
}
airwill 发表于 2018-6-13 21:28 | 显示全部楼层
最后借助调试器跟踪一下, 到底怎么让结果清零了呢.
dirtwillfly 发表于 2018-6-13 22:00 | 显示全部楼层
T=2*T/1000000;
如果T的值小于1000000/2,T的值就是0呢
dengdc 发表于 2018-6-14 09:08 | 显示全部楼层
又是一大段程序啊
wuhany 发表于 2018-6-14 09:12 | 显示全部楼层
new和old都有值可是相减后T值总是0,说明两次捕获的值相等啊
 楼主| shimx 发表于 2018-6-14 09:14 | 显示全部楼层
我把程序改成T=new new有值可是T还是0 why啊
lizye 发表于 2018-6-14 09:19 | 显示全部楼层

我不知道啊,你在这里设置好断点,看看它运算的过程
wyjie 发表于 2018-6-14 09:21 | 显示全部楼层

如果是在其他的 c6000系列的 DSP下, 如果要使用自带的加减乘法等内联函数, 是怎么使用的呢
liliang9554 发表于 2018-6-14 09:23 | 显示全部楼层
上升沿捕获。
jiajs 发表于 2018-6-14 09:30 | 显示全部楼层
对,然后改为下降沿捕获的。
zhanghqi 发表于 2018-6-14 09:37 | 显示全部楼层
最好再上升沿的时候吧计数器清0
 楼主| shimx 发表于 2018-6-14 09:40 | 显示全部楼层
我是想测一个脉冲周期(高电平+低电平)得时间不用一定改成下降沿捕获吧
wyjie 发表于 2018-6-14 09:43 | 显示全部楼层
用定时器测量的么?
 楼主| shimx 发表于 2018-6-14 09:46 | 显示全部楼层

是得
 楼主| shimx 发表于 2018-6-14 09:53 | 显示全部楼层
发现问题了 我真是脑残了啊 T=T*2/1000000; 这个必须是0啊
wuhany 发表于 2018-6-14 09:55 | 显示全部楼层

;P
问题解决了就好:handshake
多多交流
jiahy 发表于 2018-6-14 09:57 | 显示全部楼层

这个先看下三个变量的数据类型是否为同一种类型的。
liliang9554 发表于 2018-6-14 10:02 | 显示全部楼层
若T为整形,那两个为float类型的,这两有仅在小数位上有差异的,不论怎样,T都是0的
 楼主| shimx 发表于 2018-6-14 10:04 | 显示全部楼层

结贴了,多谢大家讨论这么多哈,呵呵
angerbird 发表于 2018-6-18 12:43 | 显示全部楼层
这个设计还是比较有难度的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

857

主题

10661

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部

857

主题

10661

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部