mc9s12dg128-A D 模块简介

2026/1/20 18:18:04

10 11

Finish conversion then freeze(完成转换后冻结) Freeze Immediately(冻结模式下立刻冻结) 3、ATD0控制寄存器4---ATD0CTL4

ATD0CTL4用于选择时钟,选择采样转换时间以及选择8位/10位转换方式。寄存器ATD0CTL4如图20所示:

图20 ATD0CTL4寄存器

SRES8 : A/D 精度选择控制位

1 = 将采集到的模拟量以8位二进制数表示 0 = 将采集到的模拟量以10位二进制数表示

SMP0、SMP1 : 采样时间选择控制位 采样时间 SMP [1:0] 00 01 10 11 2 A/D 时钟周期 4 A/D 时钟周期 8 A/D 时钟周期 16 A/D 时钟周期 PPS[0:4] : 5 位 模数计数器预分频器 - 分频系数从 2 到 64

- A/D时钟计算公式 :ATDClock = BusClock/(PRS + 1) × 0.5 - A/D时钟频率应满足:

【注意】对于AD转换来说,它的转换周期包括采样时间和运算时间。如果频率太高,则采样时间过短。这对于输出阻抗比较大或信号频率比较高的信号来说,就会产生较大的采样误差,那么AD转换的精度就会受较大的影响。

4、ATD0控制寄存器4---ATD0CTL5

ATD0CTL5用于选择转换方式,选择转换通道,设置单/多通道转换和单次/连续转换模式以及对齐方式。寄存器ATD0CTL5如图20所示:

图20 寄存器ATD0CTL5

【注意】ATDCTRL5设置成多通道转换后,ATDCTRL3设置采集的通道数,此外ATDCTRL5中还需要设置多通道采集的起始通道。比如采集7个通道,起始通道是1,那么就采集从1-7通道,如果起始通道是2,就采集2-7,还有0通道。 【注意】在S12系列中,当转换序列长度设置为1(S8C:S1C=0001),MULT=0时,只对一个通道进行一次转换。

5、ATD0状态寄存器5---ATD0START0、ATD0START1

ATD0START0反映当前的转换通道、A/D转换是否结束、是否有外部触发等; ATD0START1反映转换序列中相应的转换是否完成。

寄存器ATD0START0、ATD0START1如图21所示:

SCF ---转换序列完成标志

在单次转换模式时,当转换完成后置位 (SCAN = 0).

在连续转换模式时,当第一次转换完成后置位 (SCAN = 1),当AFFC = 0,写 1 清零。

ETORF ---外部触发覆盖标志

如果在转换过程中高/低电平出现,置位 FIFOR

当结果寄存器在读出之前已经被写入时,置位 ( CCF 没有清零) CC[2:0]转换计数器---3位计数器指向下一个将要转换的通道

CCF7 -CCF0 ---独立通道转换完成标志位每个相应的通道转换结束后置位,当相应的 A/D 结果寄存器被读出时,清零,注意当 AFFC 位不同时的情况

A/D转换应用实例

要让 ATD 开始转换工作,必须经过以下三个步骤: 1.将 ADPU 置 1,使 ATD 启动;

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

3.发出启动命令;

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

【例程2】

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

#include /* common defines and macros */ #include /* derivative information */

#pragma LINK_INFO DERIVATIVE \初始化外围设备接口 /******定义变量********/

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


mc9s12dg128-A D 模块简介.doc 将本文的Word文档下载到电脑
搜索更多关于: mc9s12dg128-A D 模块简介 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219