智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1647|回复: 0
打印 上一主题 下一主题

[电磁] 多路AD采集

[复制链接]

9

主题

60

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4106
威望
1956
贡献
1232
兑换币
1287
注册时间
2013-10-20
在线时间
459 小时
毕业学校
北京工业大学
跳转到指定楼层
1#
发表于 2013-11-24 16:44:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
麻烦帮忙看一下   我写的4路AD采集程序:为什么输出不对   是哪里的程序写错了?谢谢了!!
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
void Delay(int i)      //延时
{        
  int j;
  for(;i>0;i--)
  for(j=500;j>0;j--);
}
void PLL(void)      //将总频率由16M超频到40M
{
  CLKSEL=0X00;        //  初始化 PLL 前先使用外部晶振
  PLLCTL_PLLON=1;    //  开启  PLL
  SYNR =0x40|0x04;      // pllclock=2*osc*(1+SYNR)/(1+REFDV)=80MHz;                     
  REFDV=0x80|0x01;
  POSTDIV=0x00;  
  _asm(nop);           // BUS CLOCK=40M
  _asm(nop);
  while(!(CRGFLG_LOCK==1));    //等待 PLL 稳定
  CLKSEL_PLLSEL =1;           //fBUS 采用根据 PLL 频率设定
}
void AD_init(void)     //AD初始化
{
  ATD0CTL2=0xc0; //使能ATD,标志位快速清,零禁止外部触发, 中断禁止
  ATD0CTL3=0x20; //每次转换 4 个序列,  NO FIFO, Freeze 模式下继续转
  ATD0CTL4=0x93; //8位精度,4个AD周期,ATDClock=[BusClock*0.5]/[PRS+1]=40M/(2*20)=1M
  ATD0CTL5=0xb0; //右对齐,无符号,多通道连续转换,从0通道开始
  ATD0DIEN=0x00; //禁止数字输入
}
void AD_get(void)     //采集AD
{
  byte AD0=0;
  byte AD1=0;
  byte AD2=0;
  byte AD3=0;
  while(!ATD0STAT0_SCF);
  AD0=(byte)ATD0DR0;  
  AD1=(byte)ATD0DR1;  
  AD2=(byte)ATD0DR2;
  AD3=(byte)ATD0DR3;
  Delay(10000);          //延时
  PORTB=AD0;          //显示通道0的数值
}
void main(void)
{
  PLL();
  DDRB=0XFF;            // 设PORTB为输出口
  PORTB=0x00;
  EnableInterrupts;
  AD_init();
  for(;;)
  AD_get();
}

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

本版积分规则

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

GMT+8, 2024-9-21 00:27 , Processed in 0.223317 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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