打印
[ZLG-ARM]

求助LPC2103 AD转换问题

[复制链接]
2751|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gzhc|  楼主 | 2008-11-28 13:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好!我在学习LPC2103,现学到AD转换了,现发现转换不了,恳求大家帮我一下。我的QQ是909424781

/*
我的第五个ARM程序(不带操作系统的应用程序)
采用ISP方法烧录。
测试ADC功能的,P0.15脚(接LED-极)
转换结果大于设定阀值时点亮LED
*/

#include "LPC2103.h"

//使用P15脚
#define gled 1<<15

#define Fosc            11059200                   
                        
#define Fcclk           (Fosc * 4)                
                          
#define Fcco            (Fcclk * 4)              
                          
#define Fpclk           (Fcclk / 4) * 1            

void  DelayNS(unsigned int  dly);//延时

void gledonoff(unsigned int cnt);//闪亮LED

int main()
{

unsigned int ADC_Data;

//初始化端口P0.22为AN0(AD转换口)
PINSEL1|=(0x03<<12);

//初始化端口P15为GPIO输出功能
IODIR|=(1<<15);

//初始化端口P15输出高电平
IOSET|=(1<<15);

//进行ADC模块设置,其中x<<n表示第n位设置为x(若x超过一位,则向高位顺延) 
ADCR = (1 << 0)              |        // SEL = 1 ,选择通道0
((Fpclk / 1000000 - 1) << 8) |         // CLKDIV = Fpclk / 1000000 - 1 ,即转换时钟为1MHz
(0 << 16)                    |        // BURST = 0 ,软件控制转换操作
(0 << 17)                    |         // CLKS = 0 ,使用11clock转换
(1 << 21)                    |         // PDN = 1 , 正常工作模式(非掉电转换模式)
(0 << 22)                    |         // TEST1:0 = 00 ,正常工作模式(非测试模式)
(1 << 24)                    |         // START = 1 ,直接启动ADC转换
(0 << 27);                            // EDGE = 0 (CAP/MAT引脚下降沿触发ADC转换)

DelayNS(10);                                

ADC_Data = ADGDR;                            // 读取ADC结果,并清除DONE标志位
   
while(1)
    {  
ADCR = (ADCR&0x00FFFF00)|0x01|(1 << 24);    // 设置通道1,并进行第一次转换

while((ADGDR&0x80000000)==0);                // 等待转换结束

ADCR = ADCR | (1 << 24);                    // 再次启运转换

while((ADGDR&0x80000000)==0);              // 等待转换结束

ADC_Data = ADGDR;                            // 读取ADC结果

ADC_Data = (ADC_Data>>6) & 0x3FF;           // 提取AD转换值

ADC_Data = ADC_Data * 3300/1024;            // 数值转换

if (ADC_Data>0) {gledonoff(0x2000);}        //大于阀值时闪亮LED
   
    }
}


void gledonoff(unsigned int cnt)
{

unsigned int j;    

IOCLR=gled;

for (j=0;j<cnt;j++)
;

IOSET=gled;

for (j=0;j<0x2000;j++)
;
}

void  DelayNS(unsigned int  dly)
{  
unsigned int  i;
for(; dly>0; dly--) 
 {
for(i=0; i<5000; i++);
 }
}

相关帖子

沙发
gzhc|  楼主 | 2008-11-28 15:54 | 只看该作者

已经解决问题了。

使用特权

评论回复
板凳
红舞林檬浩| | 2011-3-11 16:35 | 只看该作者
shm什么问题啊 我觉得 解决问题之后 应该把你错误的地方指出来 这样给后来人启示啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

34

帖子

1

粉丝