首先认识一下A-D模块是如何接线的。如图7-1所示,STC15F2K60S2单片机有8路A-D通道,分布在P1.0~P1.7。以P1.0为例,其引脚名称标注为“Rxd2/CCP1/ADC0/P1.0”,表明该引脚具有多个功能,可以通过适当配置实现期望的功能。本章要使用的A-D功能就是利用了功能复用将P1.0设置为A-D模拟电压输入功能。作为基础实验,可以使用一个电位器输入0~5V可调的直流电压,作为ADC的信号源。
图7-1 A-D模块的I/O接线
7.2.1.1 分辨率
STC15F2K60S2单片机具有8个独立通道的、分辨率为10位(二进制)的A-D模块。衡量一个A-D模块好坏有许多指标,而且A-D的实现原理也有多种形式,作为初学我们只关心其中一个最重要的指标:分辨率。10位分辨率意味着可以表示数的范围:0000000000~1111111111,转换为16进制即0x0000~0x03ff,对应十进制即0~1023。也就是说,外界模拟的范围(这里是0~5V)对应着转换后的数字量范围(十进制是0~1023),也可以认为将0~5V分为1024份。
想一想
如果A-D转换为的数字为512,请问外界的模拟电压是多少?若是外界输入电压为零,则对应的数字量是什么?如果外界输入最大电压值,则对应的数字量又是什么?你能写出电压与数字量之间的函数关系吗?
7.2.1.2 相关寄存器
了解了A-D模块的分辨率,模拟量与数字量之间的关系后,我们来认识一下STC单片机ADC模块的基本组成框图,如图7-2所示。
图7-2 ADC模块的基本组成框图
STC15系列的ADC由多路选择开关、比较器、逐次比较寄存器、10位DAC、转换结果寄存器(ADC_RES和ADC_RESL)以及ADC_CONTR构成。STC15系列单片机的ADC是逐次比较型的ADC。
想一想
请读者认真阅读图7-2,回答如下问题。
1.从图7-2中,读者可以看到有多少路ADC通道?不同通道能否同时工作(注意开关闭合方式)?
2.从图7-2中,读者可以看到哪几个相关寄存器?它们各自的功能是什么?其中最重要的寄存器是哪个?
与ADC相关的寄存器汇总见表7-1。
表7-1 与ADC相关的寄存器
1.P1ASF——P1口模拟功能配置寄存器
STC15系列单片机的ADC在P1口,有8路电压输入型A-D,可作为温度检测、电池电压检测等。上电复位后,P1是作为弱上拉型I/O口,用户必须通过软件配置才能将P1口的某个位设置为A-D转换口。这个寄存器就是P1ASF,地址9DH,只能写,读无效,不可位寻址。要让P1口哪个位作为A-D口,只需将对应的P1ASF位设为1,见表7-2。
表7-2 P1口各位的设置
动一动
请操作P1ASF寄存器,分别实现:
1)将P1口全部设为模拟功能A-D使用。
2)将P1.4作为模拟功能A-D使用,其他作为I/O口。
注意:P1ASF不可位寻址。
2.ADCCONTR——ADC控制寄存器
特别说明:对ADCCONTR寄存器的操作,根据数据手册描述,建议直接赋值操作,不要进行“与”和“或”语句。
➢ADC_POWER:ADC电源控制位。
0:关闭ADC电源。
1:打开ADC电源。
注意:初次打开内部ADC电源时,必须进行适当延时,等内部模拟电源稳定后,再启动A-D转换。作为初学,我们暂不考虑功耗等问题,如果设计需要使用ADC,则可以将ADC电源一直打开。(www.xing528.com)
➢SPEED1和SPEED0:A-D转换速度控制位,其取值与转换所用时间对应关系见表7-3。
表7-3 各位取值与转换所用时间关系
➢ADC_FLAG:A-D转换结束标志位。
一旦A-D转换结束,硬件会自动将ADC_FLAG置1,可供CPU查询或产生中断,但无论如何必须软件对其复位操作。也就是说,一旦检测到ADC_FLAG为1,并进行适当处理后,必须人为将其复位,否则将一直认为A-D转换结束。一句话:硬件置位,软件复位!
➢ADC_START:A-D转换启动控制位。
手动设置为“1”时,开始启动A-D转换。一旦转换结束,ADC_START自动变成“0”。一句话:软件置位启动,硬件复位结束!
➢CHS2/CHS1/CHS0:模拟输入通道选择,其设置见表7-4。
表7-4 模拟输入通道选择
特别注意:要选择哪个通道作为模拟输入,必须首先设置好P1ASF对应位为1,表示该位作为模拟功能A-D使用,否则对应的I/O将只是普通的I/O口,无法作为模拟输入通道。
动一动
请读者设置ADC_CONTR、P1ASF,实现如下功能:选择P1.7作为模拟输入通道,打开ADC电源(之后不再关闭),要求ADC以最快速度进行转换,清除A-D转换结束标志,同时启动A-D转换。
3.CLKDIV
➢ADRJ:A-D转换结果调整方式控制位。.
寄存器CLKDIV,地址97H,B5位ADRJ为A-D转换结果调整方式控制位。如前所述,STC15系列单片机的ADC是10位分辨率的,但对8位单片机而言,其寄存器大多是8位的,无法存储10位的结果,因此STC设置了两个寄存器来存储A-D转换结果:ADC_RES和ADC_RESL。
1)若ADRJ=0,ADCRES存放高8位ADC结果,ADCRESL存放低2位ADC结果。ADRJ=0为默认方式,我们也建议读者使用这方式。
2)若ADRJ=1,ADCRES存放高2位ADC结果,ADCRESL存放低8位ADC结果。
动一动
假设定义了无符号整形变量AD_Result,当ADRJ分别为0和1时,请将A-D转换结果存入到该变量中,要求给出表达式。
4.IE寄存器——中断使能寄存器
➢EA:总中断控制位,为1时CPU开放中断,为0时CPU屏蔽所有中断申请。
➢EADC:A-D转换中断控制位,为1时允许A-D转换中断,为0时禁止A-D转换中断。
8051单片机的中断系统实行“两级控制”。
5.IP寄存器——中断优先级寄存器
➢PADC:A-D转换中断优先级控制位,为1时A-D中断为高优先级,为0时A-D中断为低优先级。
动一动
1.请读者给出A-D初始化函数,要求:使用P1.4作为模拟输入通道,最低转换速度,要求ADCRES存放A-D转换的高8位结果,清除A-D转换结束标志,开放A-D转换中断并设为高优先级,最后启动A-D转换。
2.我们知道,中断服务函数带有后缀“interrupt n”,其中n为不同数值代表不同的中功能,那么如果还设置了ADC中断,如何标识其中断服务函数,这时的n应该取什么数值?提示:阅读数据手册。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。