Board logo

标题: 【菜鸟求助】关于MC9SDG128B    A/D失败的问 [打印本页]

作者: mooyeep    时间: 2008-3-17 15:52     标题: 【菜鸟求助】关于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编辑过]


作者: strongchen    时间: 2008-3-17 16:38

外部参考电压连好了吗?
作者: 康桥人    时间: 2008-3-19 14:32

用BDM在data 那一栏里看看你有采回来的值就行了,可以不用液晶的,
作者: 伊独侠客    时间: 2008-3-20 22:50

参考电压与外部电源是否共地??
不然怎么都不准确,我曾经就碰到过!




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0