ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MC9S12XEP100-ATD设置

2021-09-17 17:31:37  阅读:176  来源: 互联网

标签:case ATD0STAT0 SCF ATD MC9S12XEP100 while 设置 ATD0CTL5 ADcap


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;  
}

标签:case,ATD0STAT0,SCF,ATD,MC9S12XEP100,while,设置,ATD0CTL5,ADcap
来源: https://blog.csdn.net/haizeique/article/details/120353439

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有