打印

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

[复制链接]
1012|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
又是一大段程序啊

使用特权

评论回复
5
wuhany| | 2018-6-14 09:12 | 只看该作者
new和old都有值可是相减后T值总是0,说明两次捕获的值相等啊

使用特权

评论回复
6
shimx|  楼主 | 2018-6-14 09:14 | 只看该作者
我把程序改成T=new new有值可是T还是0 why啊

使用特权

评论回复
7
lizye| | 2018-6-14 09:19 | 只看该作者

我不知道啊,你在这里设置好断点,看看它运算的过程

使用特权

评论回复
8
wyjie| | 2018-6-14 09:21 | 只看该作者

如果是在其他的 c6000系列的 DSP下, 如果要使用自带的加减乘法等内联函数, 是怎么使用的呢

使用特权

评论回复
9
liliang9554| | 2018-6-14 09:23 | 只看该作者
上升沿捕获。

使用特权

评论回复
10
jiajs| | 2018-6-14 09:30 | 只看该作者
对,然后改为下降沿捕获的。

使用特权

评论回复
11
zhanghqi| | 2018-6-14 09:37 | 只看该作者
最好再上升沿的时候吧计数器清0

使用特权

评论回复
12
shimx|  楼主 | 2018-6-14 09:40 | 只看该作者
我是想测一个脉冲周期(高电平+低电平)得时间不用一定改成下降沿捕获吧

使用特权

评论回复
13
wyjie| | 2018-6-14 09:43 | 只看该作者
用定时器测量的么?

使用特权

评论回复
14
shimx|  楼主 | 2018-6-14 09:46 | 只看该作者

是得

使用特权

评论回复
15
shimx|  楼主 | 2018-6-14 09:53 | 只看该作者
发现问题了 我真是脑残了啊 T=T*2/1000000; 这个必须是0啊

使用特权

评论回复
16
wuhany| | 2018-6-14 09:55 | 只看该作者

;P
问题解决了就好:handshake
多多交流

使用特权

评论回复
17
jiahy| | 2018-6-14 09:57 | 只看该作者

这个先看下三个变量的数据类型是否为同一种类型的。

使用特权

评论回复
18
liliang9554| | 2018-6-14 10:02 | 只看该作者
若T为整形,那两个为float类型的,这两有仅在小数位上有差异的,不论怎样,T都是0的

使用特权

评论回复
19
shimx|  楼主 | 2018-6-14 10:04 | 只看该作者

结贴了,多谢大家讨论这么多哈,呵呵

使用特权

评论回复
20
angerbird| | 2018-6-18 12:43 | 只看该作者
这个设计还是比较有难度的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

857

主题

10661

帖子

5

粉丝