你(们)好 我在 G2553上处理 ADC 芯轴。 当我使用 P1.1引脚使用 ADC 时、它无法正确测量。 即使未安排输出、我也使用万用表在该引脚处测量了3.3V 电压。 我检查了所有其他引脚、我还在 P1.3上测量了3.3V 电压。 为什么这些引脚始终提供输出? 我使用的代码是吹气。
#include
volatile long tempRaw;
易失性 int 通道;
void WDTSettings (void);
void FaultRoutine (void);
void ClockSettings (void);
void PinSettings (void);
void ADCinitializeChannel_4 (void);
void ADCinitializeChannel_5 (void);
void ADCRestart (void);
int Calculate_Voltage (int tempRaw);
void main (void)
{
WDTSettings();
IF (CALBC1_1MHz =0xFF || CALDCO_1MHz =0xFF)
FaultRoutine();//如果校准数据被擦除
ClockSettings();
PinSettings();
while (1)
{
通道= 14;
if (Channel=14){
ADCinitializeChannel_4 ();
IF (Calculate_Voltage (ADC10MEM)< 1)
P1OUT = BIT0;
其他
P1OUT = 0x00;
_delay_cycles (125000);
ADCRestart();
通道= 15;
}
if (Channel==15){
ADCinitializeChannel_5 ();
IF (Calculate_Voltage (ADC10MEM)> 1)
P1OUT = BIT6;
其他
P1OUT = 0x00;
_delay_cycles (125000);
ADCRestart();
}
}
}
void WDTSettings (void){
WDTCTL = WDTPW + WDTHOLD;//停止看门狗计时器
}
void ClockSettings (void){
BCSCTL1 = CALBC1_1MHz;//设置范围
DCOCTL = CALDCO_1MHz;//设置 DCO 步长+调制
BCSCTL3 |= LFXT1S_2;// LFXT1 = VLO
IFG1 &=~OFIFG;//清除 OSCFault 标志
BCSCTL2 |= SELM_0 + DIVM_3 + DIVS_3;// MCLK = DCO/8
}
void PinSettings (void){
P1DIR = 0x41;// P1.0&6输出
P1OUT = 0;// LED 关闭
}
空 FaultRoutine (空)
{
P1OUT = 0x01;//红色 LED 亮起
}
void ADCinitializeChannel_4 (void){
ADC10CTL1 = INCH_4 + ADC10DIV_0;//温度传感器 ADC10CLK
ADC10CTL0 = SREF_0 + ADC10SHT_3 + REFON + ADC10ON;
_delay_cycles (5);//等待 ADC 基准趋稳
ADC10CTL0 |= ENC + ADC10SC;//采样和转换开始
}
void ADCinitializeChannel_5 (void){
ADC10CTL1 = INCH_5 + ADC10DIV_0;//温度传感器 ADC10CLK
ADC10CTL0 = SREF_0 + ADC10SHT_3 + REFON + ADC10ON;
_delay_cycles (5);//等待 ADC 基准趋稳
ADC10CTL0 |= ENC + ADC10SC;//采样和转换开始
}
void ADCRestart (void){
ADC10CTL0 &=~ENC;
ADC10CTL0 &=~(REFON + ADC10ON);
}
int Calculate_Voltage (int tempRaw){
内部电压;
Voltage =(tempRaw)*(3.3/1024);
返回电压;
_delay_cycles (125000);
}