打印
[STC单片机]

STC15系列3路ADC输入如何设置?

[复制链接]
2248|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LKC134|  楼主 | 2019-7-28 10:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大佬,STC15系列内置ADC,如3路采样输入,应如何设置?按例程和手册上的设置只有一路输出,请各位指点下.谢谢!下面是部分程序:
#include "STC15.H"
#include"intrins.h"
#define uchar unsigned char
#define uint  unsigned int
#define ADC_POWER   0x80            //ADC电源控制位
#define ADC_FLAG    0x10            //ADC完成标志
#define ADC_START   0x08            //ADC起始控制位
#define ADC_SPEEDLL 0x00            //540个时钟
#define ADC_SPEEDL  0x20            //360个时钟
#define ADC_SPEEDH  0x40            //180个时钟
#define ADC_SPEEDHH 0x60            //90个时钟
/***************AD初始化*****************/
  void ADC_Init()
  {
   P1ASF=0x07;           //设置P1.2和P1.1,P1.0为模拟输入
   CLK_DIV=0x20;
    ADC_RES=0;               
   ADC_RESL=0;
   ADC_CONTR=0x80;
   Delay(2);                //上电延时2ms
   ADC_CONTR=ADC_POWER|ADC_SPEEDHH|ADC_START;
/***************ADC处理********************/

/*uint Get_ADC(uchar channel)
  {
         uchar ad_finished=0;//存储A/D转换标志
             
     ADC_CONTR|=ADC_POWER|ADC_SPEEDHH|ADC_START|channel;
         _nop_();
         _nop_();
         _nop_();
         _nop_();
     ad_finished=0;
     while(ad_finished==0)//等待A/D转换结束
     ad_finished=(ADC_CONTR&ADC_FLAG); //0001,0000 测试A/D转换结束否  
     ADC_CONTR&=~ADC_FLAG;//1111,0111 清 ADC_FLAG 位, 关闭A/D转换
     return  ADC_RES*4+ADC_RESL;//返回 A/D 高8位+低2位转换结果
  }
void fighting_1(void)
{
  uchar k;  
           for(k=20;k>0;k--)
        {          
             temp+=Get_ADC(2);                 
        }
         temp=temp/20;
         temper=temp;//给PID装载实际值
   }
void fighting_2(void)
{
  uchar m;
  for(m=20;m>0;m--)
  {
    volatge+=Get_ADC(1);
  }
   volatge=volatge/20;
           set_sum=volatge;//给PID装载目标值
}
void fighting_3(void)
{
   uchar w;
   for(w=20;w>0;w--)
    {
   ntc_dat+=Get_ADC(0);
   }
           ntc_dat=ntc_dat/20;
        NTC_bat=ntc_dat;
}
/**********主程序**********/   
void main(void)
{
                 
Init();
ADC_Init();
IO_Init();

while(1)
{         
   fighting_1();
   fighting_2();
   fighting_3();  
}
}         

使用特权

评论回复

相关帖子

沙发
airwill| | 2019-7-28 11:35 | 只看该作者
可以在 ADC 中断里切换 ADC 通道

使用特权

评论回复
板凳
LKC134|  楼主 | 2019-7-28 13:02 | 只看该作者
airwill 发表于 2019-7-28 11:35
可以在 ADC 中断里切换 ADC 通道

用查询方式做不到吗?

使用特权

评论回复
地板
LKC134|  楼主 | 2019-7-28 13:02 | 只看该作者
airwill 发表于 2019-7-28 11:35
可以在 ADC 中断里切换 ADC 通道

用查询方式做不到吗?

使用特权

评论回复
5
airwill| | 2019-7-28 14:32 | 只看该作者
查询倒也是可以, 一般导致软件的效率比较低罢了
while(ad_finished==0)//
你这里会永远也等不到 转换结束标志哦

使用特权

评论回复
6
LKC134|  楼主 | 2019-7-28 20:33 | 只看该作者
airwill 发表于 2019-7-28 14:32
查询倒也是可以, 一般导致软件的效率比较低罢了
while(ad_finished==0)//
你这里会永远也等不到 转换结束 ...

如果使用中断做,那中断的时间是不是在定时器里设置?

使用特权

评论回复
7
guansai888| | 2019-7-28 21:58 | 只看该作者
STC有很多例程啊,在STC IAP软件里。全套的。

使用特权

评论回复
8
LKC134|  楼主 | 2019-7-29 14:58 | 只看该作者
我知道有例程,之前没 做过多路采样的,例程那些消化不过来。目前已经搞定了,用查询方法做。多谢了!

使用特权

评论回复
9
ayb_ice| | 2019-7-31 15:07 | 只看该作者
ADC_CONTR|=ADC_POWER|ADC_SPEEDHH|ADC_START|channel;
应该是
ADC_CONTR = ADC_POWER|ADC_SPEEDHH|ADC_START|channel;

使用特权

评论回复
10
songchenping| | 2019-8-1 08:59 | 只看该作者
LKC134 发表于 2019-7-29 14:58
我知道有例程,之前没 做过多路采样的,例程那些消化不过来。目前已经搞定了,用查询方法做。多谢了! ...

你查询是如何做的?

使用特权

评论回复
11
songchenping| | 2019-8-1 10:11 | 只看该作者
本帖最后由 songchenping 于 2019-8-1 10:39 编辑

11

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

339

帖子

6

粉丝