智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 6992|回复: 14
打印 上一主题 下一主题

9S12XS四路AD转换

  [复制链接]

1

主题

2

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
308
威望
217
贡献
69
兑换币
28
注册时间
2009-3-28
在线时间
11 小时
跳转到指定楼层
1#
发表于 2011-3-22 10:28:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*
**********************************************************************************
*
* 工程名称:9S12XS AD TO RS232
* 功能描述:结合飞思卡尔16位单片机MC9S12XS128完成4路AD采集,并通过RS232发送到上位机。
* IDE环境: Metrowerks CodeWarrior 5.90
* 组成文件:
* main.c
*  
* 说明: 本版本为AD及RS232通讯程序早期版本,还有待更进一步完善                                             
* 日期:2011-3-6
*                             (c) Copyright 2011,Yoncos
*                                        All Rights Reserved
*
*  
* By   : Yoncos
**********************************************************************************/

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

byte  ad_value0;          //保存AD转换结果高位
byte ad_value1;
byte ad_value2;
byte ad_value3;
byte  ad_value0_1;          //保存AD转换结果地位
byte ad_value1_1;
byte ad_value2_1;
byte ad_value3_1;

/***---------------延时程序---------------***/
void Delay(int i)

{        

int j;

for(;i>0;i--)

for(j=500;j>0;j--);



}

/***---------------时钟初始化程序---------------***/
//这也是前辈写的,未改动
void InitBusClk(void)

{

CLKSEL=0X80;                  //PLLSEL  1 : Bus Clock=PLLCLK/2

//          0 : Bus Clock=OSCCLK/2

PLLCTL_PLLON=1;             //开启PLL

SYNR=0;

REFDV=0X03;                 //OSCCLK=16MHz

//PLLCLK=2*OSCCLK*[(1+SYNR)/(1+REFDV]=32/4=8MHz

while(!(CRGFLG_LOCK==1));    //直到LOCK=1,when PLL is ready,退出循环

CLKSEL_PLLSEL=1;           

//PLLSEL  1 : Bus Clock=PLLCLK/2=8MHz/2=4MHz

//         0 : Bus Clock=OSCCLK/2=16M/2=8MHz

}

/***---------------AD初始化程序---------------***/
//部分是参考前辈的,CTL345根据自己的需求设置。此处已设置打开0123四个通道,保存结果到对应ATD0DRx(x表示结果寄存器编号)
void InitAD(void)

{   

ATD0CTL2 = 0XC0;          // 1100 0000    启动A/D,

ATD0CTL3=0X24;
//00100100 打开0/1/2/3通道,FIFO打开结果保存到相应的结果寄存器

ATD0CTL4 = 0XE1;         // 11100001   8位精度, 16AD采样时间

ATD0CTL5=0X30;   //3月22日修改,多通道,左对齐,无符号,连续转换,起始通道ATD0

ATD0DIEN = 0X00;          // 数字输入 disabled

}


/***---------------主程序---------------***/

void main(void)

{

_DISABLE_COP();        // 关看门狗  

InitBusClk();

InitAD();

DDRB=0XFF;            // 设PORTB为输出口

PORTB=0x00;

EnableInterrupts;          // 开放总中断


for(;;)

{

while(!ATD0STAT2);     //等待转换结束,退出循环

{


ad_value0=(byte)ATD0DR0H;     //0通道高位数据,下同123通道

ad_value1=(byte)ATD0DR1H;

ad_value2=(byte)ATD0DR2H;

ad_value3=(byte)ATD0DR3H;

ad_value0_1=(byte)ATD0DR0L;     //0通道低位数据,下同123通道

ad_value1_1=(byte)ATD0DR1L;

ad_value2_1=(byte)ATD0DR2L;

ad_value3_1=(byte)ATD0DR3L;

}

Delay(200);          //延时

PORTB=ad_value0;          //B口有LED,就让它来显示结果吧。调试的时候把value的后缀改一下就能分别检测个个通道


}   

}

//到此结束

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

1

主题

70

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
418
QQ
威望
296
贡献
92
兑换币
0
注册时间
2011-2-20
在线时间
15 小时
2#
发表于 2011-4-2 16:18:42 | 只看该作者
学习~
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
298
QQ
威望
231
贡献
39
兑换币
0
注册时间
2011-1-14
在线时间
14 小时
3#
发表于 2011-4-20 12:56:17 | 只看该作者
回复 1# yoncos


    请问一下,转换完之后为什么要分高低位取出,结果寄存器中的数???
回复 支持 反对

使用道具 举报

6

主题

67

帖子

0

精华

高级会员

Rank: 4

积分
761
QQ
威望
318
贡献
377
兑换币
0
注册时间
2009-12-15
在线时间
33 小时
4#
发表于 2011-4-20 20:50:43 | 只看该作者
我也有同四楼一样的疑问
回复 支持 反对

使用道具 举报

8

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
497
威望
318
贡献
81
兑换币
18
注册时间
2010-7-2
在线时间
49 小时
5#
发表于 2011-4-26 21:08:51 | 只看该作者
回复 1# yoncos


    转换完之后为什么要分高低位取出?
回复 支持 反对

使用道具 举报

10

主题

507

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2048
QQ
威望
1302
贡献
390
兑换币
8
注册时间
2011-2-25
在线时间
178 小时
6#
发表于 2011-8-25 15:25:08 | 只看该作者
kankan
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
323
威望
213
贡献
52
兑换币
0
注册时间
2011-9-13
在线时间
29 小时
7#
发表于 2011-10-14 20:21:19 | 只看该作者
我都有同样的疑问。。能解答一下吗?
回复 支持 反对

使用道具 举报

19

主题

298

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3383

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

威望
1657
贡献
1078
兑换币
281
注册时间
2011-6-8
在线时间
324 小时
8#
发表于 2011-10-18 20:59:50 | 只看该作者
8错  呵呵
回复 支持 反对

使用道具 举报

17

主题

109

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1270
QQ
威望
740
贡献
192
兑换币
10
注册时间
2011-4-15
在线时间
169 小时
9#
发表于 2011-10-18 21:42:43 | 只看该作者
同样疑问!!
回复 支持 反对

使用道具 举报

1

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
威望
241
贡献
53
兑换币
0
注册时间
2011-10-9
在线时间
17 小时
10#
发表于 2011-12-4 17:34:46 | 只看该作者
求楼主解释为什么分高低位~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-1 13:47 , Processed in 0.056697 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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