例1:用单通道重复采样模式对A1采样,将采样结果20次求平均,然后将结果存在变量ADC10_Result内。假设选择2分频后的ACLK做采样时钟,选择内部参考源 2.5V,ADC10SC触发采样,禁止ADC10中断,采样时间设置为64个采样时钟。
程序:
int ADC10_Result;
ADC10CTL1 |= CONSEQ_2; //单通道重复采样模式
ADC10CTL0 |= SREF_1+REFON+REF2_5V;//选择内部参考源2.5V,打开基准源
ADC10CTL0 |= ADC10SHT_3+MSC; //过采样率设置为64个采样周期,打开AD转换
ADC10CTL1|= ADC10SSEL_1+ADC10DIV_1+SHS_0; //ACLK2分频为采样时钟,用ADC10SC触发采集
ADC10CTL1 |=INCH_1; //选择通道A1
ADC10CTL0 |= ADC10ON; //开启ADC10
ADC10AE0 |= 0x02; //开启外部通道A1
for(int i=0;i<20;i++)
{
ADC10CTL0 |=ENC+ADC10SC; //开始转换
while((ADC10CTL0 &ADC10IFG)==0); //等待ADC10IFG标志变高(转换完成)
ADC10_Result+=ADC10MEM; //读取采样结果
}
ADC10_Result= ADC10_Result/20;
问题:
请问,在MSC=1的时候,ENC和ADC只要置过1,不就会自动取样转换了吗?为什么这个程序将其写在for循环内(每次都置1)?
而且自动取样转换,万一读取每次取样结果并处理取样结果的时间大于从这次转换完车到下一次转换完成的时间不就容易把下次的数据淹没吗?
求指教!万分感谢!
此帖出自
小平头技术问答
哦,谢谢啦,又看了一下datasheet,感觉明白好多了。所以,其实每次只要将ADC10SC置一就可以了,而ENC没必要每次都置一,是吗?
一周热门 更多>