智能车制作

标题: MC9S12DG128调试小程序,AD转化(查询方式)---旨在帮助新手入门,共同提高! [打印本页]

作者: wysh320    时间: 2009-3-11 08:39
标题: MC9S12DG128调试小程序,AD转化(查询方式)---旨在帮助新手入门,共同提高!
#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]=2MHzRS=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口显示转换值
  }
}


作者: yangbenhe    时间: 2009-5-7 12:56
好的,谢谢share!
作者: chengdonglee    时间: 2009-5-20 05:26
我的程序和你几乎一样,但是单片机就不输出正常的信号,郁闷,不知道是什么问题
作者: 星空下的学生    时间: 2009-5-20 09:26

作者: abc43412119    时间: 2009-5-24 22:41
楼主太好了,
作者: 应用电子    时间: 2009-6-8 16:39
太感谢了!!!!!!!
省了我很多时间啊!!
作者: xiaokk    时间: 2009-8-13 10:02
支持楼主,多以些这样的基础程序就更好了!
作者: 薄子太    时间: 2009-9-27 14:46
谢谢啦,
作者: liang88889999    时间: 2009-9-27 21:00
谢一个

作者: 叶落知秋    时间: 2009-10-23 23:27
支持楼主
作者: wangguiqing2008    时间: 2009-10-30 09:55
看了,写
作者: 吾陪你    时间: 2009-10-30 14:16

作者: 七彩    时间: 2010-2-16 17:27
顶一下
作者: zcs131458    时间: 2011-3-7 13:32
这程序 不能输出 正常信号   不行啊
这还是 书上的 你能写个有信号产生的正常程序出来分享吗
作者: 幻影2011    时间: 2011-3-7 18:32
十分感谢




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2