智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1074|回复: 1
打印 上一主题 下一主题

[咨询] 求指导

[复制链接]

200

主题

2621

帖子

1

精华

杰出人士

蜗牛

Rank: 12Rank: 12Rank: 12

积分
12488

优秀会员奖章活跃会员奖章论坛骨干奖章论坛元老奖章在线王奖章资源大师奖章

QQ
威望
5973
贡献
3101
兑换币
1999
注册时间
2011-10-21
在线时间
1707 小时
跳转到指定楼层
1#
发表于 2011-11-29 17:22:39 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

#include <hidef.h>
/* common defines and macros */

#include "derivative.h"
/* derivative-specific definitions */

int LED[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

void CLK_init(void);

void AD_init(void);

unsigned char GetATD0(unsigned char ch);

void delay(int delaytime)


{//软件延时,24M总线频率时延时时间约为10us



int i;unsigned char j;



for (i=0;i<delaytime;i++)



for (j=0;j<24;j++)



;


}


void longdelay(int delaytime)


{//软件延时,24M总线频率时延时时间约为1ms



int i;



for (i=0;i<delaytime;i++)



delay(1);


}

void CLK_init(void)

{


CLKSEL=0x00; //初始时还没有PLL


PLLCTL=0xe1; //时钟监控使能,PLL允许,VCOCLK调频2%,禁止快速苏醒,禁止自给时钟,伪停止下禁止实时中断和看门狗


SYNR=2;


REFDV=1;
//PLLCLK=2*OSCCLK*(SYNR+1/((REFDV+1))=48M;


asm NOP;asm NOP;asm NOP;//等待锁相环稳定


while(!(CRGFLG&0x08));//锁相环稳定标志位


CLKSEL=0x80;
//时钟选择寄存器,Bus Clock=PLLCLK/2,停止模式下振荡器、系统时钟、锁相环、内核时钟、看门狗继续工作


}

void AD_init(void)

{


ATD0CTL0=0x07;



ATD0CTL1=0x00;



ATD0CTL2=0x40;



ATD0CTL3=0xc0;



ATD0CTL4=0x44;



ATD0CTL5=0x30;



ATD0DIEN=0x00;




/*ATD0CTL0=0x00;
//AD转换序列长度为16


ATD0CTL1=0x00;
//允许指定AD口做外部触发输入口,8位结果,采样前采样电容不放电 1


ATD0CTL2=0x40;
//标志寄存器快速清零,停止模式不运行,禁止外部触发,禁止转换完成中断和比较成功中断


ATD0CTL3=0xc0;
//结果右对齐,非FIFO模式,冻结模式继续转换 转换长度8


ATD0CTL4=0x44;
//第二阶段采用8AD周期(第一阶段2AD周期),f=fbus/2*(4+1)4.16ms转换一次


ATD0CTL5=0x38;
//连续多通道转换,从通道8开始


ATD0DIEN=0x00;
//禁用数字输入缓冲区*/


}

void IOinit(void)

{


DDRB=0xff;


PORTB=0x00;


DDR0AD0=0x00;

}

unsigned char GetATD0(unsigned char ch)

{


byte ad=0;


while(!ATD0STAT0_SCF);


switch(ch)


{


case 0:


ad=ATD0DR0L;


break;


case 1:


ad=ATD0DR1L;


break;


case 2:


ad=ATD0DR2L;


break;


case 3:


ad=ATD0DR3L;


break;


case 4:


ad=ATD0DR4L;


break;


case 5:


ad=ATD0DR5L;


break;


case 6:


ad=ATD0DR6L;


break;


case 7:


ad=ATD0DR7L;


break;


}


return ad;

}

void main(void)

{


int ADdata[8];


int i1,i2,i3,i4,i5,i6,i7,i8;


unsigned char i;


CLK_init();


AD_init();


DisableInterrupts;


while(1)


{


/*for(i=0;i<8;i++)


{


PORTB=LED;


ADdata=GetATD0(i);



}


i1= ADdata[0];


i2= ADdata[1];


i3= ADdata[2];


i4= ADdata[3];


i5= ADdata[4];


i6= ADdata[5];


i7= ADdata[6];


i8= ADdata[7];*/


i1=GetATD0(7);


ATD0STAT0_SCF=1;


if(i1)


{


PORTB=0x01;


}



}

}

这是一个关于AD的程序,关于unsigned char GetATD0((unsigned char ch)我没看明白这个函数的作用;

求大虾指点迷津

200

主题

2621

帖子

1

精华

杰出人士

蜗牛

Rank: 12Rank: 12Rank: 12

积分
12488

优秀会员奖章活跃会员奖章论坛骨干奖章论坛元老奖章在线王奖章资源大师奖章

QQ
威望
5973
贡献
3101
兑换币
1999
注册时间
2011-10-21
在线时间
1707 小时
2#
 楼主| 发表于 2011-12-8 14:27:01 | 只看该作者
咋没人理俺
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-29 01:45 , Processed in 0.072996 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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