C8051F020学习笔记-ADC0

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

三,关于ADC0(ADC在PIC里面总算是完整的弄过一次了,但是基础还是很薄弱,尤其是转换时间的控制,而面对F020的ADC0,相关寄存器较多,所以做一个专题)C8051F020/1的ADC0子系统包括一个9通道的可编程模拟多路选择器(AMUX0),一个可编程增益放大器(PGA0)和一个100ksps、12位分辨率的逐次逼近寄存器型ADC,(F020的ADC0只有一个逐次逼近的ADC,它能实现9路输入是因为它有一个9通道的多路选择器(AMUX0)))。片上的特殊功能寄存器(简称SFR)有11个与ADC0的控制相关,它们是:AMUX0SL-AMUX0通道选择寄存器;AMX0CF-AMUX0配置寄存器;ADC0CF-ADC0配置寄存器;ADC0CN-ADC0控制寄存器;ADC0H-ADC0数据字MSB寄存器;ADC0L-ADC0数据字LSB寄存器;ADC0GTH-ADC0下限数据高字节寄存器;ADC0GTL-ADC0下限数据低字节寄存器;ADC0LTH-ADC0上限数据高字节寄存器;ADC0LTL-ADC0上限数据低字节寄存器;REF0CN-基准电压控制寄存器。3.1ADC0工作方式ADC0的最高转换速度为100ksps,其转换时钟来源于系统时钟分频,分频值保存在寄存器ADC0CF的ADCSC位。3.1.1启动转换有4种转换启动方式,由ADC0CN中的ADC0启动转换方式位(AD0CM1,AD0CM0)的状态决定。转换触发源有:1.向ADC0CN的AD0BUSY位写1;2.定时器3溢出(即定时的连续转换);3.外部ADC转换启动信号的上升沿,CNVSTR;4.定时器2溢出(即定时的连续转换)。备注:(关于ADC0的开始转换,1,可以在软件里面设置,直接给AD0BUSY写1,然后直接输出转换结果。这种方式需要不断的扫描,不断的输出结果,似乎有点费劲。如果采用第三种方式,即用一个开关来控制ADC的启动,那样,在没有按键的情况下,ADC不需要扫描,或许可以用第二种或者第四种方式,我用一个按键来启动定时器的开始计数,技术满之后再启动ADC的转换。总之,除非处理芯片的主要目的就是为了AD转换,要不采用第一种方法只会显得有点笨。)关于ADC0CNAD0ENAD0TMAD0INTAD0BUSYAD0CM1AD0CM0AD0WINTAD0LJST位7位6位5位4位3位2位1位010000000(该寄存器可以位寻址,所以在清零的时候,可以直接写AD0INT=0就可以。)位7:AD0EN:ADC0使能位0:ADC0禁止。ADC0处于低耗停机状态。1:ADC0使能。ADC0处于活动状态,并准备转换数据。(在ACD0初始化里,该位肯定是被置高的。)位6:AD0TM:ADC跟踪方式位0:当ADC被使能时,除了转换期间之外一直处于跟踪方式。1:由ADSTM1-0定义跟踪方式。(该位设置为“0”)位5:AD0INT:ADC0转换结束中断标志,该标志必须用软件清‘0’。0:从最后一次将该位清0后,ADC0还没有完成一次数据转换。1:ADC完成了一次数据转换。(该位为标志位,可以用来查询,如果为1了,则说明ADC已经完成了一次转换,直接清零就ok)位4:AD0BUSY:ADC0忙标志位读:0:ADC0转换结束或当前没有正在进行的数据转换。AD0INT在AD0BUSY的下降沿被置‘1’。1:ADC0正在进行转换。写:0:无作用1:若ADSTM1-0=00b则启动ADC0转换。备注:(该位可以用来做启动指令,也可以用来做查询等待。While(!(AD0BUSY));位3-2:AD0CM1-0:ADC0转换启动方式选择位。如果AD0TM=0:00:向AD0BUSY写1启动ADC0转换。01:定时器3溢出启动ADC0转换。10:CNVSTR上升沿启动ADC0转换。11:定时器2溢出启动ADC0转换。如果AD0TM=1:00:向AD0BUSY写1时启动跟踪,持续3个SAR时钟,然后进行转换。01:定时器3溢出启动跟踪,持续3个SAR时钟,然后进行转换。10:只有当CNVSTR输入为逻辑低电平时ADC0跟踪,在CNVSTR的上升沿开始转换。11:定时器2溢出启动跟踪,持续3个SAR时钟,然后进行转换。(在这里,由于前面的AD0TM被设置为0,采用软件控制AD0BUSY启动转换,因此,这里写为“00”)位1:AD0WINT:ADC0窗口比较中断标志。该位必须用软件清0。0:自该标志被清除后未发生过ADC0窗口比较匹配。1:发生了ADC0窗口比较匹配。(这里直接写0)位0:AD0LJST:ADC0数据左对齐选择位。0:ADC0H:ADC0L寄存器数据右对齐。1:ADC0H:ADC0L寄存器数据左对齐(选择数据右对齐,写0)综上所述:在初始化的时候,采用ADC0BUSY控制ADC启动,寄存器数据右对齐读出。因此ADC0CN=0X80;在AD转换函数里面,另外再写ADC0BUSY=1;delay();while(!(ADC0BUSY));即为启动转换,在转换的时候,ADCOBUSY保持高电平,转换完毕后,ADC0BUSY恢复低电平。(转换数据被保存在ADC数据字的MSB和LSB寄存器:ADC0H和ADC0L。至于转换后的数据是选择左对齐还是右对齐,则由ADC0CN里面的AD0LJST决定。在前面已经选择了右对齐)当通过向AD0BUSY写‘1’启动数据转换时,应查询AD0INT位以确定转换何时结束(也可以使用ADC0中断)。建议的查询步骤如下:1.写‘0’到AD0INT;2.向AD0BUSY写‘1’;3.查询并等待AD0INT变‘1’;4.处理ADC0数据3.1.2关于AMX0CF————————AIN67ICAIN45ICAIN23ICAIN01IC位7位6位5位4位3位2位1位0(该寄存器主要用来配置输入通道作为单端输入还是双端差分输入。由于我的八路通道都需要作为单端输入,所以该寄存器全部写0,即为AMX0CF=0X00;)位7-4:未使用。读=0000b;写=忽略位3AIN67IC:AIN6、AIN7输入对配置位0:AIN6和AIN7为独立的单端输入1:AIN6,AIN7为(分别为)+,-差分输入对位2AIN45IC:AIN4、AIN5输入对配置位0:AIN4和AIN5为独立的单端输入1:AIN4,AIN5为(分别为)+,-差分输入对位1AIN23IC:AIN2、AIN3输入对配置位0:AIN2和AIN3为独立的单端输入1:AIN2,AIN3为(分别为)+,-差分输入对位0AIN01IC:AIN0、AIN1输入对配置位0:AIN0和AIN1为独立的单端输入1:AIN0,AIN1为(分别为)+,-差分输入对3.1.3关于AMX0SL————————AMX0AD3AMX0AD2AMX0AD1AMX0AD0位7位6位5位4位3位2位1位0(该寄存器用来做AMUX9路选择开关的配置,即为通道选择寄存器)位7-4:未使用。读=0000b;写=忽略位3-0:AMX0AD3-0:AMUX0地址位0000-1111b:根据下表选择ADC输入(具体请参照C8051F02X.PDF里面第40页说明。)在这里,由于我的八路通道都设置为输入,前面的AMX0CF设置为了0X00,所以这里只需要按顺序,从0X00、0X01、0X02、0X03、0X04、0X05、0X06、0X07依次选择一遍就可以。3.1.3关于ADC0CF:ADC0配置寄存器AD0SC4AD0SC3AD0SC2AD0SC1AD0SC0AMP0GN2AMP0GN1AMP0GN0位7位6位5位4位3位2位1位0位7-3:AD0SC4-0:ADC0SAR转换时钟周期控制位SAR转换时钟来源于系统时钟,由下面的方程给出,其中AD0SC表示AD0SC4-0中保持的数值,CLKSAR0表示所需要的ADC0SAR时钟(注:ADC0SAR时钟应小于或等于2.5MHz)。(具体参考C8051F02X.PDF第41页)位2-0:AMP0GN2-0:ADC0内部放大器增益(PGA)000:增益=1001:增益=2010:增益=4011:增益=810x:增益=1611x:增益=0.53.2关于电压基准(C8051F020/2)电压基准电路为控制ADC和DAC模块工作提供了灵活性。有三个电压基准输入引脚,允许每个ADC和两个DAC使用外部电压基准或片内电压基准输出。通过配置VREF模拟开关,ADC0还可以使用DAC0的输出作为内部基准,ADC1可以使用模拟电源电压作为基准.REF0CN:电压基准控制寄存器---------------------------------AD0VRSAD1VRSTEMPEBIASEREFBE位7位6位5位4位3位2位1位0位7-5:未用。读=000b,写=忽略。位4:AD0VRS:ADC0电压基准选择位0:ADC0电压基准取自VREF0引脚。1:ADC0电压基准取自DAC0输出。位3:AD1VRS:ADC1电压基准选择位0:ADC1电压基准取自VREF1引脚。1:ADC1电压基准取自AV+。位2:TEMPE:温度传感器使能位0:内部温度传感器关闭。1:内部温度传感器工作。位1:BIASE:ADC/DAC偏压发生器使能位(使用ADC和DAC时该位必须为1)0:内部偏压发生器关闭。1:内部偏压发生器工作。位0:REFBE:内部电压基准缓冲器使能位0:内部电压基准缓冲器关闭。1:内部电压基准缓冲器工作。内部电压基准提供从VREF引脚输出。11x:增益=0.5

1 / 4
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功