求助:C8051F060的ADC全速运行无法得到结果

[复制链接]
3007|7
 楼主| jiny05 发表于 2007-9-16 11:51 | 显示全部楼层 |阅读模式
用060内部集成的16位ADC,单步运行的结果都是正确的,可是全速运行结果不是0就是ffff。请问各位高手是什么问题呢?ADC转换的代码如下:
void ADC_Init(void)
{char SFRPAGE_SAVE=SFRPAGE;
SFRPAGE=ADC0_PAGE;

AMX0SL=0x00;
REF0CN=0x03;
ADC0CF=0x80;           ADC0CN=0x80;

SFRPAGE=SFRPAGE_SAVE;
}

void ADC_Convert(void)
{
char SFRPAGE_SAVE=SFRPAGE;
SFRPAGE=ADC0_PAGE;

AD0INT=0;

AD0BUSY=1;

while(!AD0INT)
{j++;}

adc_temp=ADC0H;
adc_temp=adc_temp*256+ADC0L;
result=adc_temp;


SFRPAGE=SFRPAGE_SAVE;
}
 楼主| jiny05 发表于 2007-9-16 14:20 | 显示全部楼层

很诡异

我在char SFRPAGE_SAVE=SFRPAGE;
SFRPAGE=ADC0_PAGE;


AD0INT=0;
之间加了个delayms(10)
就好了 
不知道为什么
ayb_ice 发表于 2007-9-17 07:48 | 显示全部楼层

有可能软件问题...

ADC转换太快,读取太慢...
在中断中读数据...
winloop 发表于 2007-9-17 08:46 | 显示全部楼层

间隔加大试试

minicatcat 发表于 2007-9-17 09:14 | 显示全部楼层

定义一个 sfr16 ADC ,一次性读会好一些


 
ayb_ice 发表于 2007-9-17 09:37 | 显示全部楼层

"定义一个 sfr16 ADC ,一次性读会好一些"

这是典型的掩耳盗铃...
 楼主| jiny05 发表于 2007-9-17 09:55 | 显示全部楼层

谢谢各位大侠~

iampoor 发表于 2007-9-17 10:44 | 显示全部楼层

不是关键问题

应该是你搞错了AD转换完成的标志,没有转换结束就读;单步执行是因为每一步中间有足够的时间完成转换。

自己看手册,搞清楚一些配置和控制寄存器的操作、含义。

有些同志回答问题存在误导,呵呵!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

10

帖子

1

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