#include <msp430x54x.h>
#include <stdio.h>
/*******************************************************************************
全局变量的定义
*******************************************************************************/
unsigned int results[4]; // 转换值存取变量
/*************************************************************************
** 函数名称:主函数
** 工作环境: IAR 4.11B
** 相关文件:
** 修改日志:
*************************************************************************/
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; // 选择时钟源
P7DIR &= ~(BIT4 + BIT5); // P6.7口A7输入
P7SEL |= (BIT4 + BIT5); // P7口第二功能
ADC12CTL2 = ADC12RES_2 + ADC12REFOUT; // AD基本配置
ADC12CTL0 = ADC12ON + ADC12MSC + ADC12SHT03 + ADC12REFON + ADC12REF2_5V;
ADC12MCTL0 |= ADC12SREF_1 + ADC12INCH_10; // 采样温度
ADC12MCTL1 |= ADC12SREF_1 + ADC12INCH_11; // 采样VACC/2
ADC12MCTL2 |= ADC12INCH_12; // 通道12输入
ADC12MCTL3 |= ADC12INCH_13 + ADC12EOS; // 通道13输入
ADC12CTL1 = ADC12SHP + ADC12CONSEQ_3; // 选择转换模式
for (i=0;i<0xFFFF;i++); // 等待基准电压建立
UCSCTL8 |= MODOSCREQEN;
ADC12IE |= 0X08; // 使能通道4中断
ADC12CTL0 |= ADC12ENC; // 开启转换
_EINT(); // 打开总中断
ADC12CTL0 |= ADC12SC; // 转换开始
LPM3; // 进入低功耗3
}
/*************************************************************************
** 函数名称:AD转换中断函数
** 工作环境: IAR 4.11B
** 功能: 保存转换值
** 相关文件:
** 修改日志:
*************************************************************************/
#pragma vector = ADC12_VECTOR
__interrupt void ADC12ISR(void)
{
results[0] = ADC12MEM0; // 保存第一通道值
printf("
%d",results[0]);
results[1] = ADC12MEM1; // 保存第二通道值
printf("
%d",results[1]);
results[2] = ADC12MEM2; // 保存第三通道值
printf("
%d",results[2]);
results[3] = ADC12MEM3; // 保存第四通道值
printf("
%d",results[3]);
}
第一通道打印出来的温度值是1632,实际温度大概是22度。不知道这个怎么对应过来的?请教各位高手!
第二通道打印出来的是2771,这个也没看明白是啥?
第三、四通道风别是1925、1818?请高手指点.
此帖出自
小平头技术问答
[ 本帖最后由 huo_hu 于 2012-12-5 19:53 编辑 ]
void Cal_Temp(unsigned int adval) {
// oC = ((A10/1024)*1500mV)-986mV)*1/3.55mV
// =A10/1024*2500/3.55*25600-986/3.55*25600=(A10*17606-7102976)/25600 17606/7=2515.14
Current_Temperature = (Current_Temperature+(unsigned int)(((unsigned long)adval*2515-7102976)>>8))/2;
}
[ 本帖最后由 huo_hu 于 2012-12-7 09:34 编辑 ]
谢谢
一周热门 更多>