请帮我分析下以下程序STC AD转换(c语言)有没有错误

来源:百度知道 编辑:UC知道 时间:2024/05/28 16:32:49
//P1.0 AD,NUM次取值
for (i = 0;i < NUM ;i++)
{
//将P1.0设置成适合AD转换的模式
//将P1口置高,为A/D转换作准备
channel1 = 1;

ADC_CONTR = ADC_CONTR|0x80; //10000000打开A/D转换电源

P1M0 = 0x10; //0001,0001用于A/D转换的P1.x口,先设为开漏
P1M1 = 0x10; //0001,0001P1.0先设为开漏。断开内部上拉电阻
delay_ms(20); //20ms

ADC_CONTR = ADC_CONTR&0xE0; //11100000 清ADC_FLAGADC_START位和低3位
ADC_CONTR = ADC_CONTR&0xF8; //设置当前通道号
delay_ms(1); //延时使输入电压达到稳定

ADC_DATA = 0; //清A/D转换结果寄存器
ADC_LOW2 = 0;

ADC_CONTR = ADC_CONTR|0x08; //0000,1000ADCS = 1,启动转换

while((ADC_CONTR & 0x10)==0); //00010000等待A/D转换结束

ADC_CONTR = ADC_CONTR & 0xE7; //11100111清ADC_FLAG位,停止A/D转换

//保存结果
num = ADC_DATA;
num = num << 2;
num = num + ADC_LOW2;
vin1[i] = 100 * num * 5/ 1024;
sum += vin1[i];
}
//求平均值
vin1[i] = sum / NUM;

首先,
P1M0 = 0x10; //0001,0001用于A/D转换的P1.x口,先设为开漏
P1M1 = 0x10; //0001,0001P1.0先设为开漏。断开内部上拉电阻
你如果想用P1.0那么你应该设为 P1M1 = 0x01;P1M0 = 0x01;
其次,最后的sum,vin[i]定义的是什么类型的变量?位数不够有可能溢出。

P1M0 = 0x10; //0001,0001用于A/D转换的P1.x口,先设为开漏
P1M1 = 0x10; //0001,0001P1.0先设为开漏。断开内部上拉电阻