6688|13

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STC单片机A/D转换程序问题 [复制链接]

我用stc12c5608AD自带的AD做一个AD转换的程序
具体的代码如下
void ad_cov()
{
P1M0=P1M0||0x20;
P1M1=P1M1||0x20; //选择P1.5为开漏。(做A/D使用时选择的模式)
ADC_CONTR=0xc5; //540个时钟周期转换一次;ADC_FLAG=0;ADC_START=0(设置为1,开始转换,结束后清零);选P1.5做输入通道;
ADC_DATA=0;
ADC_LOW2=0;
ADC_CONTR=ADC_CONTR||0x08; //0000 1000  ADC_START=1;
//dely(1000);
if(ADC_CONTR&&0x10!=0) //while(ADC_FLAG=1)
{
  ADC_CONTR=ADC_CONTR&&0xEF; //1110 1111 ADC_FLAG=0;
  ADC_CONTR=ADC_CONTR&&0xF7; //1111 0111 ACD_START=0;
  yl=ADC_DATA+ADC_LOW2&&0x03;
}
}

我将转换后的值yl用液晶显示出来,无论给p1.5的电压是多大,yl的值始终为0.谁能给看看程序哪里错了呢,万分感谢!

最新回复

和我的一样,我也是按照宏晶公司网站上的程序改写的,和你最终的程序几乎一模一样,可是用串口发回来的数据不是00就是ff  详情 回复 发表于 2011-9-1 13:36
点赞 关注

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
帮顶下。
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
“||”这个是逻辑判断,你应该使用位操作符‘|’
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 1 楼 zhujinqiang 的回复:
帮顶下。

谢谢O(∩_∩)O
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

5
 
“||”,“&&”使用都有问题
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 2 楼 zyzhang365 的回复:
“||”这个是逻辑判断,你应该使用位操作符‘|’

......
像我这样又粗心又浮躁的怎么做得好东西呢!!
谢谢,我改再看看结果
 
 
 

回复

93

帖子

0

TA的资源

一粒金砂(初级)

7
 
我把程序改了一下.还是不对,好像是进不了A/D转换
void ad_cov()
{
ADC_CONTR=ADC_CONTR|0x80;//开AD电源
dely(500);
P1M0=P1M0|0x20;
P1M1=P1M1|0x20;
ADC_CONTR=0xc5; //540个时钟周期转换一次;ADC_FLAG=0;ADC_START=0(设置为1,开始转换,结束后清零);选P1.5做输入通道;
ADC_DATA=0;
ADC_LOW2=0;
ADC_CONTR=ADC_CONTR|0x08; //0000 1000  ADC_START=1;
if((ADC_CONTR&0x10)!=0) //while(ADC_FLAG=1)
{
ADC_CONTR=ADC_CONTR&0xE7;  // 1110 0111 ADC_FLAG=0,ACD_START=0 //这里运行不进来
yl=ADC_DATA+ADC_LOW2&0x03;
}
}
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

8
 
这一句贴错了:
yl=ADC_DATA+ADC_LOW2&0x03;
应该是
yl=ADC_DATA*4+ADC_LOW2&0x03;
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

9
 
if((ADC_CONTR&0x10)!=0) //while(ADC_FLAG=1)
这里是不是为了等待转换完成?
如果是,那么你这样写是不对的。
应该像这样:
while((ADC_CONTR&0x10) == 0); //转换完成置1 ---???


 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

10
 
芯片资料上写:AD转换完后,ADC_FLAG=1
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 8 楼 zyzhang365 的回复:
if((ADC_CONTR&0x10)!=0) //while(ADC_FLAG=1)
这里是不是为了等待转换完成?
如果是,那么你这样写是不对的。
应该像这样:
while((ADC_CONTR&0x10) == 0); //转换完成置1 ---???




这是是个查询
应该用while语句
应该改成while((ADC_CONTR&0x10) != 0);  ???
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

12
 
问题大致解决了
再次感谢 zyzhang365 的热心帮助
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

13
 
我的STC 内置的AD里面,ADC_FLAG是置1了,但是我用串口发送出去的数据总是FF,不知道为什么,哪怕我的电压只有2V,困惑不解啊.
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

14
 

回复 13楼 cykyelec 的帖子

和我的一样,我也是按照宏晶公司网站上的程序改写的,和你最终的程序几乎一模一样,可是用串口发回来的数据不是00就是ff
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表