#define REFVOL 2.5 //参考电压2.5V
unsigned int result[6][50];
unsigned char adc_Flag;
unsigned char count_cov; uchar adcTBuff[8];
//***********************************************// // 初始化AD转换 //***********************************************//
void ADC_init(void) {
P6SEL = 0x1F; //选择P6的0-4口为AD转换端口
ADC12CTL0 = ADC12ON + REFON + REF2_5V + SHT0_6 + MSC;
ADC12CTL1 = SHS_0 + SHP + CONSEQ_3;
ADC12MCTL0 = INCH_0 + SREF_1; //通道0,单片机P6.0口
ADC12MCTL1 = INCH_1 + SREF_1 + EOS; //通道1,单片机P6.1口
ADC12CTL1 &= 0x0fff; //设置起始采样通道为ADC12MCTL0所对应的通道 ADC12CTL0 |= ENC; //使能转换;
}
//***********************************************// // 启动AD转换 //***********************************************//
void ADC_start() {
ADC12IE = 0x0020; //使能中断;
ADC12CTL0 |= ADC12SC; //开始采样
}
//***********************************************// // 数据处理 //***********************************************//
void format_Data(void) {
unsigned char m,n;
for(m=0; m<5; m++) {
for(n=0; n<50; n++) {
result[m][n] = (int)(((REFVOL * result[m][n]) / 4096) ); } }
USART_AdcCover(result); }
//***********************************************// // 中断服务程序 //***********************************************//
#pragma vector = ADC_VECTOR __interrupt
void ADC_Interrupt(void) {
switch(ADC12IFG)
{ case 0x003F:
{
result[0][count_cov] = ADC12MEM0;
result[1][count_cov] = ADC12MEM1;
count_cov++;
if(count_cov>50 || count_cov==50)
{ count_cov = 0; } }
break;
default: break;
}
format_Data();
ADC12IE &= 0X00;
delay_ms(100); }
为什么我程序测出的数值全都是0呢。。。找了半天都没找到原因。。
此帖出自
小平头技术问答
一周热门 更多>