请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR2311 大家好、我有一个来自 Resource Explorer 的示例代码、它在其中读取2个引脚上的 ADC 值。 引脚1.0、1.1并将 ADC 值存储在 ADC_Result Array 中。 如果我将所有2个端口插入3.3V、我会得到255、这是3.3V 时的8位转换结果、但我希望得到10位结果。 如何更改?
#include unsigned char adc_result[2]; // 8位 ADC 转换结果数组 unsigned char i; int main (void) { WDTCTL = WDTPW | WDTHOLD; //停止 WDT //配置 ADC A0~2引脚 P1SEL0 |= BIT0 + BIT1; P1SEL1 |= BIT0 + BIT1; //禁用 GPIO 上电默认高阻抗模式以激活 //先前配置的端口设置 PM5CTL0 &=~LOCKLPM5; //配置 ADC ADCCTL0 |= ADCSHT_2 | ADCMSC | ADCON; // 16ADCclks、MSC、ADC 打开 ADCCTL1 |= ADCSHP | ADCCONSEQ_1 | ADCSSEL_1; // ADC 时钟 ACLK、采样计时器、s/w trig、单序列 ADCCTL2 |= ADCRES_1; //10位转换结果 ADCMCTL0 |= ADCINCH_1 | ADCSREF_1; // A0~2 (EOS);Vref=1.5V ADCIE |= ADCIE0; //启用 ADC 转换完成中断 //配置引用 PMMCTL0_H = PMMPW_H; //解锁 PMM 寄存器 PMMCTL2 |= INTREFEN; //启用内部基准 _DELAY_CYCLES (400); //基准趋稳延迟 __no_operation(); while (1) { I = 1; while (ADCCTL1和 ADCBUSY); //等待 ADC 内核处于活动状态 ADCCTL0 |= ADCENC | ADCSC; //采样和转换开始 _bis_SR_register (LPM0_bits | GIE); //输入带中断的 LPM0 __no_operation(); //仅用于调试 _delay_cycles (5000); __no_operation(); } } // ADC 中断服务例程 #if defined (__TI_Compiler_version__)|| defined (__IAR_systems_ICC__) #pragma vector=adc_vector __interrupt void adc_isr (void) #elif defined (__GNU__) void __attribute__((interrupt (adc_vector))))) adc_isr #else error 编译器#void (void)! #endif { switch (__evo_in_range (ADCIV、ADCIV_ADCIFG)) { 案例 ADCIV_NONE: 中断; ADCIV_ADCOVIFG 案例: 中断; 案例 ADCIV_ADCTOVIFG: 中断; ADCIV_ADCHIIFG 案例: 中断; ADCIV_ADCLOIFG 案例: 中断; ADCIV_ADCINIFG 案例: 中断; ADCIV_ADCIFG 案例: ADC_RESULSE[i]= ADCMEM0; if (i ==0) { _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS); //存在 LPM0 } 其他 { i--; } 中断; 默认值: 中断; } }