导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[求助]读取AD不正常

* 28789: [求助]读取AD不正常

   zhenjun_qi 
zhenjun_qi发表的帖子 

 [求助]读取AD不正常
求助:
背景描述:
(1)用8051读取一个2路的12位AD器件;
(2)AD器件的读写顺序:先选择AD通道,再读高位,再读低位;
问题描述:
(1)我用串口调试助手将AD值读上来;读上来的数据格式是“40 XX YY ZZ SS FF”(XX:0路高4位;YY:0路低4位;ZZ:1路高4位;SS:1路低4位)
(2)如果程序这样写

ADC_chnum=0x02;
serial_rec_data[1]=ADC_1;
serial_rec_data[2]=ADC_0;
ADC_chnum=0x04;
serial_rec_data[3]=ADC_1;
serial_rec_data[4]=ADC_0;

串口调试工具读出的结果是
40 05 AF 05 AF FF 
40 05 B9 05 B9 FF 
也就是说,2路AD值一样,都为“05 AF”或“05 B9”,这是不对的。
(2)如果程序改为

ADC_chnum=0x04;
for(i=0;i  <1;i++);
serial_rec_data[1]=ADC_1;
serial_rec_data[2]=ADC_0;
 
ADC_chnum=0x02;
for(i=0;i  <1;i++);
serial_rec_data[3]=ADC_1;
serial_rec_data[4]=ADC_0;

串口调试工具读出的结果是
40 05 B2 00 00 FF 
40 05 B0 00 00 FF 
40 05 AD 00 00 FF 
2路AD值分开了,很正常;
(3)于是,我怀疑是AD器件的时序不好,在选择完“AD通道”后,需要延时。于是,程序改为

ADC_chnum=0x04;
_nop_();_nop_();_nop_();_nop_();_nop_();//100个"_nop_();"
serial_rec_data[1]=ADC_1;
serial_rec_data[2]=ADC_0;
   
ADC_chnum=0x02;
_nop_();_nop_();_nop_();_nop_();_nop_();//100个"_nop_();"
serial_rec_data[3]=ADC_1;
serial_rec_data[4]=ADC_0;

串口调试工具读出的结果是
40 05 A2 05 A2 FF 
40 05 9B 05 9B FF 
2路AD值又一样了,这样又不对了。
(4)分析:100个_nop_()的延时比“for(i=0;i  <1;i++);”长,
可是使用“for(i=0;i  <1;i++);”时,串口输出结果就对;
而使用100个"_nop_();"时,串口输出结果就不对;


为什么?这个问题莫名其妙,毫无理由!
请教!!!!!!!!!
有遇到类似问题的吗?怎样解决?谢谢!

发表时间:2009年4月26日10:33:51

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:单片机控制液晶屏 并口通信P0.0~P0.7是数据传输线,也可理解不地址线 /P P
[下一篇帖子]:单片机的可靠性与抗干扰技术 /P P [URL=http://www.elecfans.com/