中级会员
- 积分
- 308
- 威望
- 217
- 贡献
- 69
- 兑换币
- 28
- 注册时间
- 2009-3-28
- 在线时间
- 11 小时
|
/*
**********************************************************************************
*
* 工程名称: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
|