我将会查看 ADC 的纹波代码。 (例如 MSP430F534x_ADC_07.c)。 该代码使用模拟输入 A0 (称为 P6.0)、但 MSP430F534X uC 似乎只有模拟输入 A1至 A5 (即 P6.1至 P6.5)+ A8 (P5.0)和 A9 (P5.1)。 此外、当我尝试使用 IAR 调试器进行调试时、我看到只有 ADC12MEM0寄存器值发生了更改、但使用了垃圾值、而其他 ADC12MEM 寄存器为0x0000。 我已使用 P6SEL |= 0x02选择模拟输入 A1 (P6.1)。 但 ADC12MEM0值仍会发生更改(仍然是垃圾值)、 ADC12MEM1为0x00000。 这样做的原因可能是什么?
请帮帮我。 提前感谢。
我将原始示例代码放在下面。
#include
#define Num_of 结果8.
volatile unsigned int results[num_for_results];
//在这方面需要是全局的
//示例。 否则、会显示
//编译器删除它是因为它
//不用于任何操作。
int main (空)
{
WDTCTL = WDTPW+WDTHOLD;//停止看门狗计时器
P6SEL |= 0x01;//启用 A/D 通道 A0
ADC12CTL0 = ADC12ON+ADC12SHT0_8+ADC12MSC;//打开 ADC12、设置采样时间
//设置多个采样转换
ADC12CTL1 = ADC12SHP+ADC12CONSEQ_2;//使用采样计时器、设置模式
ADC12IE = 0x01;//启用 ADC12IFG.0
ADC12CTL0 |= ADC12ENC;//启用转换
ADC12CTL0 |= ADC12SC;//开始转换
_bis_SR_register (LPM4_bits + GIE);//输入 LPM4、启用中断
__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)) ADC12ISR (void)
其他
错误编译器不受支持!
#endif
{
静态无符号字符索引= 0;
switch (__evo_in_range (ADC12IV、34))
{
情况0:中断;//向量0:无中断
情况2:中断;//矢量2:ADC 溢出
情况4:中断;//矢量4:ADC 时序溢出
情况6://向量6:ADC12IFG0
Results[索引]= ADC12MEM0;//移动结果
index++;//递增结果索引,模;在此处设置 Breakpoint1
如果(索引==8)
{
索引= 0;
}
情况8:中断;//向量8:ADC12IFG1
情况10:中断;//向量10:ADC12IFG2
情况12:中断;//向量12:ADC12IFG3
案例14:中断;//矢量14:ADC12IFG4
情况16:中断;//向量16:ADC12IFG5
情况18:中断;//向量18:ADC12IFG6
情况20:中断;//向量20:ADC12IFG7
情况22:中断;//向量22:ADC12IFG8
情况24:中断;//向量24:ADC12IFG9
情况26:中断;//向量26:ADC12IFG10
情况28:中断;//向量28:ADC12IFG11
情况30:中断;//向量30:ADC12IFG12
情况32:中断;//向量32:ADC12IFG13
案例34:中断;//矢量34:ADC12IFG14
默认值:break;
}
}