各位大神好,我是新人小白,最近刚刚接触zigbee相关内容,但由于不是电子或通信相关专业出身,学习起来比较吃力。
最近在做CC2530 AD采集电压实验时,采集P0_7引脚电压,发现一直采集不到电压数据,显示0.0V,想问问是哪里出了问题,谢谢各位!
#include<iocc2530.h>
#define unit unsigned int
#define LED1 P1_0
char temp[2];
unit adc;
float num;
void Delay()
{
unsigned int i,j;
for(i=0;i<1000;i++)
for(j=0;j<200;j++);
}
char adcdata[]="0.0V";
void InitialAD(void)//采集P0_7的电压,数据寄存器清零
//P0_7模拟I/O使能
//单次转换,电源电压,抽样率512
//启用ADC转换,启用前先关闭ADC转换
{
ADCH &=0x00;
ADCL &=0x00;//数据寄存器清零
APCFG |=0x80;//P0_7模拟外设I/O使能
/* P0SEL |= 0x80;// 偏上外设
P0DIR &= ~0x80;//输入*/
ADCCON3=0xb7;//1011 0111
ADCCON1 =0x30;//0011 0000
ADCCON1 |=0x40;//0100 0000停止A/D转换,再启动A/D
}
void main(void)//LED1 指示,ADC转换完成LED1改变状态
//调用ADC初始函数
//ADC转换完成后将结果放入temp
//调用ADC初始函数进行下一次转换
//处理ADC结果
{
P1DIR |=0x01;//P1控制LED
LED1 =1;//LED1灭
// LED2 =1;
InitialAD();//ADC初始化
while(1)
{
if(ADCCON1&0x80)//等待转换完成
{
temp[1]=ADCL;
temp[0]=ADCH;//
InitialAD();//ADC初始化
ADCCON1 |0x40;//下一次转换
adc |=(unit)temp[1];
adc |=((unit)temp[0])<<8; //adc赋值
if(adc&0x8000)
{
adc=0;
}
else
{
num=adc*3.3/8192;//参考电压3.3V,16分辨率
adcdata[1]=(char)(num)%10+48;
adcdata[3]=(char)(num*10)%10+48;
}
Delay();
LED1= ~LED1;
Delay();
}
}
} |