您好!
因此、我只想在具有延迟的 while 环路中读取引脚 P6.5 (A5)上的电压值。
我的时钟初始化为 MCLK 为20MHz、SMCLK 为10MHz、ACLK 为32k、所有这些都经过测试(我实际上已根据此时钟完成了基于 SPI 的图形 LCD 驱动程序、确保其正常工作)
这就是代码:
void adc_init (void) { P6SEL|=0x20;//P6.5不是 GPIO P8DIer&=~0x20;//P6.5为输出 ADC12CTL0&=~0x0002;//ADC12_A 禁用转换 ADC12ENC ADC12CTL0&=~0x0010;//ADC12_A 关闭 ADC12ON ADC12CTL0|=0x0400;//采样保持时间= 64个 ADC12CLK 周期 //采样定时器需要 SHI 信号的上升沿来触发每个采样和转换。 REFCTL0&=~0x0080;//REFMSTR=0、基准系统在可用时由 ADC12_A 模块内的传统控制位控制 ADC12CTL0|=0x0020;//ADC12_A 基准发生器打开。 在带有 REF 模块的器件中、这个位只有在 REF 模块的 REFMSTR 位被设定为0时才有效 ADC12CTL0|=0x0040;//ADC12_A 是基准发生器电压并且= 2.5V、这个位只有在 REF 模块的 REFMSTR 位被设定为0时才有效 //ADC12SC 开始采样和转换 ADC12CTL1|=0x5000;//转换起始地址为 ADC12MEM5 //ADC12_A 采样保持源选择为 ADC12SC 位 //ADC12_A 采样保持脉冲模式选择:SAMPCON 信号来源于采样输入信号 ADC12CTL1|=0x00E0;//ADC12_A 时钟分频8 ADC12CTL1|=0x0180;//ADC12_A 时钟源为 SMCLK //单通道、单次转换 ADC12CTL2|=0x0100;//ADC12_A 预分频器。 该位将选定的 ADC12_A 时钟源预分频4 ADC12CTL2|=0x0080;//温度传感器关闭 ADC12MCTL5|=0x0010;ADC12MCTL5&=~0x0060;//VR+= VREF+和 VR-= AVSS ADC12MCTL5|=0x0005;ADC12MCTL5&=~0x0009;//通道选择为 A5 __DELAY_CYCLES (100000); }
无符号短整型 ADC_Read (void) { 无符号短整型值= 0; ADC12CTL0|=0x0010;//ADC12_A 在 ADC12ON 上 ADC12CTL0|=0x0001;//开始采样和转换 ADC12SC ADC12CTL0|=0x0002;//ADC12_A 启用转换 ADC12ENC //__delay_cycles (2000); while (((ADC12CTL1&0x0001)=1); 值= ADC12MEM5; 返回值; }
这在主函数中
while (1) { volatile unsigned short value_for_adc= adc_read (); _DELAY_CYCLES (2000000); }
我没有得到真正的值、实际上我得到的是零!
我不关心我们是否将基准更改为 VCC、但我只是希望它连接到 ADC 模块2.5V 基准。
我的问题在哪里?