| 
 
| 大家好!我在学习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 /> | 
 |