【菜鸟求助】关于MC9SDG128B A/D失败的问
- UID
- 351543
- 性别
- 男
|
【菜鸟求助】关于MC9SDG128B A/D失败的问
写了一段A/D程序 void PLL_Init(void) { SYNR=2; REFDV=1; while(!(CRGFLG&0x08)); CLKSEL=0X80; }//总线时钟为24Mhz void AD_Init(void)//AD模块初始化 { ATD0CTL2=0xC0;//AD模块上电, 快速清零, 无等待模式, 禁止外部触发, 中断禁止; ATD0CTL3=0x80;// 每个序列1次转换, FIFO=0, Freeze模式下继续转换 ATD0CTL4=0x85;// 8位精度, 2个时钟, //ATDClock=[BusClock*0.5]/[PRS+1] ; PRS=6, divider=12 //采样时间为2*ATDclock //-->>ATDclock=busclock/4=2MHz 转换时间=2+2+8=12ATDclock=6us ATD0CTL5=0xA0;//右对齐无符号,连续转换,单通道采样,通道0 ATD0DIEN=0x00;//禁止数字输入 } void main(void) { //---------------------------- //初始化 //---------------------------- DDRA=0XFF; //设置PA口为输出口 PORTA=0X00;
DDRB=0XFF; //设置PB口为输出口 PORTB=0X00; /* put your own code here */ a=0; b=0; c=0; d=0; ADValue=0;
EnableInterrupts; PLL_Init(); AD_Init(); LCD_Init();//初始化液晶屏 for(;;) { LCD_Rowone();//第一行显示AD结果 while(!ATD0STAT1_CCF0); //等待转换结束
d=ATD0DR0; a=d%10; //取ATD0DR0的个位 b=((d-a)/10)%10; //取ATD0DR0的十位 c=(d-a-b*10)/100; //取ATD0DR0的百位
LCD_SHOW(num[c]);//显示百位 LCD_SHOW(num);//显示十位 LCD_SHOW(num[a]);//显示个位
} /* wait forever */ /* please make sure that you never leave this function */ } =================================== 结果发现,只要在PAD00/AN0 口上通上电压,无论椒多少 液晶屏灰显示255 换言之 寄存器 ATD0DR0=0xff 由于刚刚接触这款单片机,还不了解,老是检查不出问题 软件上应该没错吧?是不是单片机外部连接上有什么要求??
[此贴子已经被作者于2008-3-17 15:52:25编辑过] |
这个问题嘛,我实在还是没想好要写什么。以后再说啊。o(∩_∩)o...哈哈 |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
|
|
|
|
|
- UID
- 187580
- 性别
- 男
|
用BDM在data 那一栏里看看你有采回来的值就行了,可以不用液晶的, |
个人BLOG:http://blog.eccn.com/u/107300/index.htm |
|
|
|
|
|
- UID
- 351829
- 性别
- 男
|
参考电压与外部电源是否共地??
不然怎么都不准确,我曾经就碰到过! |
|
|
|
|
|