请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430F5529 工具/软件:Code Composer Studio
我在使用 ADC12获取值时遇到了一个奇怪的问题。 我想测量 A12上的电压。 电压读数应为0.89v、但我正在使用的代码似乎没有读出。 它只是得到0.0A 的帮助会很好。
谢谢、
------
float 电压; float bat_voltage (void) { ADC12CTL0 = ADC12SHT02 + ADC12ON; // 16个样本-采样时间、ADC12打开 ADC12CTL1 = ADC12SHP; //使用采样计时器 ADC12MCTL0 = ADC12INCH_12 + ADC12EOS; //选择 A12作为源输入 ADC12IE = 0x01; //启用中断 ADC12CTL0 = ADC12ENC; //启用转换 P7SEL |= BIT0; //选择 ADC 进行电池电压测量 int voltctl = 1000; //读取计时器以获取电压读数...然后放弃 while (voltctl >0) { ADC12CTL0 |= ADC12SC; //采样和转换开始 voltcttl-; //递减读取定时器 _bis_SR_register (LPM0_bits + GIE); // LPM0、ADC12_ISR 将强制退出 } if (voltctl = 0) { 电压= 99.9; //如果此代码超时,请将电压更改为99.9以指示错误 } 其他 { __no_operation(); //调试 } 返回电压; } // #if defined (__TI_Compiler_version__)|| defined (__IAR_systems_ICC__) #pragma vector=ADC12_vector __interrupt void ADC12ISR (void) #Elif defined (__GNU__) void __attribute__((interrupt (ADC12_vector))#defineer (void ADC12ISR (void)))(void 编译器错误))(不支持 ADC12ISR! #endif { switch (__even_in_range (ADC12IV、34)) { case 0:break; //向量0:无中断 情况2:中断; //向量2:ADC 溢出 情况4:中断; //向量4:ADC 时序溢出 情况6:中断; //向量6:ADC12IFG0 情况8:中断; //向量8:ADC12IFG1 大小写10:break; //向量10:ADC12IFG2 大小写12:break; //向量12:ADC12IFG3 case 14:break; //向量14:ADC12IFG4 情况16:中断; //向量16:ADC12IFG5 情况18:中断; //向量18:ADC12IFG6 案例20:中断; //向量20:ADC12IFG7 case 22:break; //向量22:ADC12IFG8 case 24:break; //向量24:ADC12IFG9 大小写26:break; //向量26:ADC12IFG10 case 28:break; //向量28:ADC12IFG11 情况30: //向量30:ADC12IFG12 电压= ADC12MEM12; //从 A12移动结果,IFG 被清除 _BIC_SR_REGISTER_ON_EXIT (LPM4_BITS);//退出活动 CPU break; case 32:break; //向量32:ADC12IFG13 case 34:break; //向量34:ADC12IFG14 默认值:break; } }