请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP-EXPCC430RFX
CAL_ADC_20T30=1029、CAL_ADC_20T85=1896。 温度通过数据表 IntDegC =(SavedADC12MEM0-CAL_ADC_20T30)*((85-30)/(float)(CAL_ADC_20T85-CAL_ADC_20T30))+30;IntDegC = 64 (运行程序)中提供的公式计算。
#include "msp430.h"
#include "hal_adc.h"
volatile signed int SavedADC12MEM0 = 0;
volatile unsigned long SavedADC12MEM1 = 0;
volatile signed int IntDegC、IntDegF;
volatile unsigned long Vcc = 0;
unsigned char exite_active_fy_found_adc12 = 0;volate_adc_adc_adc_20c_degc
= 0
;tature_adc = 0;tature_deg30;tal/ atfloat = 2030 手动对
//温度传感器进行25C [RoomTemp]校准以替换故障30C 校准值。
//--ADC 软件温度校准常数、ADC27勘误表的权变措施
//关于温度校准常数的问题,存储在 INFOB
中//如果默认校准值出现故障
#ifdef __TI_Compiler_version__/
如果使用 CCS 编译
器#pragma DATA_SECTION (adcTempCalibration、".infoB"),执行手动软件校准;
adc25int
#Elif __IAR_systems_icc_
//如果使用 IAR 编译器
#define INFOB _Pragma ("location="INFOB\")
INFOB __NO_init int adcTemp25Calibration;
#endif
/******** //**
*@brief 打开并初始化 ADC12,以便
* 采样温度、Vcc
*
@param none
*
*@return none
/
void HalAdcInit (void)
{
//通道序列、一次、ADC12CLK=MODOSC
UCSCTL8 |= MODOSCREQEN;
REFCTL0 &=~REFVSEL_3;
REFCTL0 |= REFVSEL_1 + REFON; //配置内部2.5V 基准
__delay_cycles (1900); //基准稳定的延迟
ADC12CTL0 &=~ADC12ENC; //确保 ENC 被清除
ADC12CTL0 = ADC12ON + ADC12SHT0_15 + ADC12MSC;
ADC12CTL1 = ADC12SHP + ADC12CONSEQ_1 + ADC12SSEL_0;
ADC12CTL2 = ADC12RES_2;
ADC12MCL1 = ADC12CONE_1 = ADC12C12EOS 通道
+ ADC12C12C12SSEL_0;ADC12CE_ADC12MCTEF 通道
+ ADC12REF_ADC12REF_ADC12MCTL1;ADC12REF_ADC12REF_ADC12REF_ADC12REF_
CAL_ADC_20T30 =(*(int *) 0x01A1E);//ADC 温度校准常量(对于2.0V ref
) CAL_ADC_20T85 =(*(int *) 0x01A20);
if (((unsigned int) adcTemp25Calibration)== 0xFFFF)
{
M =(85-30)/(float)(CAL_ADC_20T85 - CAL_ADC_20T30);//计算斜率
C = 85 - m*CAL_ADC_20T85;
}
否则
{
//计算25°C 室温下的斜率
//CAL_ADC_20T30 = adcTemp25校准;
M =(85-25)/(float)(CAL_ADC_20T85 - adcTemp25Calibration);//计算斜率
C = 85 - m*CAL_ADC_20T85;
}
/******** //**
*@简约返回光传感器采样值(摄氏度)
*
*@param none
*
*@return lightSensorValue 光传感器 ADC 采样值
/
int HalAdcGetTempRaw (void)
{
return SavedADC12MEM0;
}
/******** //**
*@简约返回光传感器采样值(摄氏度)
*
*@param none
*
*@return lightSensorValue 光传感器 ADC 采样值
/
无符号长整型 HalAdcGetTempDegC (void)
{
return IntDegC;
}
/******** //**
*@简略返回光传感器采样值(华氏度
)*
@param none
*
*@返回光传感器值 光传感器 ADC 采样值
/
无符号长整型 HalAdcGetTempDegF (void)
{
return IntDegF;
}
/******** //**
*@简约返回光传感器采样值
*
*@param none
*
@return lightSensorValue 光传感器 ADC 采样值
/
无符号长整型 HalAdcGetVcc (void)
{
return Vcc;
}
/******** //**
*@简要关闭/禁用 ADC12。
*
*@param none
*
*@return none
/
void HalAdcShutDown (void)
{
//关闭 ADC 模块和内部基准
ADC12CTL0 &=~ADC12ENC;
ADC12CTL0 = 0x00;
ADC12IE = 0x00;
REFCTL0 &=~REFON;
}
/******** //**
*@简要将 ADC 读数转换为 Vcc & Temp。
*
*@param none
*
*@return none
/void
HalAdcConvertTempVcc (void)
{
IntDegF = 10*(SavedADC12MEM0*m + c)*((float) 9/5)+ 320;
IntDegC = 10*(SavedADC12MEM0*m + c);
Vcc =(SavedADC12MEM1 * 40)------------------
*/
******** //**
*@brief 启动 ADC 转换。
*
*@param none
*
*@return none
/
void HalAdcStartRead (void)
{
ADC12IFG = 0x00; //清除所有 ADC12通道 int 标志
REFCTL0 |= REFON; //打开 ADC12基准
_DELAY_CYCLES (1900); //参考稳定的延迟
ADC12IE = BIT1; //启用存储器1中断
ADC12CTL0 |= ADC12ENC | ADC12SC; //开始转换
}
/********* //**
*@brief 设置使从
*退出活动 CPU 模式的标志 ADC12 ISR。
*
**@param quit
*
- 1 -从 ADC12 ISR 退出有效
*- 0 -在退出 ADC12ISR 时保持在 LPMx 中
*
@返回无
/void
HalAdcSetQuitFromISR (无符号字符 quit)
{exit_active_from_ADC12=
quit;
}/*---------------
*/
#pragma vector=ADC12_vector
__interrupt void ADC12_ISR (void)
{
ADC12CTL0 &=~ADC12ENC; //禁用 ADC12转换
REFCTL0 &&~REFON; //禁用引用(如果启用)
SavedADC12MEM0 = ADC12MEM0; //保存采样数据
ADC12MEM1 = ADC12MEM1;
如果(EXIT_ACTIVE_FIT_ADC12)
_BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);
}