打印

这段msp430的ADC程序总是跑飞,谁来帮忙!

[复制链接]
4156|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiangyujia1989|  楼主 | 2012-11-21 19:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ADC的单通道多次采样
用的是TI的ADC的示例源程序。程序大致如下,跑着跑着就经常出现复位。
基本思路是
全局变量:Num_result=16;
index=0

中断:__interrupt
{
result[index]=adcmem0;
index=(index+1)%Num_result;
}        
主程序中:
打开adc
while(1)
{
if(index=0)
   {
   for(i=0;i<16;i++)
    temp=temp+result[i];   
}
AD_data=temp>>4;
if(AD_data>1000)
  {
  break;
  }

}

相关帖子

沙发
hwk612167| | 2012-11-21 20:04 | 只看该作者
= ==?
break都能跳出while(1)了 后面是啥?复位当然成为可能

使用特权

评论回复
板凳
happy啦啦啦| | 2012-11-21 20:05 | 只看该作者
楼上正解啊

使用特权

评论回复
地板
happybird21| | 2012-11-21 20:09 | 只看该作者
加个看门狗吧

使用特权

评论回复
5
jiangyujia1989|  楼主 | 2012-11-21 20:21 | 只看该作者
break 设计目标就是跳出这段程序的 上面这段是一个子程序

使用特权

评论回复
6
jiangyujia1989|  楼主 | 2012-11-21 20:22 | 只看该作者
break 设计目标就是跳出这段程序的 上面这段是一个子程序 2# hwk612167

使用特权

评论回复
7
maxwellpin| | 2012-11-22 10:03 | 只看该作者
if(index=0)   ????

使用特权

评论回复
8
gaoyang9992006| | 2012-11-22 11:58 | 只看该作者
本帖最后由 gaoyang9992006 于 2012-11-22 12:01 编辑

楼主的程序笑掉大牙了,至少要这样
while(1)
{
if(index==0)       //你赋值每次都是可以的,每次为真就错了,没有起到应有的效果
   {
   for(i=0;i<16;i++)
    temp=temp+result;   
}
AD_data=temp>>4;
if(AD_data>1000)
;//你就是让它什么都不做嘛



你break一下就出了主程序,另外你index=0,编译器就在里面给你搞成个常量了,岂不是乱乱的飞了

}

使用特权

评论回复
9
hsw_21| | 2012-11-22 14:03 | 只看该作者
430是  32位机 吗?

使用特权

评论回复
10
forgot| | 2012-11-22 14:48 | 只看该作者
430是  32位机 吗?
hsw_21 发表于 2012-11-22 14:03
16位

使用特权

评论回复
11
jiangyujia1989|  楼主 | 2012-11-22 19:40 | 只看该作者
9# hsw_21 当时手边没有完整程序,随便写了一下表达思路。下面贴出完整程序。大侠不吝赐教!

void stepper_down(void) //电机向下运转
{
  P5DIR|=BIT6+BIT7;//电机的两个引脚,1+0和0+1分别控制正转与反转
  P6SEL|=BIT3;   //选择输入通道
  P5OUT|=BIT6;
  P5OUT&=~BIT7;
  delay_s(1);

  ADC12CTL0=ADC12ON+SHT0_15+SHT0_15+MSC; //打开ADC+分频系数64+采样有SHI仅首次触发
  ADC12CTL1=SHP+CONSEQ_2;       //单通道多批次
  ADC12MCTL0 = INCH_3;          //同引脚一致
  ADC12IE=0x03;                 //允许A3中断
  ADC12CTL0|=ENC;               //允许转换
  ADC12CTL0|=ADC12SC;           //开始转换
  _EINT();
  while(1)
  {
  if(index==0)
   {
    unsigned int temp,i;
       _DINT();
  for(i=0;i<16;i++)
   {

   temp=temp+results;
  }
    AD_data=temp>>4;
    _EINT();
   delay_ms(100);
   if(AD_data>800) //电压足够大超过800/4092*3.3V时停止
   {
   P5OUT&=~BIT6;
   P5OUT&=~BIT7;
   temp=0;
   AD_data=0;
  ADC12CTL0&=~ENC;
  break;  //break跳出回到主程序
   }
   else temp=0;
   }

}
}

使用特权

评论回复
12
angerbird| | 2012-11-23 17:57 | 只看该作者
加上看门狗的看看的啊

使用特权

评论回复
13
jiangyujia1989|  楼主 | 2012-11-23 22:51 | 只看该作者
12# angerbird     姑且一试吧。。。

使用特权

评论回复
14
jiangyujia1989|  楼主 | 2012-11-25 18:57 | 只看该作者
13# jiangyujia1989 加了看门狗 程序还是自动复位了。。。

使用特权

评论回复
15
along1980| | 2012-11-25 22:03 | 只看该作者
Break不是这么用的,,,同意2楼意见。。。。。去掉break

使用特权

评论回复
16
jiangyujia1989|  楼主 | 2012-11-26 13:45 | 只看该作者
15# along1980 那怎么跳出这段程序呢?。。。。。。

使用特权

评论回复
17
ljtim| | 2012-11-26 14:38 | 只看该作者
16# jiangyujia1989 if只运行一次,不用跳出

使用特权

评论回复
18
hawksabre| | 2012-11-26 17:48 | 只看该作者
应该是程序本身的问题   不是加不加看门狗的问题   这段程序需要重新写一下  呵呵

使用特权

评论回复
19
永远的不知| | 2012-11-26 22:10 | 只看该作者
11# jiangyujia1989

2楼正解,去掉break。

使用特权

评论回复
20
dwananqinyan| | 2012-11-27 16:15 | 只看该作者
:sleepy:

使用特权

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

本版积分规则

0

主题

21

帖子

1

粉丝