各位大佬,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();
}
} |