智能车制作
标题:
MC9SXS128 10位AD程序问题,AD读取的高位跳动
[打印本页]
作者:
youranlala
时间:
2014-4-7 10:30
标题:
MC9SXS128 10位AD程序问题,AD读取的高位跳动
程序如下,求大神指点:
//*/
/***---------------初始化程序---------------***/
void InitBusClk(void) {
CLKSEL=0X80; //PLLSEL 1 : Bus Clock=PLLCLK/2
// 0 : Bus Clock=OSCCLK/2
PLLCTL_PLLON=1; //开启PLL
SYNR=0;
REFDV=0X03; //OSCCLK=16MHz
//PLLCLK=2*OSCCLK*[(1+SYNR)/(1+REFDV]=32/4=8MHz
while(!(CRGFLG_LOCK==1)); //直到LOCK=1,when PLL is ready,退出循环
CLKSEL_PLLSEL=1; //PLLSEL 1 : Bus Clock=PLLCLK/2=8MHz/2=4MHz
// 0 : Bus Clock=OSCCLK/2=16M/2=8MHz
}
void InitAD(void){
ATD0CTL2 = 0XC3;
// 110 000 11 启动A/D, 快速清除标志位,无等待模式, 外部触发禁止(bit2=0)
// 中断开放(bit1=1,bit0=1)
// bit1 :ATD Sequence Complete Interrupt Enable
// bit0 :ATD Sequence Complete Interrupt Flag
ATD0CTL3 = 0X0C;
// 0 0001 1 00 转换序列为 1 、 FIFO模式启动,冻结模式下继续转换
ATD0CTL4 = 0X61; // 1 11 00001 10位精度, 16AD采样时间
// 总线(1+1)*2 = 4 分频,AD时钟 = 1M
ATD0CTL5 = 0XA0;
// 1010 0111 右对齐,无符号,连续转换,单通道, 起始通道 ATD0
ATD0DIEN = 0X00; // 数字输入 disabled
}
/***---------------主程序---------------***/
void main(void) {
/* put your own code here */
DisableInterrupts; //关中断
InitBusClk();
InitAD();
DDRB=0XFF; //设B口为输出口
PORTB=0X00;
EnableInterrupts; //开中断
for(;;){
//while(!ATD0STAT2L_CCF7);
PORTB=(byte)AD_Data; //B口显示转换结构
}
}
/***---------------中断服务程序---------------***/
#pragma CODE_SEG NON_BANKED
void interrupt 22 IntAD(void)
{ // AD转换的中断向量号为33
DisableInterrupts; //关中断
while(!ATD0STAT2_CCF0);
AD_Data=ATD0DR0H; //读取AD转换结果
AD_Data1=ATD0DR0L; //读取AD转换结果
EnableInterrupts; //开中断
}
#pragma CODE_SEG DEFAULT
欢迎光临 智能车制作 (http://111.231.132.190/)
Powered by Discuz! X3.2