4047|13

77

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

ADC0809的C程序,不知道哪错了。大侠们指点迷津啊 [复制链接]

void main(void)
{ unsigned char xdata* data dptr;
  unsigned char i,VOUT=0;
  float Y,Y1,Y2,X;
  while(1)

        {
         dptr=0x7ff8;   //0809的地址(按照传统的接法)
         *dptr=0x00;   //启动转换
         i=i;
         i=i;        
          while(VEOC==0);        //等待转换结束          
         VOUT =*dptr;//读转换结果

得到的就是错误结果,怎么也不对
譬如,我模拟输入电压为2.5V(参考电压5V),得到的结果是FFH

程序错了吗?

最新回复

很简单的问题,转换的默认值是从0到255,你只要把它换算成自己所要的电压值即可,如电压当前值=5/255*n,其中n即为你的转换值。  详情 回复 发表于 2010-4-2 19:39
点赞 关注

回复
举报

67

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
volatile xdata unsigned char * dptr = 0x7ff8;

void main(void)
{
  unsigned char i,VOUT=0;
  float Y,Y1,Y2,X;
  while(1)
  {
     *dptr=0x00;   //启动转换
     i=i;
     while(VEOC==0);        //等待转换结束          
     VOUT =*dptr;//读转换结果
  }
}
 
 

回复

83

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
以上不能通过编译  该这样
volatile unsigned char xdata * dptr = 0x7ff8;  /* xdata 在 char 后面 */
/* ...... */
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

4
 
更好些像这样
#define ADC0809_ADDR    (*((volatile unsigned char xdata*) 0x7ff8))

   /* .....  */
   ADC0809_ADDR = 0; /* start */

   /* .... */
   result = ADC0809_ADDR; /* read result */

   /* ... */
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

5
 
楼上大侠:
   我用的是89S51单片机。
   我上面写的程序编译通过了啊。大侠的编程风范来看,是搞ARM编程的吧。
  我只想知道我的程序有没有错。有的话,错哪?
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 
有结果只能说你的器件跑起来了...

看看硬件上的问题...
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

7
 
不好意思,刚才弄错了

我用查询方式来读结果的话,没有结果。程序停在  while(VEOC==0);  这一句

但用延时方式来读结果的话,有结果。但结果不对。

怎么办?

突然发觉 硬件比软件复杂得多----写程序只要1个小时,但在硬件上调试则要花一天。

就这个ADC0809,我整整调 1天了。坚持不了多久就要放弃了。

哪位大侠能解决我的困惑???

 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

8
 
程序停在  while(VEOC==0);  这一句

你的ADC启动没??

系统的调试一般占整个开发过程的.60%左右
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

9
 
应该启动了啊

传统的接线 和传统的 片外寻址 ,不知道错哪了?

接线时,我只用到了1路AD转换。那还有剩下的7路引脚是不是可以悬空?
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

10
 
data[VOUT] =*dptr;//读转换结果
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

11
 
调试程序前现检查硬件是否正常,基本功能写两三个小程序先试试。都通过了,在用你现在的程序去调试。否则,不要说一天了。一个星期你都不一定搞过。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

12
 
要加 volatile 限定。
如果没有,则第一次向 *dptr 的写有输出代码,而后来的读可能没有输入代码,
可能只是从寄存器读。
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

13
 
CMOS的输入都不应悬空,接GND或VCC
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

14
 
很简单的问题,转换的默认值是从0到255,你只要把它换算成自己所要的电压值即可,如电压当前值=5/255*n,其中n即为你的转换值。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表