请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430F6736 工具/软件:Code Composer Studio
大家好、
我尝试使用内部 ADC。 我使用以下示例代码:
#include unsigned int adc_result; int main (void) { WDTCTL = WDTPW | WDTHOLD; //停止 WDT //为 A0、P1.0输出设置 P1.2 P1SEL |= BIT2; //将 P1.2设置为非 IO _disable_interrupt (); //禁用中断;端口映射配置 PMAPKEYID = PMAPKEY; //启用访问端口映射寄存器 P1MAP2 = PM_ANALOG; //启用 A0 PMAPKEYID = 0; //禁用访问端口映射寄存器 _enable_interrupt (); //重新启用所有中断 P1DIR |= BIT0; //将 P1.0设置为输出方向 P1OUT &=~BIT0; //清除 P1.0 //设置 ADC10 ADC10CTL0 |= ADC10SHT_2 | ADC10ON; // S&H=16 ADC CLKS,启用 ADC10 ADC10CTL1 |= ADC10SHP; // ADCCLK = MODOSC;采样定时器 ADC10CTL2 |= ADC10RES; // 10位转换结果 ADC10MCTL0 |= ADC10INCH_0; // A0 ADC 输入选择;Vref=AVCC ADC10IE |= ADC10IE0; //启用 ADC conv 完整中断 while (1) { _delay_cycles (5000); ADC10CTL0 |= ADC10ENC | ADC10SC; //采样和转换开始 _bis_SR_register (LPM0_bits | GIE); //输入 LPM0,带中断 __no_operation(); //仅用于调试 如果(ADC_RESULT < 0x1FF) { P1OUT &=~BIT0; //清除 P1.0 LED 熄灭 } 其他 { P1OUT |= BIT0; //将 P1.0 LED 设置为打开 } void // ADC10中断服务例程 #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__) #pragma vector=ADC10_Vector __interrupt void ADC10_ISR (void) #Elif defined (__GCUN__) __attribute__(interrupt (interrupt (ADC10_ISR)#vector (void) #error!ADC10_ISR (void)#vector (void)#vector (void)#pru_elt! #endif { 开关(_偶数_IN_RANGE (ADC10IV、12)) { ADC10IV_NONE 案例:中断; //无中断 案例 ADC10IV_ADC10OVIFG:中断; //转换结果溢出 案例 ADC10IV_ADC10TOVIFG:中断; //转换时间溢出 案例 ADC10IV_ADC10HIIFG:中断; // ADC10HI 案例 ADC10IV_ADC10LOIFG:中断; // ADC10LO 案例 ADC10IV_ADC10INIFG:中断; // ADC10IN ADC10IV_ADC10IFG 案例: // ADC10 ADC_Result = ADC10MEM0; //存储 ADC10通道0结果 _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//返回时退出 LPM0 中断; 默认值:break; } }
我尝试了这个示例、给出了一个1V 的模拟输入。 根据代码、LED 不应亮起、但在这种情况下、LED 闪烁。
随着我增大模拟输入、闪烁速度会快得多。
我将通过电源提供模拟输入。
我面临的问题是什么?
我还需要连接外部晶体振荡器吗? (用于 XIN)
我甚至尝试在屏幕上打印 ADC 结果、但它打印的是波动值。
可以帮我解决这个问题吗?
谢谢、
评估