常驻嘉宾
- 积分
- 4106
- 威望
- 1956
- 贡献
- 1232
- 兑换币
- 1287
- 注册时间
- 2013-10-20
- 在线时间
- 459 小时
- 毕业学校
- 北京工业大学
|
麻烦帮忙看一下 我写的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();
}
|
|