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

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

你可能感兴趣的:(工作,byte,macros)