智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 6520|回复: 18
打印 上一主题 下一主题

教你学会MC9S12XS128的AD转换(保证能学会)

  [复制链接]

12

主题

66

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2209
威望
1177
贡献
670
兑换币
270
注册时间
2012-4-13
在线时间
181 小时
跳转到指定楼层
#
发表于 2012-5-9 11:29:11 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
//程序功能:LED显示AD转换结果
//硬件连接:PORTB接8个LED,67脚接电位器,接5V
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */

#define uchar unsigned char
#define uint unsigned int
//程序功能:初始化AD各寄存器
void ATD0_Init()
{
    ATD0DIEN=0X00;//禁止数字输入功能
    ATD0CTL1=0X40;//AD转换精度选择12位,采样前不放电
    ATD0CTL2=0X40;//启动A/D转换,快速清零,禁止中断
    ATD0CTL3=0X88;//转换结果右对齐,每次只转换一个通道
    ATD0CTL4=0X03;//采样时间4个周期,PRS=3
    ATD0CTL5=0X20;//对通道0单通道连续采样
}
//程序功能:主函数
void main()
{
    uchar AD_result;
    ATD0_Init();   //初始化AD寄存器
    DDRB=0XFF;  //初始化LED
    PORTB=0XFF;
    for(;;)
    {
        while(!ATD0STAT2L_CCF0)//等待转化完成
        {;}
        AD_result=ATD0DR0H;//转化精度为12为,结果为右对齐,所以12~15为空(0)

                                          //此时可以转动电位器,因为取的是高8位,所以只有数码管的低四位变化
                                          //高四位一直亮
        PORTB=AD_result;
    }   
}


8

主题

105

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1972
威望
906
贡献
586
兑换币
594
注册时间
2013-4-7
在线时间
240 小时
18#
发表于 2013-8-8 09:52:47 | 只看该作者
谢谢、、、、
回复 支持 反对

使用道具 举报

12

主题

66

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2209
威望
1177
贡献
670
兑换币
270
注册时间
2012-4-13
在线时间
181 小时
17#
 楼主| 发表于 2013-5-7 10:23:07 | 只看该作者
liuhaichen 发表于 2013-4-30 14:01
67和76 不都接地线了么

怎么可能呢?芯片是  MC9S12XS128  封装是112LQFP的, 数据手册67脚不是AN00吗?
回复 支持 反对

使用道具 举报

12

主题

66

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2209
威望
1177
贡献
670
兑换币
270
注册时间
2012-4-13
在线时间
181 小时
16#
 楼主| 发表于 2013-5-7 10:22:45 | 只看该作者
278193292 发表于 2013-4-30 03:53
咩~  67引脚不是地线么

怎么可能呢?芯片是  MC9S12XS128  封装是112LQFP的, 数据手册67脚不是AN00吗?
回复 支持 反对

使用道具 举报

12

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
威望
162
贡献
55
兑换币
86
注册时间
2013-4-23
在线时间
31 小时
毕业学校
北京交通大学
15#
发表于 2013-4-30 14:01:49 | 只看该作者
67和76 不都接地线了么
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

注册会员

Rank: 2

积分
66
威望
50
贡献
6
兑换币
21
注册时间
2013-2-27
在线时间
5 小时
毕业学校
东华大学
14#
发表于 2013-4-30 03:53:16 | 只看该作者
秋天01号 发表于 2013-4-15 09:01
67脚就是AD输入的引脚啊~~

咩~  67引脚不是地线么
回复 支持 反对

使用道具 举报

5

主题

88

帖子

0

精华

高级会员

Rank: 4

积分
769
威望
375
贡献
208
兑换币
130
注册时间
2013-4-8
在线时间
93 小时
13#
发表于 2013-4-18 20:50:23 | 只看该作者
顶一个
回复 支持 反对

使用道具 举报

12

主题

66

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2209
威望
1177
贡献
670
兑换币
270
注册时间
2012-4-13
在线时间
181 小时
12#
 楼主| 发表于 2013-4-15 09:01:23 | 只看该作者
278193292 发表于 2013-4-13 12:01
67口 是接入到cpu的哪个口,叫什么?

67脚就是AD输入的引脚啊~~
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

注册会员

Rank: 2

积分
66
威望
50
贡献
6
兑换币
21
注册时间
2013-2-27
在线时间
5 小时
毕业学校
东华大学
11#
发表于 2013-4-13 12:01:55 | 只看该作者
67口 是接入到cpu的哪个口,叫什么?
回复 支持 反对

使用道具 举报

1

主题

87

帖子

0

精华

高级会员

Rank: 4

积分
842
威望
384
贡献
278
兑换币
245
注册时间
2012-11-25
在线时间
90 小时
10#
发表于 2013-2-5 15:20:26 | 只看该作者
回复 支持 反对

使用道具 举报

0

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
371
威望
189
贡献
106
兑换币
65
注册时间
2012-10-22
在线时间
38 小时
毕业学校
厦门理工学院
9#
发表于 2013-1-24 15:32:53 | 只看该作者
我这样写有错么???


void INIT_AD(void)


{                    
ATD0CTL2 = 0xc0;  //启动A/D转换,快速清零,禁止中断
delay();
ATD0CTL1=0x4f;  //选用12位模数转换
ATD0CTL3 = 0x08;   //每次只转换一个通道
ATD0CTL4 = 0x01;   //AD模块时钟频率为2MHz  8/2*(1+1)=2MHz?

}

/*************************************************************/
/*                        起动AD转换                         */
/*************************************************************/
unsigned char AD_capture(unsigned char s)
{
unsigned char AD_data;
switch(s)
{
  case 0:
    ATD0CTL5 = 0x00;    //转换AD00
    while(!ATD0STAT2_CCF0);
    AD_data = ATD0DR0;
    break;

  case 1:
    ATD0CTL5 = 0x01;    //转换AD01
    while(!ATD0STAT2_CCF0);
    AD_data = ATD0DR0;
    break;
  case 2:
    ATD0CTL5 = 0x02;    //转换AD02
    while(!ATD0STAT2_CCF0);
    AD_data = ATD0DR0;
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 19:15 , Processed in 0.099189 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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