高级会员
- 积分
- 535
- 威望
- 291
- 贡献
- 200
- 兑换币
- 14
- 注册时间
- 2009-3-7
- 在线时间
- 22 小时
|
#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口显示转换值
}
}
|
|