求大神们帮下忙 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条回答
Z_J_Q
1楼-- · 2019-08-04 07:07
是不是因为你只是打开了P6.0口的第二功能,但是没有设置改口信号的方向为输入呢,你在P6SEL|=BIT0;前面加一条P6DIR = 0XFE;这条指令试试看
轻舞飞扬-青春
2楼-- · 2019-08-04 10:54
Z_J_Q 发表于 2014-7-30 08:35
是不是因为你只是打开了P6.0口的第二功能,但是没有设置改口信号的方向为输入呢,你在P6SEL|=BIT0;前面加一 ...

恩恩 我试试  不是默认的吗
奕者1999
3楼-- · 2019-08-04 15:35
 精彩回答 2  元偷偷看……
juky20080105
4楼-- · 2019-08-04 21:28
能进入中断吗,你采集到的ADC12MEM0是多少?
轻舞飞扬-青春
5楼-- · 2019-08-04 22:21
奕者1999 发表于 2014-7-31 13:48
我记得应该是开总中断进低功耗模式,这样会一直重复启动adc的,等不到他转换完成。 ...

我使用连续转换啊  没问题
轻舞飞扬-青春
6楼-- · 2019-08-05 03:33
问题解决了   P1DIR|=BIT1;//p1.1输出
  P1OUT=0x00;//P1初始化
  P6SEL|=BIT0;//使用P6.0的复用口A0输入模拟量
  
   这些声明不能放子函数里面   谢谢大家

一周热门 更多>