您的位置:首页 > 其它

手把手教你写S12XS128程序(16)--A/D转换应用实例

2010-10-19 20:24 351 查看
要让 ATD 开始转换工作,必须经过以下三个步骤:
1.将 ADPU 置 1,使 ATD 启动;
2.按照要求对转换为数、扫描方式、采样时间、时钟频率及标志检查等方式 进行设置;
3.发出启动命令;
如果上电默认状态即能满足工作要求,那么只要将 ADPU 置 1,然后通过控 制寄存器发出转换命令,即可实现转换。

【例程2】
程序描述:由通道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;  // 启动A/D, 快速清零, 无等待模式, 禁止外部触发, 中断禁止

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

ATD0CTL4=0x85; // 8位精度, 2个时钟, ATDClock=[BusClock*0.5]/[PRS+1]=2MHz;PRS=5,divider=12

ATD0CTL5=0xA0;  // 右对齐无符号,单通道采样,通道0

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

}

/*读取AD转换结果*/

void AD_GetValue(word *AD_wValue)

{

*AD_wValue=ATD0DR0;  //读取结果寄存器的值

}

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

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口显示转换值

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: