第9章 STC12C5A60S2单片机的片内

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第9章 STC12C5A60S2单片机的 片内A/D转换器
9.1 A/D转换器的内部结构 9.2 A/D转换器的相关寄存器 9.3 A/D转换器的应用
第9章 STC12C5A60S2单片机的片 内A/D转换器
• 传统的单片机只能处理数字量信息,但在应用中 经常需要处理一些连续变化的模拟量,例如温度、 流量、电压、频谱等,这就需要先经过A/D转换转 变成单片机可以处理的数字量。 • STC90C58AD、STC12C5A60S2、STC12C5410AD等单 片机内部集成了8路10位A/D转换电路,转换速度 可达到250KHz(25万次/秒),即转换周期为4μs。
【 例 9 - 1 】 设 单 片 机 的 系 统 时 钟 频 率 为 12MHz , 利 用 STC12C5A60S2单片机中的 A/D转换模块,将测温电阻 PT1000 的阻值随温度变化所形成的电压信号转换成数字信号,单片 机 读 取 后 存 放 于 30H 、 31H 单 元 , 如 图 9 - 5 所 示 。 • 分析:首先将PT1000阻值变化所反应出的电压信号经仪表 放大器AD623放大成0-5V的电压信号。经单片机内部的 A/D转换器转换成数字量,为了提高转换的精确度,尽量 减小电源噪声的影响,可连续采集64次,并对A/D转换的 结果求和,相当于实现16位的A/D转换 。 • 汇编语言子程序
情况如表 - 1 所示 选择9 P1 口不同的引脚作为模拟输入通道, 清 0 。 转换时,必须再次将该位置 1。 0 360个时钟周期转换一次 0 1 1 具体情况如表 1 A/D P1.3 作为 A/D 输入 9-2所示。 0 A/D转换之前一定要保证 540 个时钟周期转换一次 1 0 0 0 P1.4 作为 A/D输入 •启动 A/D 转换器的电源已打开,并且 首次开启内部 转换电源时,需要适当的延时,等内部电源 1 A/D 0 1 P1.5作为A/D输入 稳定后,再启动 A/D 转换结束后关闭 1 1 转换。 0 A/D P1.6 作为A/D输入 A/D转换器的 电源可降低功耗。 1 1 1 P1.7作为A/D输入
VCC
9.3 A/D转换器的应用
实现A/D转换的步骤如下: (1)设置P1ASF寄存器,确定P1口的相应引脚作为模拟输入 通道,设置辅助寄存器AUXR1中的ADRJ位确定转换结果保 存格式; (2)设置A/D转换控制寄存器ADC_CONTR,打开A/D转换电 源,确定转换速度和转换通道; (3)启动A/D转换。上电后首次打开内部AD转换模拟电源时, 需适当延时,待内部模拟电源稳定后,再启动A/D转换。 (4)A/D转换启动后经4个时钟周期延时可以通过软件查询 ADC_CONTR寄存器中的ADC_FLAG位是否为1,当ADC_FLAG 为1时表明A/D转换结束。AD转换结束后需将ADC_FLAG位 清0。
AD_RESULT1 EQU 30H ;A/D转换结果的高8位 AD_RESULT2 EQU 31H ;A/D转换结果的低8位 P1ASF EQU 9DH AUXR1 EQU A2H ADC_CONTR EQU BCH AD_CONVERT: MOV P1ASF,#01H ;选择P1.0为A/D转换模拟量的输入 ORL AUXR1,#00000100B;选择ADRJ位为1 MOV A,#0E0H MOV ADC_CONTR,A ;开启A/D转换的电源 MOV AD_RESULT1,#00H MOV AD_RESULT2,#00H LCALL DELAY_10μs ;等待A/D转换电源稳定 MOV A,#11101000B MOV ADC_CONTR,A ; 启动A/D转换 MOV R6,#64 ;R6作为计数器
C51程序:
#include<STC12C5A.h> #include<intrins.h> //声明本征函数库 unsigned int temp,result; unsigned char num=0x40;//设置A/D转换次数 void AD_CONV ( ); // A/D转换函数的声明 void DELAY_10μs( ) ;//延时10μs函数的声明 void main( ) { P1ASF=0x01; 选择P1.0为A/D转换模拟量的输入 AUXR1=0x04;选择ADRJ位为1 ADC_CONTR=0xE0;//开启动A/D转换的电源 DELAY_10μs ( ); //延时10μs ADC_CONTR=0xE8;//启动A/D转换 while(num!=0) { AD_CONV ( );//调用A/D转换函数 num--; //计数值减1 } while(1); }
• 当P1口中某引脚要作为A/D使用时,要将P1ASF寄存器 中该引脚所对应的位置1,即该引脚设置为模拟功能; • 通过MOV P1ASF,#DATA指令实现。
2.ADC控制寄存器ADC_CONTR(地址BCH)
wk.baidu.com
CHS2 CHS1 CHS0 模拟输入通道选择
SPEED1 0 SPEED0 A/D 转换所需时间 0 0 P1.0作为 A/D 输入 SPEED1 、SPEED0 :转换速度控制位。 ADC_FLAG : A/D 转换器转换结束标志 ADC_POWER:A/D转换器的电源控制位。 ADC_START : 转换启动控制位。将该 1 1 CHS2 90 个时钟周期转换一次 对 SPEED0 两位取不同的值 0 0 SPEED1 1 、 P1.1作为 A/D:模拟输入通道选择。 输入 、 CHS1 、 CHS0 位,当 A/D 转换完成后,硬件自动将 当该位为1时,开启A/D转换器电源;当 位设置为1时,启动转换。转换结束 时, A/D 转换所需的时间不同,具体 CHS2 、 CHS1 、 CHS0 三位取不同的值时, ADC_FLAG 位置 1,但要通过程序将其 1 0当 180 个时钟周期转换一次 该位为 0时,关闭 转换器电源。 0 1 A/D 0 P1.2 作为 A/D 输入 后,该位自动清 0。下次需要启动
void AD_CONV ( ) { do{ temp= ADC_CONTR; //读A/D转换的控制寄存器的内容 }while ((temp &0x10)!=0x10);//等待A/D转换结束 ADC_CONTR=0xE8;//再次启动A/D转换 temp=ADC_RESL; //读转换结果的低8位 result+= temp;//累加转换结果 temp=ADC_RES;//读转换结果的高2位 temp=temp&0x0003;//屏蔽转换结果的高6位 temp= _irol_(temp,8);//将转换结果左移8位 result+= temp;//累加转换结果 } void DELAY_10μs ()//延时10μs函数 { unsigned char a; for(a=30;a>0;a--); }
AD_CONVERT1: LCALL AD_CONV ;调用A/D转换的子程序 DJNZ R6, AD_CONVERT1 ;64次转换未结束,继续转换 MOV A,# 0 MOV ADC_CONTR,A;清ADC_FLAG位,并停止AD转换 RET AD_CONV: MOV A,ADC_CONTR JNB ACC.4, AD_CONV ;等待A/D转换结束 MOV A,#11101000B MOV ADC_CONTR,A ;再次启动AD转换 MOV A,ADC_RESL ;读转换结果的低8位 ADD A, AD_RESULT2 ;与低8位结果相加
MOV AD_RESULT2,A ;将得到的结果存放至31H单元 MOV A, ADC_RES ;读转换结果的高两位 ANL A,#03H ;屏蔽ADC_RES寄存器的高6位 ADDC A, AD_RESULT1 ;与高8位结果相加 MOV AD_RESULT1,A ;将得到的结果存放至30H单元 RET DELAY_10μs: MOV R5,#1EH DJNZ R5,$ RET
9.2 A/D转换器的相关寄存器
与A/D转换器相关的寄存器有: P1口模拟功能控制寄存器P1ASF A/D转换器控制寄存器ADC_CONTR A/D转换结果寄存器ADC_RES、ADC_RESL 辅助寄存器AUXR1 与A/D中断有关的寄存器IE、IPH和IP
• • • • •
1.P1口模拟功能控制寄存器P1ASF(地址9DH)
3.A/D转换结果寄存器ADC_RES、ADC_RESL (地址0BDH、0BEH)
• 用于保存A/D转换结果。
• 当辅助寄存器AUXR1(参见图2-8)中ADRJ(A/D转换结 果寄存器的数据格式调整控制)位为0时,10位A/D转换 结果的高8位存放在ADC_RES中,低2位存放在ADC_RESL的 低2位中。 • ADRJ位为1时,10位A/D转换结果的高2位存放在ADC_RES 寄存器的低2位中,低8位存放在ADC_RESL寄存器中。 • 10位A/D转换的结果与输入电压的关系为: (ADC_RES[1:0],ADC_RESL[7:0])=210 Vin
9.1 A/D转换的内部结构
STC12C5A60S2 单片机的 A/D转换的输入端在 P1 口( P1.7 - P1.0 ),上 电复位后,P1口为弱上拉,用户可以通过程序将8路中的任何一路设 置为A/D转换,不需作为A/D使用的口可继续作为I/O口使用。
逐次逼近型A/D转换器转换原理:
从最高位开始的逐位试探法
VN VX 比较器 D/A转换器 输 出 缓 冲 器 OE N位数字 量输出
时钟 模拟量输入 启动
时序与控制 逻辑电路
N位寄存器 EOC
逐次逼近A/D转换器原理图 逐次逼近式:转换前, N位寄存器写入的数据先由最高位置 1,DAC 输出值与被测的模拟值进行比较:如果“低于”,该位的1被保留; 如果“高于”该位的1被清除。然后下一位再置 1,再比较,决定是 否保留 ……直至最低位完成同一过程。写入的数据从最高位到最低 位都试探过一遍的最终值就是A/D转换的结果。
【 例 9 - 1 】 设 单 片 机 的 系 统 时 钟 频 率 为 12MHz , 利 用 STC12C5A60S2单片机中的 A/D转换模块,将测温电阻 PT1000 的阻值随温度变化所形成的电压信号转换成数字信号,单片 机 读 取 后 存 放 于 30H 、 31H 单 元 , 如 图 9 - 5 所 示 。
相关文档
最新文档