第十六次课(共2学时)一、授课题目:STC15F2K60S2的A/D转换二、教学目标和任务:1.掌握模拟量和数字量之间的相互转换关系;2.掌握STC15F2K60S2中有关模数转换的SFR的使用方法;3.编写程序实现模拟电压值的显示。三、教学重难点:重点:模拟量和数字量之间的相互转换关系:有关模数转换的SFR的使用方法;编写程序实现模拟电压值的显示。难点:编写程序实现模拟电压值的显示。四、授课过程:回顾:STC15F2K60S2单片机定时/计数器的中断编程方法和查询编程方法、方波的实现、电子钟和秒表的设计。0.引入AD转换(模数转换):将模拟量转化为数字量的过程。计算机可以处理的是数字量,而传感器测得的电压等量为模拟量。需要进行转换才可以显示处理。京模拟949℃数字电信号信号温度93.6%湿度08:30TIME图1模数转换应用示意图1
1 第十六次课(共 2 学时) 一、授课题目:STC15F2K60S2 的 A/D 转换 二、教学目标和任务: 1. 掌握模拟量和数字量之间的相互转换关系; 2. 掌握 STC15F2K60S2 中有关模数转换的 SFR 的使用方 法; 3. 编写程序实现模拟电压值的显示。 三、教学重难点: 重点:模拟量和数字量之间的相互转换关系;有关模数转 换的 SFR 的使用方法;编写程序实现模拟电压值的显示。 难点:编写程序实现模拟电压值的显示。 四、授课过程: 回顾:STC15F2K60S2 单片机定时/计数器的中断编程方法 和查询编程方法、方波的实现、电子钟和秒表的设计。 0.引入 AD 转换(模数转换):将模拟量转化为数字量的过程。计 算机可以处理的是数字量,而传感器测得的电压等量为模拟量。 需要进行转换才可以显示处理。 图 1 模数转换应用示意图
1.模数转换中的数值关系例如:假设某传感器输出电压在0~5V之间,如何将它的输出值其化为10位二进制数?10位代表转换精度,假设参考电压为5V。10位有1024个数码,可将5V细分成1024等分。10位二进制数每增大一个,电压增大5/1024V。精度为5/1024V。10位二进制数为B10时,电压大小为(B10*5V)/1024OV00000000001*5/1024V000000000100000000102*5/1024VB10B10*5/1024当输入电压为x时,B10=x*1024/5,当输出的二进制数为B10时,对应的输入电压为B10*1024/5。例题1:思考:(1)当模拟电压为3V时,转换出来的二进制数为?(2)当转换出来的二进制数为0101010101时,对应的输入电压为?答:(3/5)*1024=(1001100110)B(0101010101)B=341U=314/1024*5V=1.665eV2.STC15F2K60S2的模数转换传统的51单片机的AD转换需要通过外接芯片完成,而STC15F2K60S2具有8个10位高速输入型模数转换器。8个通道为P1.0~P1.7,转换信号为电压。模数转换一般分为:2
2 1. 模数转换中的数值关系 例如:假设某传感器输出电压在 0~5V 之间,如何将它的 输出值其化为 10 位二进制数? 10 位代表转换精度,假设参考电压为 5V。10 位有 1024 个 数码,可将 5V 细分成 1024 等分。10 位二进制数每增大一个, 电压增大 5/1024V。精度为 5/1024V。10 位二进制数为 B10 时, 电压大小为(B10*5V)/1024 0000 0000 00 0V 0000 0000 01 1*5/1024V 0000 0000 10 2*5/1024V B10 B10*5/1024 当输入电压为 x 时,B10= x*1024/5,当输出的二进制数 为 B10 时,对应的输入电压为 B10*1024/5。 例题 1:思考: (1)当模拟电压为 3V 时,转换出来的二进制数为? (2)当转换出来的二进制数为 0101010101 时,对应的输 入电压为? 答:(3/5)*1024=(10 0110 0110)B (0101010101) B=341 U=314/1024*5V=1.665eV 2. STC15F2K60S2 的模数转换 传统的 51 单片机的 AD 转换需要通过外接芯片完成,而 STC15F2K60S2 具有 8 个 10 位高速输入型模数转换器。8 个通 道为 P1.0~P1.7,转换信号为电压。 模数转换一般分为:
双积分型:速度最慢,需要几百毫秒。逐次逼近型:速度较快,需要几十微秒。并行比较型:速度最快,几十纳秒。STC15F2K60S2用的是逐次比较法,电路如图2所示。转换过程为过程为:先将结果B10最高位置1,对比(B10*5V)/1024值和电压值的大小。若电压大说明,最高位为1,若电压小说明最高位为0,再将次高位值1,依次往后比出每一位。VNOVRERD/A转换器VINOD7比较D6锁存缓存器D5D4D3STARTOD2空牛D1逻辑EOCDON位奇存器OOE图2逐次逼近法原理图3.STC15F2K60S2有关模数转换的SFR的使用方法控制AD转换的寄存器P1ASF(9DH):B5B4B3B7B6B2B1BOP17ASFP16ASFP15ASFP14ASFP13ASFP12ASFPIIASFPIOASF控制P1对应位是否切换到了ADC通道,没有切换的位可作为普通1/0口使用。例题2:如何打开0.2.4.6引脚作为ADC转换。答:P1ASF=0x55:3
3 双积分型:速度最慢,需要几百毫秒。 逐次逼近型:速度较快,需要几十微秒。 并行比较型:速度最快,几十纳秒。 STC15F2K60S2 用的是逐次比较法,电路如图 2 所示。转 换过程为 过程为:先将结果 B10 最高位置 1 ,对比 (B10*5V)/1024 值和电压值的大小。若电压大说明,最高位为 1,若电压小说明最高位为 0,再将次高位值 1,依次往后比出 每一位。 图 2 逐次逼近法原理图 3. STC15F2K60S2 有关模数转换的 SFR 的使用方法 控制 AD 转换的寄存器 P1ASF(9DH): B7 B6 B5 B4 B3 B2 B1 B0 P17ASF P16ASF P15ASF P14ASF P13ASF P12ASF P11ASF P10ASF 控制 P1 对应位是否切换到了 ADC 通道,没有切换的位可 作为普通 I/O 口使用。 例题 2:如何打开 0.2.4.6 引脚作为 ADC 转换。 答:P1ASF=0x55;
控制AD转换的寄存器ADC_CONTR(BCH):B5B7B6B4B3B2BOADC_POWERSPEED1SPEEDOADC_FLAGADC_STRATCHS1CHS1CHSOADCPOWER:ADC电源控制位。ADC_POWER=O,关闭ADC电源,ADCPOWER=1,打开ADC电源。启动A/D转换前一定要确认ADC电源已经打开,初次打开ADC电源需要适当时延(1mS),等ADC电路稳定后在启动A/D转换。模拟通道选择,芯片一次只能做一个通道的转换。切换通道需要20~200微秒延时。CH2、CH1、CHO:指示目前正在进行模拟转换的是哪个通道。000 P10011 P13110P16001 P11100 P14111 P17010 P12101P15例题3:打开模拟转换电源并打开通道P11程序为?假设SPEEDOSPEED1和ADCFLAG均为OPLASF=0x02;ADC_CONTR=0x81;ADCSTART:A/D转换启动位,ADCSTART=1,开始转换,ADC START=O不转换。SPEEDI、SPEEDOADC转换速度控制位。ADCFLAG:ADC转换完成后将这一位置1,检测到这一位为1,自动调用中断函数。4.A/D转换结果可以是8位结果,也可以是十位的。默认十位结果。4
4 控制 AD 转换的寄存器 ADC_CONTR (BCH): B7 B6 B5 B4 B3 B2 B1 B0 ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_STRAT CHS1 CHS1 CHS0 ADC_POWER: ADC 电源控制位。ADC_POWER=0,关闭 ADC 电 源,ADC_POWER=1,打开 ADC 电源。 启动 A/D 转换前一定要确认 ADC 电源已经打开,初次打开 ADC 电源需要适当时延(1ms),等 ADC 电路稳定后在启动 A/D 转换。 模拟通道选择,芯片一次只能做一个通道的转换。切换通 道需要 20~200 微秒延时。CH2、CH1、CH0:指示目前正在进行 模拟转换的是哪个通道。 000 P10 011 P13 110 P16 001 P11 100 P14 111 P17 010 P12 101 P15 例题 3:打开模拟转换电源并打开通道 P11 程序为?假设 SPEED0 SPEED1 和 ADC_FLAG 均为 0. PLASF=0x02; ADC_CONTR=0x81; ADC_START: A/D 转换启动位,ADC_START=1,开始转换, ADC_START=0 不转换。 SPEED1、SPEED0 ADC 转换速度控制位。 ADC_FLAG:ADC 转换完成后将这一位置 1,检测到这一位 为 1,自动调用中断函数。 4. A/D 转换结果 可以是 8 位结果,也可以是十位的。默认十位结果
十位的结果需要两个特殊功能寄存器来保存:ADCRES存放高位,ADCRESL存放低位。用CLKDIV.5(ADRJ)可以选择存储格式:CLKDIV.5=O时,ADC_RES和ADC_RESL低两位。Vin=(ADCRES[7:0],ADC_RESL[1:0])2×Vcc/1024CLKDIV.5=1时,ADCRES低两位和ADCRESL。Vin=(ADCRES[1:0],ADCRESL[7:0])2XVcc/1024对照图3将整个模数转换电路工作过程再给学生复习一遍,使学生务必掌握。接着通过例题4为学生讲解模数转换的应用。ADC_CONTRADC_POWERSPEEDISPEEDOADCFLAGADCSTARTCHS2CHSICHSO模拟输入信号通道选择A/D转换结果寄存器:开关CHS2/CHS1/CHSOADCRESandADCRESLADC7/P1.7.ADC6/P1.6ADC5/P1.5ADC4/P1.4速次比较ADC3/P1.3寄存器ADC2/P1.2比较器ADC1/P1.1ADCO/P1.0功能切换寄存器P1ASF10-bit DAC图3STC15F2K60S2的内置模数转换功能例题4:模数转换电路如图4所示,请编写程序实现将J10处电压实时显示。以小数点后五位小数为例。分析:电压通过电位器在0~5V之间变化,我们将该电压接在P1.1通道,通过模数转换电路将电位器输出的模拟电压转换成数字电压,再换算成数字量进行显示即可。5
5 十位的结果需要两个特殊功能寄存器来保存: ADC_RES 存放高位,ADC_RESL 存放低位。 用 CLK_DIV.5(ADRJ)可以选择存储格式: CLK_DIV.5=0 时,ADC_RES 和 ADC_RESL 低两位。 Vin=(ADC_RES[7:0],ADC_RESL[1:0])2×Vcc/1024 CLK_DIV.5=1 时,ADC_RES 低两位和 ADC_RESL。 Vin=(ADC_RES[1:0],ADC_RESL[7:0])2×Vcc/1024 对照图 3 将整个模数转换电路工作过程再给学生复习一 遍,使学生务必掌握。接着通过例题 4 为学生讲解模数转换的 应用。 图 3 STC15F2K60S2 的内置模数转换功能 例题 4:模数转换电路如图 4 所示,请编写程序实现将 J10 处电压实时显示。以小数点后五位小数为例。 分析:电压通过电位器在 0~5V 之间变化,我们将该电压 接在 P1.1 通道,通过模数转换电路将电位器输出的模拟电压 转换成数字电压,再换算成数字量进行显示即可