P2DIR|=BIT0+BIT1; //P2.0和P2.1为告警输出; } void ADC12(void) { ADC12CTL0 &=~ ENC; //在进行设置时首先复位ADC的转换使能 ADC12CTL0 = ADC12ON+REF2_5V+SHT0_8; //采用内部2.5V参考,打开通道10REFON自动打开 ADC12CTL1 = SHP+ADC12SSEL_2; //上升沿采样,主时钟,MEM0 ADC12MCTL0 = EOS + INCH_10+SREF_1; //选择通道10,Vref+为参考电压,进行温度测量 ADC12CTL0 |= ENC; ADC12CTL0 |= ADC12SC; // 开始转换 if ((ADC12IFG & BIT0)==1) //如果转换完毕,读走数据 ADC_Result[i]=ADC12MEM0; } void Alarm(float t) { if(t>=Th) P2OUT|=BIT1; //高温告警 else if(t<=Tl) P2OUT|=BIT0; //低温告警 else P2OUT&=~(BIT0+BIT1); //无告警 } interrupt[TIMERA0_VECTOR] void Timer_A (void) //中断处理子程序// { int ADC_Sum=0; float Vst; for (i=0;i++;i<16) //连续进行16次转换,提高精度 { ADC12(); ADC_Sum +=ADC_Result[i]; //求和 i++; } ADC_Sum>>=4; //将ADC_Sum右移4位,相当于除以16.得到平均的结果; Vst=( ADC_Sum /4095.0)*2500; //完成转换,得到电压值 k++; #ifndef Trt T=(Vst-986)/3.35; //测出用0度作基准的温度 #else if (k==1) Vrt=Vst; //如果定义Trt,则将第一次的转换结果作为室温下的Vrt T=(Vst-Vrt)/3.35+Trt; //测出用室温作基准时的温度 #endif Alarm(T); //告警处理 } void main (void) { init(); //初始化 LPM1; //进入低功耗模式1; } 5. 结束语 |