本帖最后由 ssjzj 于 2017-6-9 14:25 编辑
void ADCInit(void)
{
P0SEL|=0X01;
APCFG|=0x01;//设置P0_0为模拟量输入
// P0SEL|=0X07;
// APCFG|=0x07;//设置P0_7为模拟量输入
//ADCCON1=0x33;//启动选择为定时器1通道0比较事件
//ADCCON2=0x60;//AIN7引脚电压作为外部参考电压;256抽取率,10位数字有效位
//
//ADCH&=0X00;//?清EOC标志???
ADCCON3=0xb0;//?单次转换,参考电压为,对AIN1进行A/D转换,12位分辨率?P0.7??
ADCCON1=0X33;//
ADCCON1|=0X40;//启动ad
while(!(ADCCON1 & 0x80)); //等待转换结束
//ADCCON1|=0X80
//ADCIF=0;//清AD中断标志
value = ADCL>>4;//程序中设置的是12bit的精度,取低4位值
value |= ADCH<<4; //高八位值
//
ADCValue[gNum] = value;//此处有疑问,本来是12bit的精度,除数应该是4096的,但是得用2048才能得到准确的值
//ADCValue[gNum]=(float)(value/(float)2048)*3.3;
gNum++;
Cal_Loop=1;*系统初始化*/
void Ini
tial()
{
CLKCONCMD = 0x28; //时器计数时钟设定为1M Hz, 系统时钟设定为32 MHz
while(CLKCONSTA & 0x40); //等晶振稳定
/*配置IO口*/
P1DIR|=0x07;//设置P1_0与P1_1为输出作为LED,分别作为无线通讯与程序刷新指示
// P1DIR|=0x04;//设置P1_2为看门狗WDI
/*ADC初始化*/
// ADCInit();
}
void main()
{
uchar i;
uchar*data;
Initial();
RfInit();
// TIME1CH0Init();
TIME3CH0Init();
LED_WX=1;
while(1)
{
FeedDogs();
for(i=0;i<64;i++)
{
ADCInit();
//average +=value;
}
Ai_Calc();
RfAppendTxBuf(data,Sendnum);
}
}
void Ai_Calc(void)
{
uint i;
//float ppp_1;
if(Cal_Loop)
{
Move_Flag=FALSE;
Cal_Loop=FALSE;
Fft64_Base2(ADCValue,AD_Ia);
for(i=0;i<3;i++)
{
F_Ia
=AD_Ia;
}
corval=currentcor/AD_Ia;
F_Ia=AD_Ia*corval;
for(i=AVAGE_NUM-1;i>=1;i--)
{
P_Ia_1=P_Ia_1[i-1];
}
P_Ia_1[AI_EFF_VAL]=F_Ia_1[AI_EFF_VAL];
ppp_1[0]=P_Ia_1[0]+P_Ia_1[1]+P_Ia_1[2];
Ia_1=ppp_1[0]/AVAGENUM;
DisADval=(uint)Ia_1;
Move_Flag=TURE;
}
}
这是ad的配置,怎么采集不到数据,求指教
一周热门 更多>