智能车制作

标题: 飞思卡尔A/D转换应用实例 [打印本页]

作者: mick0866    时间: 2011-10-15 21:23
标题: 飞思卡尔A/D转换应用实例
要让ATD 开始转换工作,必须经过以下三个步骤:

1.将ADPU 置1,使ATD 启动;

2.按照要求对转换为数、扫描方式、采样时间、时钟频率及标志检查等方式进行设置;

3.发出启动命令;

如果上电默认状态即能满足工作要求,那么只要将ADPU 置1,然后通过控制寄存器发出转换命令,即可实现转换。



【例程】

程序描述:由通道ATD0进行单通道A/D转换,转换值在B口显示

程序如下:



#include <hidef.h>      /* common defines and macros */

#include <mc9s12dg128.h>     /* derivative information */

#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"

/******定义变量********/

word AD_wValue;//AD转换结果

/*时钟初始化*/

void PLL_Init(void)      //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)

{                     //锁相环时钟=2*16*(2+1)/(1+1)=48MHz

  REFDV=1;           //总线时钟=48/2=24MHz

  SYNR=2;

  while(!(CRGFLG&0x08));

  CLKSEL=0x80;

}

/*AD初始化*/

void AD_Init(void)   

{

  ATD0CTL2=0xC0;  //1100 0000 启动A/D, 快速清零, 无等待模式, 禁止外部触发, 中断禁止

  ATD0CTL3=0x20;  // 转换序列长度为4, No FIFO, Freeze模式下继续转换

  ATD0CTL4=0x85; // 8位精度, 2个时钟,分频系数为32,ATDClock=[BusClock*0.5]/[PRS+1]=2MHzRS=5,divider=12

  ATD0CTL5=0xA0;  //1010 0000   右对齐方式,有符号,单通道转换,通道0

  ATD0DIEN=0x00;  // 禁止数字输入

}

/*读取AD转换结果*/

void AD_GetValue(word *AD_wValue)

{

  *AD_wValue=ATD0DR0;  //ATDDR0~~ATDDR7为8个结果寄存器,此处为读取结果寄存器的值

}

/**********主函数**************/

void main(void)

{

  PLL_Init();

  AD_Init();         

  DDRB=0xFF;

  PORTB=0x00;

  EnableInterrupts;

  for(;;)

  {

    while(!ATD0STAT1_CCF0);    // 独立通道转换完成标志位,每个通道转换结束后置位,

while(ATDOSTAT1_CCF0==1)

       AD_GetValue(&AD_wValue);   // 读取转换结果

    PORTB = (byte)AD_wValue;   // 在B口显示转换值

  }

}
作者: Iiti    时间: 2012-3-6 19:52





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2