MC9S12XEP100 ATD配置
8位单通道转换
初始化
void INIT_AD(void)
{
ATD0CTL2 = 0x40; //启动A/D模块,快速清零,禁止中断
ATD0CTL1_SRES=0; //选用8位模数转换
ATD0CTL3 = 0x88; //每次只转换一个通道
ATD0CTL4 = 0x00; //AD模块时钟频率为8MHz
}
启动AD转换
unsigned char AD_capture(unsigned char chanel)
{
unsigned char ADcap;
switch(chanel)
{
case 0:
ATD0CTL5 = 0x00;//转换AD00
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 1:
ATD0CTL5 = 0x01;//转换AD01
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 2:
ATD0CTL5 = 0x02;//转换AD02
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 3:
ATD0CTL5 = 0x03;//转换AD03
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 4:
ATD0CTL5 = 0x04;//转换AD04
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 5:
ATD0CTL5 = 0x05;//转换AD05
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 6:
ATD0CTL5 = 0x06;//转换AD06
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 7:
ATD0CTL5 = 0x07;//转换AD07
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 8:
ATD0CTL5 = 0x08;//转换AD08
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 9:
ATD0CTL5 = 0x09;//转换AD09
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 10:
ATD0CTL5 = 0x0a;//转换AD10
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 11:
ATD0CTL5 = 0x0b;//转换AD11
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 12:
ATD0CTL5 = 0x0c;//转换AD12
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 13:
ATD0CTL5 = 0x0d;//转换AD13
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 14:
ATD0CTL5 = 0x0e;//转换AD14
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 15:
ATD0CTL5 = 0x0f;//转换AD15
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
}
return(AD_data);
}
8位多通道
void INIT_AD(void)
{
ATD0CTL2 = 0x40; //启动A/D转换,快速清零,禁止中断
ATD0CTL1_SRES=0; //选用8位模数转换
ATD0CTL3 = 0xa8; //每次转换5个通道,右对齐模式
ATD0CTL4 = 0x00; //AD模块时钟频率为8MHz
}
void AD_capture(void)
{
ATD0CTL5 = 0x31; //转换AD01和AD05
while(!ATD0STAT0_SCF);
AD1=ATD0DR0L;
AD2=ATD0DR1L;
AD3=ATD0DR2L;
AD4=ATD0DR3L;
AD5=ATD0DR4L;
}
10位单通道
void INIT_AD(void)
{
ATD0CTL2 = 0x40; //启动A/D模块,快速清零,禁止中断
ATD0CTL1_SRES=1; //选用10位模数转换
ATD0CTL3 = 0x88; //每次只转换一个通道
ATD0CTL4 = 0x00; //AD模块时钟频率为8MHz
}
启动AD转换
unsigned char AD_capture(unsigned char chanel)
{
unsigned char ADcap;
switch(chanel)
{
case 0:
ATD0CTL5 = 0x00;//转换AD00
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 1:
ATD0CTL5 = 0x01;//转换AD01
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 2:
ATD0CTL5 = 0x02;//转换AD02
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 3:
ATD0CTL5 = 0x03;//转换AD03
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 4:
ATD0CTL5 = 0x04;//转换AD04
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 5:
ATD0CTL5 = 0x05;//转换AD05
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 6:
ATD0CTL5 = 0x06;//转换AD06
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 7:
ATD0CTL5 = 0x07;//转换AD07
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 8:
ATD0CTL5 = 0x08;//转换AD08
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 9:
ATD0CTL5 = 0x09;//转换AD09
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 10:
ATD0CTL5 = 0x0a;//转换AD10
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 11:
ATD0CTL5 = 0x0b;//转换AD11
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 12:
ATD0CTL5 = 0x0c;//转换AD12
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 13:
ATD0CTL5 = 0x0d;//转换AD13
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 14:
ATD0CTL5 = 0x0e;//转换AD14
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
case 15:
ATD0CTL5 = 0x0f;//转换AD15
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0L;
break;
}
return(AD_data);
}
10位多通道
void INIT_AD(void)
{
ATD0CTL2 = 0x40; //启动A/D转换,快速清零,禁止中断
ATD0CTL1_SRES=1; //选用10位模数转换
ATD0CTL3 = 0xa8; //每次转换5个通道,右对齐模式
ATD0CTL4 = 0x00; //AD模块时钟频率为8MHz
}
void AD_capture(void)
{
ATD0CTL5 = 0x31; //转换AD01和AD05
while(!ATD0STAT0_SCF);
AD1=ATD0DR0;
AD2=ATD0DR1;
AD3=ATD0DR2;
AD4=ATD0DR3;
AD5=ATD0DR4;
}
12位单通道
void INIT_AD(void)
{
ATD0CTL2 = 0x40; //启动A/D模块,快速清零,禁止中断
ATD0CTL1_SRES=2; //选用12位模数转换
ATD0CTL3 = 0x88; //每次只转换一个通道
ATD0CTL4 = 0x00; //AD模块时钟频率为8MHz
}
unsigned int AD_capture(unsigned char chanel)
{
unsigned int ADcap;
switch(chanel)
{
case 0:
ATD0CTL5 = 0x00;//转换AD00
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0;
break;
case 1:
ATD0CTL5 = 0x01;//转换AD01
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0;
break;
case 2:
ATD0CTL5 = 0x02;//转换AD02
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0;
break;
case 3:
ATD0CTL5 = 0x03;//转换AD03
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0;
break;
case 4:
ATD0CTL5 = 0x04;//转换AD04
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0;
break;
case 5:
ATD0CTL5 = 0x05;//转换AD05
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0;
break;
case 6:
ATD0CTL5 = 0x06;//转换AD06
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0;
break;
case 7:
ATD0CTL5 = 0x07;//转换AD07
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0;
break;
case 8:
ATD0CTL5 = 0x08;//转换AD08
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0;
break;
case 9:
ATD0CTL5 = 0x09;//转换AD09
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0;
break;
case 10:
ATD0CTL5 = 0x0a;//转换AD10
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0;
break;
case 11:
ATD0CTL5 = 0x0b;//转换AD11
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0;
break;
case 12:
ATD0CTL5 = 0x0c;//转换AD12
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0;
break;
case 13:
ATD0CTL5 = 0x0d;//转换AD13
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0;
break;
case 14:
ATD0CTL5 = 0x0e;//转换AD14
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0;
break;
case 15:
ATD0CTL5 = 0x0f;//转换AD15
while(!ATD0STAT0_SCF);
ADcap = ATD0DR0;
break;
}
return(AD_data);
}
12位多通道
void INIT_AD(void)
{
ATD0CTL2 = 0x40; //启动A/D转换,快速清零,禁止中断
ATD0CTL1_SRES=2; //选用12位模数转换
ATD0CTL3 = 0xa8; //每次转换5个通道,右对齐模式
ATD0CTL4 = 0x00; //AD模块时钟频率为8MHz
}
void AD_capture(void)
{
ATD0CTL5 = 0x31; //转换AD01和AD05
while(!ATD0STAT0_SCF);
AD1=ATD0DR0;
AD2=ATD0DR1;
AD3=ATD0DR2;
AD4=ATD0DR3;
AD5=ATD0DR4;
}