首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

【菜鸟求助】关于MC9SDG128B    A/D失败的问

【菜鸟求助】关于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...哈哈
外部参考电压连好了吗?
海纳百川  有容乃大
用BDM在data 那一栏里看看你有采回来的值就行了,可以不用液晶的,
个人BLOG:http://blog.eccn.com/u/107300/index.htm
参考电压与外部电源是否共地??
不然怎么都不准确,我曾经就碰到过!
非常乐意交流哦!@
返回列表