#include <msp430x54x.h>
unsigned int results[4]; // 转换值存取变量
void main(void)
{
unsigned int i;
WDTCTL = WDTPW+WDTHOLD; // 关闭看门狗
P7SEL |= 0x03; // 使能外部晶振
UCSCTL6 |= XCAP_3; // 配置晶振电容
while ( (SFRIFG1 &OFIFG)) // 判断晶振是否起振
{
UCSCTL7 &= ~(XT1LFOFFG + DCOFFG); // 清除失效标志位
SFRIFG1 &= ~OFIFG; // 清除失效中断标志位
}
UCSCTL4 = SELM__DCOCLK + SELS__DCOCLK; // 选择时钟源
//SELM__DCOCLK主时钟选择DCOCLK;SELS__DCOCLK子系统时钟选择DCOCLK;
P7DIR &= ~(BIT4 + BIT5); // 输入
P7SEL |= (BIT4 + BIT5); // P7口第二功能
ADC12CTL2 = ADC12RES_2 + ADC12REFOUT; // AD基本配置
//ADC12RES_2定义转换结果分辨率 12位 13个时钟周期转换时间
//ADC12REFOUT打开参考输出
ADC12CTL0 = ADC12ON + ADC12MSC + ADC12SHT03 + ADC12REFON + ADC12REF2_5V;
//ADC12ON打开ADC12
//ADC12MSC SHI的第一个上升沿信号触发采样定时器,只要前面的转换完成,那么后面的转换就自动进行
//ADC12SHT03采样保持时间
//ADC12REFON ADC12参考发生器使能
//ADC12REF2_5V ADC12参考电压2.5V
ADC12MCTL0 |= ADC12SREF_1 + ADC12INCH_10; // 采样温度
//ADC12SREF_1 转换参考电压选择
//ADC12INCH_10输入通道选择 温度二极管
ADC12MCTL1 |= ADC12SREF_1 + ADC12INCH_11; // 采样VACC/2
//ADC12SREF_1转换参考电压选择
// ADC12INCH_11 输入通道选择 (AVCC – AVSS) / 2
ADC12MCTL2 |= ADC12INCH_12; // 通道12输入
//ADC12INCH_12 输入通道选择
ADC12MCTL3 |= ADC12INCH_13 + ADC12EOS; // 通道13输入
//ADC12INCH_13输入通道选择
//ADC12EOS 结束序列转换
ADC12CTL1 = ADC12SHP + ADC12CONSEQ_3; // 选择转换模式
//ADC12SHP 采样保持脉冲模式 采样保持信号源于采样定时器
//ADC12CONSEQ_3 序列通道重复转换
for (i=0;i<0xFFFF;i++); // 等待基准电压建立
UCSCTL8 |= MODOSCREQEN;
//MODOSC请求使能
ADC12IE |= 0X08; // 使能通道4中断
//中断使能寄存器
ADC12CTL0 |= ADC12ENC; // 开启转换
//ADC12使能转换
_EINT(); // 打开总中断
ADC12CTL0 |= ADC12SC; // 转换开始
//开始采样转换
LPM3; // 进入低功耗3
}
/*************************************************************************
** 函数名称:AD转换中断函数
** 工作环境: IAR 4.11B
** 功能: 保存转换值
** 相关文件:
** 修改日志:
*************************************************************************/
#pragma vector = ADC12_VECTOR
__interrupt void ADC12ISR(void)
{
results[0] = ADC12MEM0; // 保存第一通道值
//ADC12MEM0 ADC12转换结果存储器
results[1] = ADC12MEM1; // 保存第二通道值
results[2] = ADC12MEM2; // 保存第三通道值
results[3] = ADC12MEM3; // 保存第四通道值
}
|