打印
[PIC®/AVR®/dsPIC®产品]

为什么AD仿真时GO位是1也往下执行

[复制链接]
850|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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

71

主题

288

帖子

1

粉丝