新四次培训模块进阶_第1页
新四次培训模块进阶_第2页
新四次培训模块进阶_第3页
新四次培训模块进阶_第4页
新四次培训模块进阶_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四讲ATD模块的使用

一.ATDxCTL2ADPU-A/D电源使能/禁止

1=A/D模块上电

0=禁止A/D,以减少功耗AWAI-A/D等待模式1=等待模式下,转换0=等待模式下,禁止转换AFFC-A/D快速转换完成标志位清零

1=快速标志位清零顺序

每次读取结果寄存器自动清零

0=正常标志位清零顺序

需要手动对状态标志位清零ASCIE-A/D顺序完成中断使能ASCIF-A/D顺序完成标志位二.ATDxCTL3S8C:S1C决定转换队列长度;S8CS4CS2CS1C队列长度00008000110010200113010040101501106011171XXX8注意:转换序列长度就是需要转换的通道数比如:通道0,1,2作为AD采集通道,则转换序列为3,即S2C=1,S1C=1FIFO模式决定了结果存放与转换顺序的关系在控制寄存器5ATD0CTL5中:设CCCBCA=000,转换序列从通道0开始;ATD0DR0,ATD0DR1,ATD0DR2存放转换结果设CCCBCA=010,转换序列从通道2开始。仍然是ATD0DR0,ATD0DR1,ATD0DR2存放转换结果下面演示:非FIFO模式voidADC_Init(){ATD0CTL2=0x80;///ATD0常工作

ATD0CTL3=0x00;//队列长度8;转换结果与转换顺序相关//

ATD0CTL3=0x10;//队列长度2;转换结果与转换顺序相关

ATD0CTL4=0x81;//8位精度:4个转换周期

//ATD0CTL5=0XB6;///从通道06开始;连续转换;右对齐

ATD0CTL5=0XB7;///从通道07开始;连续转换;右对齐}voidmain(void){/*putyourowncodehere*/intkk=0,i;display_Init();ECT_Init();ADC_Init();boMA_Init();DDRA=0XFF; EnableInterrupts;for(;;){for(i=1000;i>0;i--);while(!ATD0STAT0_SCF);////等待当前转换完成while(!ATD0STAT1_CCF0);switch(read_BOMA()){case1:Display(ATD0DR0);break;case2:Display(ATD0DR1);break;case3:Display(ATD0DR2);break;case4:Display(ATD0DR3);break;case5:Display(ATD0DR4);break;case6:Display(ATD0DR5);break;case7:Display(ATD0DR6);break;case8:Display(ATD0DR7);break;}ATD0STAT0_SCF=1;///清除转换完成标志

_FEED_COP();/*feedsthedog*/}/*loopforever*//*pleasemakesurethatyouneverleavemain*/}可见实验现象为1.当从06通道开始转换时,06通道结果存在ATD0DR0中07通道结果存在ATD0DR1中;

2.当从07通道开始转换时,07通道结果存在ATD0DR0中06通道结果存在ATD0DR7中;注意此处设置是结果存放与转换顺序相关;

转换队列为8时,从07开始转换时,读取ATD0DR1:ATD0DR6得到的是其他硬件产生的结果;

从06开始转换时,读取ATD0DR2:ATD0DR7得到的是其他硬件产生的结果;

*当队列长度不是8时,ATD转换结果与顺序的关系:

例如:队列长度为3,从06通道开始转换,则转换顺序和结果对应为:(ATD0DR0—AN6)(ATD0DR1—AN7)(ATD0DR2—AN1)(ATD0DR0—AN6)(ATD0DR1—AN7)….队列长度为3,从07通道开始转换,则转换顺序和结果对应为:(ATD0DR0—AN7)(ATD0DR1—AN1)(ATD0DR2—AN2)(ATD0DR0—AN7)(ATD0DR1—AN1)….在FIFO模式下若队列长度为8;则结果与非FIFO模式下相同;

若队列长度非8则结果如下:

例:队长3,从06通道开始转换则结果与顺序为:(ATD0DR0—AN6)(ATD0DR1—AN7)(ATD0DR2—AN0)(ATD0DR3—AN6)(ATD0DR4—AN7)(ATD0DR5—AN0)(ATD0DR6—AN6)(ATD0DR7—AN7)(ATD0DR0—AN0)(ATD0DR1—AN6)注意:使用FIFO模式必须读取ATDxSTAT0中CC1,CC2,CC3来确定被转换通道对应

下面演示:在FIFO模式队长为2下各寄存器的值////////////--------ADC-------/////////////voidADC_Init(){////AD0/

ATD0CTL2=0x80;///ATD0常工作

//ATD0CTL3=0x10;//队列长度2;转换结果与转换顺序相关

ATD0CTL3=0x24;//队列长度2;转换结果与转换顺序无关

//ATD0CTL3=0x04;//队列长度8;转换结果与转换顺序相关//ATD0CTL3=0x00;//队列长度8;转换结果与转换顺序无关

ATD0CTL4=0x81;//8位精度:4个转换周期

ATD0CTL5=0XB6;///从通道06开始;连续转换;右对齐

