/********代码********/
#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一直亮,不管电压是几伏特。
感觉输入信号加不进去
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
把这句去掉试试,你既然用了中断,就不需要再去查询标志了
一周热门 更多>