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

 *第16301篇: [求助]读取AD不正常

  
楼 主:zhenjun_qi 2009年4月26日10:33
 [求助]读取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_();"时,串口输出结果就不对;


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


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:5月10日电子类项目大型公开课-[原创]

[下一篇主题]:芯扬国际大力推广通芯微D类音频功放。