智能车制作

 找回密码
 注册

扫一扫,访问微社区

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

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

  [复制链接]

12

主题

66

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2209
威望
1177
贡献
670
兑换币
270
注册时间
2012-4-13
在线时间
181 小时
跳转到指定楼层
1#
发表于 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;
    }   
}


1

主题

67

帖子

0

精华

高级会员

Rank: 4

积分
746
威望
462
贡献
154
兑换币
8
注册时间
2012-2-12
在线时间
65 小时
毕业学校
西北师范大学
2#
发表于 2012-5-10 22:37:51 | 只看该作者
回复 支持 反对

使用道具 举报

8

主题

58

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1425
威望
708
贡献
311
兑换币
267
注册时间
2012-6-26
在线时间
203 小时
毕业学校
临沂大学
3#
发表于 2012-7-3 16:20:25 | 只看该作者
好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好   贴!!!!!!!!!
回复 支持 反对

使用道具 举报

12

主题

66

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2209
威望
1177
贡献
670
兑换币
270
注册时间
2012-4-13
在线时间
181 小时
4#
 楼主| 发表于 2012-7-5 08:21:30 | 只看该作者
LXD201009140146 发表于 2012-7-3 16:20
好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好 ...

呵呵~~~~3Q~~~~~
回复 支持 反对

使用道具 举报

4

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
319
威望
181
贡献
40
兑换币
6
注册时间
2012-4-9
在线时间
49 小时
5#
发表于 2012-9-2 09:37:30 | 只看该作者
看看
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

注册会员

Rank: 2

积分
93
威望
67
贡献
12
兑换币
0
注册时间
2012-10-12
在线时间
7 小时
毕业学校
板桥中心校
6#
发表于 2012-10-12 20:15:09 | 只看该作者
谢谢
回复 支持 反对

使用道具 举报

4

主题

465

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2314

优秀会员奖章活跃会员奖章

威望
1215
贡献
567
兑换币
202
注册时间
2012-3-7
在线时间
266 小时
7#
发表于 2012-10-15 10:11:15 | 只看该作者
优秀
回复 支持 反对

使用道具 举报

3

主题

96

帖子

0

精华

高级会员

Rank: 4

积分
929
威望
505
贡献
254
兑换币
245
注册时间
2012-9-18
在线时间
85 小时
8#
发表于 2012-12-15 15:50:12 | 只看该作者
谢谢
回复 支持 反对

使用道具 举报

5

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
威望
119
贡献
67
兑换币
64
注册时间
2012-11-21
在线时间
17 小时
9#
发表于 2013-1-7 10:23:12 | 只看该作者
谢谢
回复 支持 反对

使用道具 举报

0

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
371
威望
189
贡献
106
兑换币
65
注册时间
2012-10-22
在线时间
38 小时
毕业学校
厦门理工学院
10#
发表于 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 17:28 , Processed in 0.088847 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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