大家好!我在学习LPC2103,现学到AD转换了,现发现转换不了,恳求大家帮我一下。我的QQ是909424781<br /><br />/*<br />我的第五个ARM程序(不带操作系统的应用程序)<br />采用ISP方法烧录。<br />测试ADC功能的,P0.15脚(接LED-极)<br />转换结果大于设定阀值时点亮LED<br />*/<br /><br />#include "LPC2103.h"<br /><br />//使用P15脚<br />#define gled 1<<15<br /><br />#define Fosc 11059200 <br /> <br />#define Fcclk (Fosc * 4) <br /> <br />#define Fcco (Fcclk * 4) <br /> <br />#define Fpclk (Fcclk / 4) * 1 <br /><br />void DelayNS(unsigned int dly);//延时<br /><br />void gledonoff(unsigned int cnt);//闪亮LED<br /><br />int main()<br />{<br /><br />unsigned int ADC_Data;<br /><br />//初始化端口P0.22为AN0(AD转换口)<br />PINSEL1|=(0x03<<12);<br /><br />//初始化端口P15为GPIO输出功能<br />IODIR|=(1<<15);<br /><br />//初始化端口P15输出高电平<br />IOSET|=(1<<15);<br /><br />//进行ADC模块设置,其中x<<n表示第n位设置为x(若x超过一位,则向高位顺延) <br />ADCR = (1 << 0) | // SEL = 1 ,选择通道0<br />((Fpclk / 1000000 - 1) << 8) | // CLKDIV = Fpclk / 1000000 - 1 ,即转换时钟为1MHz<br />(0 << 16) | // BURST = 0 ,软件控制转换操作<br />(0 << 17) | // CLKS = 0 ,使用11clock转换<br />(1 << 21) | // PDN = 1 , 正常工作模式(非掉电转换模式)<br />(0 << 22) | // TEST1:0 = 00 ,正常工作模式(非测试模式)<br />(1 << 24) | // START = 1 ,直接启动ADC转换<br />(0 << 27); // EDGE = 0 (CAP/MAT引脚下降沿触发ADC转换)<br /><br />DelayNS(10); <br /><br />ADC_Data = ADGDR; // 读取ADC结果,并清除DONE标志位<br /> <br />while(1)<br /> { <br />ADCR = (ADCR&0x00FFFF00)|0x01|(1 << 24); // 设置通道1,并进行第一次转换<br /><br />while((ADGDR&0x80000000)==0); // 等待转换结束<br /><br />ADCR = ADCR | (1 << 24); // 再次启运转换<br /><br />while((ADGDR&0x80000000)==0); // 等待转换结束<br /><br />ADC_Data = ADGDR; // 读取ADC结果<br /><br />ADC_Data = (ADC_Data>>6) & 0x3FF; // 提取AD转换值<br /><br />ADC_Data = ADC_Data * 3300/1024; // 数值转换<br /><br />if (ADC_Data>0) {gledonoff(0x2000);} //大于阀值时闪亮LED<br /> <br /> }<br />}<br /><br /><br />void gledonoff(unsigned int cnt)<br />{<br /><br />unsigned int j; <br /><br />IOCLR=gled;<br /><br />for (j=0;j<cnt;j++)<br />;<br /><br />IOSET=gled;<br /><br />for (j=0;j<0x2000;j++)<br />;<br />}<br /><br />void DelayNS(unsigned int dly)<br />{ <br />unsigned int i;<br />for(; dly>0; dly--) <br /> {<br />for(i=0; i<5000; i++);<br /> }<br />}<br /> |
|