一直没学过单片机,今天想试试,看到如下的程序中,AD转换的GO位为什么不清0呢?
////////////////////////////////////////////////////////////////////////////////////////////////////////
ADCON0=0x41;//4M晶振,所以选用Fosc/8系统时钟,选中AN0为模拟量输入通道,同时让AD转换器上电待命
ADCON1=0x8e;//AD转换结果左对齐,设置AN0为模拟输入口
delay(1); //延时2mS使AD转换器更稳定
}
uint getad()
{
uint adresult=0,adsum=0;
GO=1; //打开AD转换器开关
while(GO); //如果转换完成,ADGO置0
adresult=ADRESH; //先把高2位存入缓存器
adresult=adresult<<8|ADRESL; //再将低8位存入缓存器
adsum=adsum+adresult; //再将10位的转换结果存入缓存器
return(adsum);
}
////////////////////////////////////////////////////////////////////////////////////////
前面一句“GO=1;”打开了AD转换开关,接着就是"while(GO); "等待转换的完成。意思就是:一直停在此处等AD转换完成,GO置0后,进行下面的语句。
但是我在用软件仿真“while(GO)”时,在watch窗口看GO位明明是1,为什么也往下执行呢?而不是停在while(GO)处等待GO变0呢?
|