首页 理论教育 STC15F2K60S2单片机的A-D模块及引脚功能配置示例

STC15F2K60S2单片机的A-D模块及引脚功能配置示例

时间:2023-06-28 理论教育 版权反馈
【摘要】:以P1.0为例,其引脚名称标注为“Rxd2/CCP1/ADC0/P1.0”,表明该引脚具有多个功能,可以通过适当配置实现期望的功能。图7-1 A-D模块的I/O接线7.2.1.1 分辨率STC15F2K60S2单片机具有8个独立通道的、分辨率为10位(二进制)的A-D模块。STC15系列单片机的ADC是逐次比较型的ADC。手动设置为“1”时,开始启动A-D转换。

STC15F2K60S2单片机的A-D模块及引脚功能配置示例

首先认识一下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的信号源。

978-7-111-55685-5-Chapter07-1.jpg

图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所示。

978-7-111-55685-5-Chapter07-2.jpg

图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相关的寄存器

978-7-111-55685-5-Chapter07-3.jpg

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口各位的设置

978-7-111-55685-5-Chapter07-4.jpg

动一动

请操作P1ASF寄存器,分别实现:

1)将P1口全部设为模拟功能A-D使用。

2)将P1.4作为模拟功能A-D使用,其他作为I/O口。

注意:P1ASF不可位寻址。

2.ADCCONTR——ADC控制寄存器

978-7-111-55685-5-Chapter07-5.jpg

特别说明:对ADCCONTR寄存器的操作,根据数据手册描述,建议直接赋值操作,不要进行“与”和“或”语句。

➢ADC_POWER:ADC电源控制位。

0:关闭ADC电源。

1:打开ADC电源。

注意:初次打开内部ADC电源时,必须进行适当延时,等内部模拟电源稳定后,再启动A-D转换。作为初学,我们暂不考虑功耗等问题,如果设计需要使用ADC,则可以将ADC电源一直打开。(www.xing528.com)

➢SPEED1和SPEED0:A-D转换速度控制位,其取值与转换所用时间对应关系见表7-3。

表7-3 各位取值与转换所用时间关系

978-7-111-55685-5-Chapter07-6.jpg

➢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 模拟输入通道选择

978-7-111-55685-5-Chapter07-7.jpg

特别注意:要选择哪个通道作为模拟输入,必须首先设置好P1ASF对应位为1,表示该位作为模拟功能A-D使用,否则对应的I/O将只是普通的I/O口,无法作为模拟输入通道。

动一动

请读者设置ADC_CONTR、P1ASF,实现如下功能:选择P1.7作为模拟输入通道,打开ADC电源(之后不再关闭),要求ADC以最快速度进行转换,清除A-D转换结束标志,同时启动A-D转换。

3.CLKDIV

➢ADRJ:A-D转换结果调整方式控制位。.

978-7-111-55685-5-Chapter07-8.jpg

寄存器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寄存器——中断使能寄存器

978-7-111-55685-5-Chapter07-9.jpg

➢EA:总中断控制位,为1时CPU开放中断,为0时CPU屏蔽所有中断申请。

➢EADC:A-D转换中断控制位,为1时允许A-D转换中断,为0时禁止A-D转换中断。

8051单片机的中断系统实行“两级控制”。

5.IP寄存器——中断优先级寄存器

978-7-111-55685-5-Chapter07-10.jpg

➢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应该取什么数值?提示:阅读数据手册。

978-7-111-55685-5-Chapter07-11.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