智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 5036|回复: 7
打印 上一主题 下一主题

求mc9s12xs128单片机的AD模块的数据寄存器问题

[复制链接]

9

主题

49

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1084
QQ
威望
595
贡献
203
兑换币
48
注册时间
2011-8-1
在线时间
143 小时
跳转到指定楼层
1#
发表于 2011-8-30 15:30:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人新手,想把AD模块转换过来得值通过串口发在电脑上显示,主函数除了初始化外如下:
for(;;)
  {
   while(!ATD0STAT2_CCF0);    // 等待转换结束while(ATDOSTAT2_CCF0==1)
   
    while(!SCI0SR1_TDRE);
   
     
     SCI0DRL=ATD0DR0L;
}


但是在AD0通道不接任何模拟量的情况下,串口上显示的确实FC  而非00  

接在其他通道同样如此,求解高手指点一二


完整源程序如下:

#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */

#define unint unsigned int

/*****延时***********/
void delay(unint n) {
     while(n--);
}

void long_delay(unint i,unint j) {
  
     while(i--) delay(j);
}



/******SCI初始化***************/
  
void SCI_init()
{
SCI0CR1=0X00;
SCI0CR2=0X0C;                  //发送器,接收器使能
SCI0BDH=0X00;
SCI0BDL=0X34;                   //总线时钟8MHZ,波特率为9600
}

//--------------初始化函数----------------//
//-----时钟初始化程序--------//

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;
}


//-----ATD初始化程序--------//

void AD_Init(void)   
{
  ATD0CTL1=0x00;   //选择AD通道为外部触发,8位精度,采样前不放电
   
  ATD0CTL2=0x40;   //标志位自动清零,禁止外部触发, 禁止中断
      
  ATD0CTL3=0xa0;   //右对齐无符号,每次转换4个序列, No FIFO, Freeze模式下继续转
     
  ATD0CTL4=0x01;  //采样时间为4个AD时钟周期,PRS=1,ATDClock=6MHz
  
  ATD0CTL5=0x20;   //特殊通道禁止,连续转换 ,多通道转换,起始通道为0转换4个通道
  
  ATD0DIEN=0x00;   //禁止数字输入
}


//-----读取AD转换结果--------//

void AD_GetValue(word *AD_wValue)
{
  *AD_wValue=ATD0DR0;  //读取结果寄存器的值
}


//-----主函数--------//

void main(void)
{
  PLL_Init();
  AD_Init();
  
  SCI_init();
         
  DDRB=0xFF;
  PORTB=0x00;
  
  EnableInterrupts;
   
  for(;;)
  {
   while(!ATD0STAT2_CCF0);    // 等待转换结束while(ATDOSTAT2_CCF0==1)
   
    while(!SCI0SR1_TDRE);
   
     
     SCI0DRL=ATD0DR0L;
   
     PORTB=ATD0DR0;
     
     long_delay(5,60000);
      }
}

1

主题

41

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1044
威望
585
贡献
299
兑换币
218
注册时间
2011-9-18
在线时间
80 小时
2#
发表于 2011-9-24 14:40:12 | 只看该作者
我的情况和你一样
我是用B口外接LED显示的
回复 支持 反对

使用道具 举报

3

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
威望
261
贡献
67
兑换币
27
注册时间
2012-2-28
在线时间
25 小时
毕业学校
康平一中
3#
发表于 2012-3-6 17:38:22 | 只看该作者
回复 支持 反对

使用道具 举报

4

主题

144

帖子

0

精华

高级会员

Rank: 4

积分
987
威望
580
贡献
203
兑换币
33
注册时间
2012-3-5
在线时间
102 小时
4#
发表于 2012-3-19 17:19:48 | 只看该作者
楼主,我用你的程序试了一下,也一样,现在你解决问题了吗?
回复 支持 反对

使用道具 举报

3

主题

124

帖子

0

精华

高级会员

Rank: 4

积分
602
QQ
威望
431
贡献
65
兑换币
24
注册时间
2009-12-17
在线时间
53 小时
5#
发表于 2012-3-19 18:14:18 | 只看该作者
:(
回复 支持 反对

使用道具 举报

3

主题

76

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1037
威望
628
贡献
221
兑换币
206
注册时间
2012-2-6
在线时间
94 小时
毕业学校
陕西科技大学
6#
发表于 2012-3-27 18:20:38 | 只看该作者
求解啊
回复 支持 反对

使用道具 举报

3

主题

96

帖子

0

精华

高级会员

Rank: 4

积分
929
威望
505
贡献
254
兑换币
245
注册时间
2012-9-18
在线时间
85 小时
7#
发表于 2012-12-21 21:39:45 | 只看该作者
你是不是设置错了
  ATD0CTL1=0x00;   //选择AD通道为外部触发,8位精度,采样前不放电
   
   ATD0CTL2=0x40;   //标志位自动清零,禁止外部触发, 禁止中断
既然选择AD0通道外部触发却不开触发使能位

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-27 05:17 , Processed in 0.182185 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表