网站公告列表     本站开通全国范围代收货款业务,详情请点击  [dycxin  2008年5月14日]        
加入收藏
设为首页
联系站长
您现在的位置: EDA加油站 >> ARM专栏 >> ARM工具DIY >> 开发板DIY >> 正文
  [推荐]ARM开发之ADC实验(LPC213X)           ★★★ 【字体:
ARM开发之ADC实验(LPC213X)
ARM开发之ADC实验(LPC213X)
作者:佚名    ARM专栏来源:不详    点击数:    更新时间:2007-12-4    

/********************************************************************************************
* 文 件 名:ADC.c
* 功    能:使用ADC模块的通道3进行电压的测量,然后将转换结果从串口输出,上位机使用串口调试
*           助手软件进行观察。
* 说    明:由W1调节测量电压值。
*           串口配置:8位数据位,1位停止位,无奇偶校验,波特率115200。
*********************************************************************************************/
#include "config.h"

#define  UART_BPS 115200                  // 定义串口通讯波特率

/********************************************************************************************
* 函数名称:Delay()
* 功    能:软件延时
* 入口参数:count    延时参数,值越大,延时越长
* 出口参数:无
*********************************************************************************************/
void Delay(uint32 count)
{
  uint32 i;
 
  for(;count>0;count--)
     for(i=0;i<5000;i++);
}
 
/********************************************************************************************
* 函数名称:UART0_Ini()
* 功    能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为115200
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void  UART0_Ini(void)

  uint16  Fdiv;

  U0LCR = 0x83;                                 // DLAB = 1,可设置波特率
  Fdiv = (Fpclk / 16) / UART_BPS;                  // 设置波特率
  U0DLM = Fdiv / 256;       
  U0DLL = Fdiv % 256;      
  U0LCR = 0x03;
}
    
/********************************************************************************************
* 函数名称:UART0_SendByte()
* 功    能:从串口0发送字节数据,并等待发送完毕。
* 入口参数:data 要发送的数据
* 出口参数:无
*********************************************************************************************/
void  UART0_SendByte(uint8 data)

  U0THR = data;                           // 发送数据
  while( (U0LSR&0x40)==0 );                        // 等待数据发送完毕
}

/********************************************************************************************
* 函数名称:UART0_SendStr()
* 功    能:从串口0发送一字符串。
* 入口参数:str  要发送的字符串的指针
* 出口参数:无
*********************************************************************************************/
void UART0_SendStr (char const *str)
{
  while (1)
       {
         if (*str == '\0') break;             // 遇到结束符,退出
   UART0_SendByte(*str++);          // 发送数据
    }
}

/*******************************************************************************************
* 函数名称:main()
* 功    能:进行通道3电压ADC转换,并把结果转换成电压值,然后发送到串口。
* 说    明:在CONFIG.H文件中包含stdio.h。
********************************************************************************************/
int  main(void)
{  
  uint32  ADC_Data;
  char    str[20];

  PINSEL0 = 0x00000005;                      // 设置P0.0、P0.1连接到UART0的TXD、RXD
  PINSEL1 = 1<<28;                 // 设置P0.30连接到AD0.3
 
  UART0_Ini();            // 初始化UART0
 
  /* 进行ADC模块设置,其中x<<n表示第n位设置为x(若x超过一位,则向高位顺延) */
  AD0CR =(1 << 3)                     |         // SEL = 8 ,选择通道3
         ((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转换)
  Delay(10);                                    // 延时       
 
  ADC_Data = AD0DR;           // 读取ADC结果,并清除DONE标志位
 
  while(1)                                        
      {
        AD0CR|=1<<24;                              // 进行第一次转换
        while((AD0DR & 0x80000000)==0);            // 等待转换结束
        AD0CR|=1<<24;                              // 再次启动转换
        while((AD0DR & 0x80000000)==0);            // 等待转换结束
        ADC_Data=AD0DR;                            // 读取ADC结果
        ADC_Data = (ADC_Data>>6) & 0x3FF;
        ADC_Data = ADC_Data * 3300;                // 满额电压
        ADC_Data = ADC_Data / 1024;                // 10位AD转换,1024级
        sprintf(str, "%4dmV at VIN   ", ADC_Data);
        UART0_SendStr(str);                        // 向上位机发送VIN的采集结果
        Delay(600);       
      }
  return(0);
}

 

ARM专栏录入:dycxin    责任编辑:dycxin 
  • 上一篇ARM专栏:

  • 下一篇ARM专栏:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    ARM开发之DAC实验(LPC213X)
    ARM开发之I2C驱动(LPC213X)
    ARM开发之LCM12864点阵图形液…
    ARM开发之GPIO输出实验—8位…
    ARM开发之MAT1.0触发AD转换实…
    ARM开发之P0.16引脚触发AD转…
    ARM开发之PLL中断实验(LPC21…
    ARM开发之PWM输出实验(LPC2…
    ARM开发之PWM作32位定时器实…
    ARM开发之RTC秒定时中断唤醒…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    EDA加油站|我要EDA网|山东电子网--东营市荣燕商贸有限公司版权所有! 站长:阿荣
    联系电话:0546-7870320,13371507828 电邮:51edacn@163.com
    山东东营西城济南路百祥电脑商城B302室 邮编:257000 鲁ICP备07018763号  鲁ICP备07000091号 鲁ICP备05003434号
    公司帐号:1615011209000037682 户名:东营市荣燕商贸有限公司 开户行:工行西城支行石油大学分理处