📄 msp430f2274adc10 wendu.c
字号:
MSP430F2274中ADC10 内部温度传感器-MSP430单片机,MSP430F2274基础知识
/*******************************************************************************************************
* 功能: ADC10测片内温度两极管的电压
*
* 描述: 用 temp = ((Vref+ * temp )/ 1023 - 0.986) /0.00355 的公式来计算温
*
* 度值程序中写到的 "/0.0000355" 是将结果扩大100倍,保留俩位小数点 *
* AD 采样通道选择 A10(内部温度传感器),选用内部 1.5V 为正向参考电压 *
* 采样通道选择 A0,选用AVSS 为负参考电压,AVCC为正参考电压 *
* ADC10 采样保持时钟源选择 ADC10OSC ,采样保持时间64个ADC10CLKs. *
* 用于连续或重复模式并2分频. ADC10CTL0寄存器中的 位7 MSC *
* 0 多次采只样转换位,采样时序,要求SHI 上升沿来触发每次采样转换 *
* 1 第一次SHI的上升沿触发采样时序 一次采样转换结束以后,以后的采样自 *
* 动完成以定时方式进行采样.
*
*
*
* 此例在 IAR Embedded Workbench IDE for MSP430 v3.42a 调试通过 .
*
********************************************************************************************************/
#include <MSP430x22x4.h>
unsigned char ADC10FLAG=0;
unsigned int result;
void TIMER_A_SETTINGS( void )
{
TACTL=TASSEL1+TACLR+MC1;
CCR0=50000;
TACCTL0 |= CCIE;
}
void ADC10_SETTINGS ( void )
{
ADC10CTL0 &=~ ENC; // 设置ADC10CTL 先将此位清0,丧失ADC10功能 才修能改
ADC10CTL0 |= SREF_1; // AVSS 为负参考电压,VREF+内部参考为正电压
ADC10CTL0 |= ADC10SHT_3; // ADC10 采样保持时间为64个ADC10CLKs
ADC10CTL0 &=~ ADC10SR; // 采样速率 选用 200KSPS
ADC10CTL0 &=~ REFOUT; // 关闭内部参考电压输出
ADC10CTL0 &=~ REFBURST; // 内部参考电压连续补足
ADC10CTL0 &=~ MSC;
ADC10CTL0 &=~ REF2_5V; // 选择内部 1.5V 参考电压
ADC10CTL0 |= REFON; // 开启内部参考电压
ADC10CTL0 |= ADC10IE; // 允许 ADC10 采样中断
ADC10CTL0 &=~ ADC10IFG; // 初始先清楚 ADC10中断标记位
ADC10CTL0 |= ADC10ON; // 开启 ADC10 采样功能
ADC10CTL1 |= INCH_10; // 选择A10 ADC10片内温度传感器,
ADC10CTL1 |= SHS_0; // 选启 ADC10 内部采样时时钟发生器 ADC10OSC
ADC10CTL1 &=~ ADC10DF; // 采样结果以二进制格式存放
ADC10CTL1 &=~ ISSH; // 采样输入信号不反转
ADC10CTL1 |= ADC10DIV_1; // 对采样时钟源进行 2分频
ADC10CTL1 |= CONSEQ_0; // 单通道单次采样
}
void START_ADC10( void )
{
ADC10CTL0 |= ADC10SC + ENC;
}
void FORMAT_DATA( void )
{
result = ADC10MEM;
result = (int)(((1.5 * result )/ 1023 - 0.986) /0.0000355);
_NOP();
}
void main( void )
{
WDTCTL=WDTPW+WDTHOLD;
BCSCTL1 =CALBC1_1MHZ;
DCOCTL =CALBC1_1MHZ;
ADC10_SETTINGS();
TIMER_A_SETTINGS();
_BIS_SR(GIE);
while(1)
{
if(ADC10FLAG)
{
FORMAT_DATA();
ADC10FLAG = 0;
}
}
}
#pragma vector = ADC10_VECTOR
__interrupt void adc_isr(void)
{
ADC10FLAG=1;
}
#pragma vector = TIMERA0_VECTOR
__interrupt void ta0_isr(void)
{
CCR0=50000;
START_ADC10();
}
MSP430录入:dycxin 责任编辑:dycxin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -