[PIC®/AVR®/dsPIC®产品] 为什么AD仿真时GO位是1也往下执行

[复制链接]
1029|1
 楼主| 西门闩 发表于 2018-5-13 16:25 | 显示全部楼层 |阅读模式
一直没学过单片机,今天想试试,看到如下的程序中,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呢?
y18370990546 发表于 2018-5-13 20:35 来自手机 | 显示全部楼层
理论上是不可能出现这种情况,在while(GO);后一条语句设断点,看GO的值有没变0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

73

主题

294

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部