求大神们帮下忙 msp430AD 的问题

2019-08-03 15:23发布

/********代码********/
#include<msp430x16x.h>
#define uchar unsigned char
#define uint unsigned int

// 精准延时函数
#define CPU_F ((double)800000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

void ADC12INIT();
uint i;
uint ADCO;
void main()
{
  ADC12INIT();//ADC12初始化
  while(1)
  {
   ADC12CTL0|=ADC12SC;//启动转换
   _BIS_SR(GIE);//开启总中断
  }
}
void ADC12INIT()
{
  WDTCTL=WDTPW+WDTHOLD;//关闭看门狗定时器
  P1DIR|=BIT1;//p1.1输出
  P1OUT=0x00;//P1初始化
  P6SEL|=BIT0;//使用P6.0的复用口A0输入模拟量
  
  ADC12CTL0=ADC12ON+REFON+REF2_5V;//打开ADC12,使用内部参考电压2.5V
  delay_ms(30);//延时30ms
  ADC12CTL0|=SHT0_12+MSC;//采样保持时间为12个时钟周期,使用采样定时器采样
  ADC12CTL1=SHP;
  
  ADC12MCTL0|=SREF_1+INCH0;//参考电压为Vref,AVSS,使用A0输入
  ADC12IE=0x01;
  
  ADC12CTL0|=ENC;//打开转换使能
  //ADC12CTL0|=ADC12SC;
  
}
#pragma vector=ADC_VECTOR
__interrupt void ADC12_ISR(void)
{
  //_BIS_SR(GIE);
  while((ADC12IFG&BIT0)==0);//判断是否转换结束
  ADCO=ADC12MEM0;//把转换得到值放入变量
  if(ADCO<0x7ff)//得到的值与1.5v比较
    {
       //P1OUT^=BIT1;
       //for(i=0;i<5000;i++);
       P1OUT&=~BIT1;//LED熄灭
    }
  else
    {
      P1OUT|=BIT1;//LED亮
     // delay_ms(200);
    }

采样时钟AD12OSC,系统时钟为默认

为什么我的LED一直亮,不管电压是几伏特。

感觉输入信号加不进去
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
轻舞飞扬-青春
1楼-- · 2019-08-03 20:33
大神们帮下忙    搞了几天了出不来啊
chenyu988
2楼-- · 2019-08-03 20:48
在中断里面又while((ADC12IFG&BIT0)==0);//判断是否转换结束 不对吧,另外看看转换标志是自动还是需要软件清除
轻舞飞扬-青春
3楼-- · 2019-08-03 22:40
手册里说当访问ADC12MEMx时,标志位自动清除
轻舞飞扬-青春
4楼-- · 2019-08-03 23:34
 精彩回答 2  元偷偷看……
chenyu988
5楼-- · 2019-08-04 02:07
while((ADC12IFG&BIT0)==0);//判断是否转换结束
把这句去掉试试,你既然用了中断,就不需要再去查询标志了
轻舞飞扬-青春
6楼-- · 2019-08-04 04:52
chenyu988 发表于 2014-7-29 17:18
while((ADC12IFG&BIT0)==0);//判断是否转换结束
把这句去掉试试,你既然用了中断,就不需要再去查询标志了 ...

没有用啊,我不加信号也是一直亮:'(:'(

一周热门 更多>