STC12C5A60S2单片机AD,为什么只能用一路? 10

这是我的程序,网上找的,改了端口,还是只能用P1.0口。#include<STC12C5A60S2.H>#include<intrins.h>#include<basic... 这是我的程序,网上找的,改了端口,还是只能用P1.0口。
#include <STC12C5A60S2.H>
#include <intrins.h>
#include <basic.h>

void init_adc(void)
{
P1ASF=0x02; //AD功能寄存器,设置I/O口作为AD转换实用。使用P1.1口。
ADC_RES=0; //清理结果寄存器的值
ADC_RESL=0; //清理结果寄存器的值
ADC_CONTR=0x81; //开启AD电源并设置转换周期为540个时钟周期转换一次。
//ADC_POWER=1; CHS2,1,0为0,0,1用p1.1作为输入。SPEED1,0为0,540个时钟,
delayms(100);
}

uint Get_AD_Result()
{
uint d=0;
ADC_CONTR =0x88;
_nop_();
_nop_();
_nop_();
_nop_();
while(!(ADC_CONTR & 0X10));
ADC_CONTR &= ~0X10;
d |= ADC_RES;
d <<= 2;
d |= ADC_RESL;
return d;
}
展开
 我来答
冬天的抱憾
推荐于2018-04-13 · 超过10用户采纳过TA的回答
知道答主
回答量:35
采纳率:100%
帮助的人:8.9万
展开全部
STC12C5A60S2单片机有8路AD输入,但是它的AD核只有一个,1次只能进行一个输入端的AD转换,你可以看一下它的DataSheet上面是有相关的说明的,在STC官网上也有代码,进入www.stcmcu.com/网站,按下Ctrl键+F键就可以查询你想要的代码了。
993106193
2014-09-07 · TA获得超过280个赞
知道小有建树答主
回答量:926
采纳率:20%
帮助的人:515万
展开全部
ADC_CONTR这个寄存器是控制adc转换功能引脚寄存器,你要将这个寄存器的低三位修改为你所使用的引脚号 000 p0.0
001 p0.1
010 p0.2
……

111 p0.7
追问
不是已经改了么。。。。
追答
Get_AD_Result()函数里的没改
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
potti88
2018-12-13
知道答主
回答量:11
采纳率:100%
帮助的人:7908
展开全部
遇到了我以前的问题,首先确认你的程序没问题,我说的是控制字ADC_CONTR和P1ASF的赋值。如果没问题。重点来了,多通道用笨办法给ADC_CONTR赋值,如ch==0,ADC_CONTR直接等于0Xxx,不要用与,或赋值,这样程序比以前多几行判断赋值语句。我知道你看的很多例程和视频是用与/或 给ADC_CONTR赋值的,这些在单通道没有问题,多通道就会不成功。我也是用课程里的例程但其他通道就是没有数据。
STC有提示赋值不要用与或,所以尝试用笨办法,结果真的就解决了。判断通道号直接给ADC_CONTR赋值,测试就成功,7个通道采集不同的电压值,完全没问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-09-07
展开全部
可用8路,找找官方的手册看看,上面有代码
追问
我有官网手册,改了对应的口,感觉不对,有大神帮看看程序么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式