//ATD0CTL5=0XB7;///从通道07开始;连续转换;右对齐}voidmain(void){/*putyourowncodehere*/intkk=0,i;display_Init();ECT_Init();ADC_Init();boMA_Init();DDRA=0XFF; EnableInterrupts;for(;;){

for(i=1000;i>0;i--);while(!ATD0STAT0_SCF);////等待当前转换完成while(!ATD0STAT1_CCF0);switch(read_BOMA()){case1:Display(ATD0DR0);break;case2:Display(ATD0DR1);break;case3:Display(ATD0DR2);break;case4:Display(ATD0DR3);break;case5:Display(ATD0DR4);break;case6:Display(ATD0DR5);break;case7:Display(ATD0DR6);break;case8:Display(ATD0DR7);break;}//Display(read_BOMA());ATD0STAT0_SCF=1;///清除转换完成标志

_FEED_COP();/*feedsthedog*/}/*loopforever*//*pleasemakesurethatyouneverleavemain*/}思考:在FIFO模式下,队列长度为一那些结果寄存器存储了被选择通道的正确结果?ATDxDR0:ATDxDR7在非FIFO模式下,队列长度为1,那个寄存器寄存器存储了被选择通道正确的结果?ATDxDR0

ATDxCTL4SRES8:AD精度控制位1:8位精度结果从0~255

0:10位精度结果从0~1023

精度越高转换速度越慢AD采样周期SMP1SMP0第二阶段采样时间002个周期014个周期108个周期1116个周期AD采样预分频PRS4:PRS0[BusClock]ATDclock=X0.5[Prescaler]

其中[Prescaler]=2+PRS0*2+PRS1*4+PRS2*8+PRS3*16+PRS4*32ATDxCTL5ATD数据结构DJM:结过对齐方式1:右对齐0:左对齐注意:对齐方式的不同在读取结果寄存器时需注意

当不分高低位读时(即读ATDxDRy):结果总是正确的

当分高低位读时(即读ATDxDRyH和即读ATDxDRyL):

结果需要根据不同的对齐方式来确认;结果的数据类型DSGN:0:无符号1:有符号数据有正负,此时不可使用右对齐;SCAN:队列转换模式0:只转换一次1:连续转换————队列转换完成后继续从第一个采样通道(由CC,CB,CA决定)MULT:多通道采集模式1:多通道采集模式0:单通道采集模式

当多通道采集模式开启,由CC,CB,CA,决定的第一个通道开始,采集由S8C,S4C,S2C决定的通道数量

例:第一通道为5,采集通道数为4,则采样顺序为AN5——AN6——AN7——AN1下一次仍按此顺序

当单通道采集时,采集由CC,CB,CA,决定的哪一位由CC,CB,CA,决定通道表ATD0:含通道0——7例:通道4:AN4ATD1:含通道8——15例:通道10:AN2CCCBCA通道000AN0001AN1010AN2011AN3100AN4101AN5110AN6111AN7ATD状态寄存器0:ATDxSTAT0SCF:队列转换完成标志CC2:CC0在非FIFO模式下:可以不用此三位在FIFO模式下:此三位标志着当前通道转换结果的存储位置,与ATDxSTAT1配合使用可以查出到底是那个通道的转换值

下面举例说明配合用法:设转换通道数为3,从06通道开始转换,在FIFO模式下:其转换序列为AN06—AN07—AN01—AN06—AN07—AN01….当前结果存放位置为ATDxDRn中,不知道到底是那个通道转换完成;解法如下:计算上述n=CC0*1+CC1*2+CC2*4;在看CCF0:CCF7那一位为1;(注意此例最多CCF2=1)

如:n=2;CCF1=1;那么可以确定是AN07的结果存放在ATDxDR2中;

又如:n=6;CCF0=1;那么可以确定是AN06的结果存放在ATDxDR6中;下面给出部分代码ATD的初始化

ATD0CTL2=0x80;///ATD0常工作

ATD0CTL3=0x14;//队列长度2;转换结果与转换顺序相关

//ATD0CTL3=0x14;//队列长度2;转换结果与转换顺序无关

//ATD0CTL3=0x04;//队列长度8;转换结果与转换顺序相关//ATD0CTL3=0x00;//队列长度8;转换结果与转换顺序无关

ATD0CTL4=0x81;//8位精度:4个转换周期

ATD0CTL5=0XB6;///从通道06开始;连续转换;右对齐

//ATD0CTL5=0XB7;///从通道07开始;连续转换;右对齐//ATD0CTL5=0x87;//单次转换;从通道07开始;右对齐当队列长度为一时,读取数据ATD1CTL5=0xa6;while(!ATD1STAT0_SCF);////此处也可为while(!ATD0STAT1_CCF0);想一想为什么

a=ATD0DR0;//读通道0的转换结果ATD1STAT0_SCF=1;ATD0CTL5=0xA6;while(!ATD0STAT0_SCF==1);read_data[1]=ATD0DR0L;//电位器AD2旋钮AN6ATD0STAT0_SCF=1;ATD0CTL5=0xA7;//光敏采样输入AN7while(!ATD0STAT0_SCF==1);read_data[2]=ATD0DR0L;A

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论