您好,
下面是我的 ADC 代码,我们集成了 UART 以在控制台上打印 ADC 值。为 单通道配置的 ADC 会反复转换。如果 它处于调试模式,我可以在 ISR 中连续打印。
如果我刷新了代码,那么我无法连续打印。请您说出问题所在。
无符号 int ADC_Result;
Int main (无效)
{
WDTCTL = WDTPW | WDTHOLD;//停止 WDT
initClockTo16MHz();
//配置 GPIO
P1DIR |= BIT0;//将 P1.0/LED 设置为输出方向
P1OUT 和=~BIT0;// P1.0 LED 关闭
#ifdef UART 打印启用
UART 配置();//配置 UART
#endif
//配置 ADC A1引脚
SYSCFG2 |= ADCPCTL1;
//禁用 GPIO 通电默认高阻抗模式以激活
//以前配置的端口设置
PM5CTL0和=~LOCKLPM5;
//配置 ADC10
ADCCTL0 |= ADCSHT_2 | ADCON;// ADCON,S&H = 16 ADC CLKS
ADCCTL1 |= ADCSHP;// ADCCLK = MODOSC;采样计时器
ADCCTL2 |= ADCRES;// 10位转换结果
ADCMTL0 |= ADCINCH_3;// A1 ADC 输入选择;Vref=AVCC
ADCIE |= ADCIE0;//启用 ADC 转换完成中断
MSP_UART_LOG_INFO (“MSP:ADC 已配置...”) \n\r");
While (1)(同时)
{
ADCCTL0 |= ADCENC | ADCSC;//采样和转换开始
__bis_SR_register (LPM0_bits | GIE);// LPM0,ADC_ISR 将强制退出
__no_operation();//仅用于调试
IF (ADC_Result < 0x1FF)
P1OUT 和=~BIT0;//清除 P1.0 LED 关闭
否则
P1OUT |= BIT0;//将 P1.0 LED 打开
__delay_cycles (5000);
}
}
// ADC 中断服务例程
#IF 定义(__TI_Compiler_version__)||定义(__IAR_SYSTEMS _ICC__)
#pragma vector=ADC_vector
中断 void ADC_ISR (void)
#Elif Defined (__GNUC _)
void __attribute__(中断(ADC_Vector)) ADC_ISR (无效)
#else
错误编译器不受支持!
#endif
{
开关(__evo_in_range (ADCIV,ADCIV_ADCIFG))
{
案例 ADCIV_NONE:
休息;
案例 ADCIV_ADCOVIFG:
休息;
案例 ADCIV_ADCTOVIFG:
休息;
案件 ADCIV_ADCHIIFG:
休息;
案例 ADCIV_ADCLOIFG:
休息;
案例 ADCIV_ADCINIFG:
休息;
案例 ADCIV_ADCIFG:
ADC_Result = ADCMEMM0;
MSP_UART_LOG_INFO (“MSP:ADC 内部%d\n\r\n",ADC_Result);
__BIC SR 寄存器_ON_EXIT (LPM0_bits);//从 LPM0清除 CPUOFF 位
休息;
默认值:
休息;
}
}