第9章 模数转换器
更新时间:2023-05-25 19:23:01 阅读量: 实用文档 文档下载
- 第9章推荐度:
- 相关推荐
中国石油大学胜利学院
1/16
第9章
模数转换器
9.1 模数转换器的结构及相关寄存器
9.2 模数转换器的应用
中国石油大学胜利学院
2/16
STC12C5A60S2单片机集成有8路10 位高速模数转换器(ADC),速度可达到 250KHz(25万次/秒,可做温度检测、压 力检测、电池电压检测、按键扫描、频谱 检测等。
中国石油大学胜利学院
3/16
9.1 模数转换器的结构及相关寄存器STC12C5A60S2单片机片内集成8通道 10位模数转换器(ADC)。ADC输入通道 与P1口复用,上电复位后P1口为弱上拉型 I/O口,用户可以通过软件设置将8路中的 任何一路设置为A/D转换,不需作为A/D 使用的口可继续作为I/O口使用。
中国石油大学胜利学院
4/16
9.1.1 模数转换器的结构ADC控制寄存器ADC_CONTR ADC_P OWER SP EED1 SP EED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0
模拟输入信号 通道选择开关 CHS2/CHS1/CHS0 A/D转换结果寄存器ADC_RES和ADC_RESL ADC7/P 1.7 ADC6/P 1.6 ADC5/P 1.5 ADC4/P 1.4 ADC3/P 1.3 ADC2/P 1.2 ADC1/P 1.1 比较器 ADC0/P 1.0 逐次比较 寄存器
10-bit DAC
STC12C5A60S2单片机的模数转换器由多路选择开关、比较器、逐次比较寄存器、10位ADC、转 换结果寄存器(ADC_RES和ADC_RESL)以及ADC控制寄存器ADC_CONTR构成。
中国石油大学胜利学院
5/16
9.1.2 参考电压源STC12C5A60S2单片机A/D转换模块的参考电压源是 输入工作电压Vcc,所以一般不用外接参考电压源。如三 端稳压电路7805的输出电压是5V,但实际电压可能是 4.88V到4.96V,如果用户需要的精度比较高,可在应用产 品出厂前将实际测出的工作电压值记录在单片机内部的 EEPROM里面,以供程序校正使用。 如果Vcc不稳定(例如电池供电的系统中,电池电压 常常在5.3V-4.2V之间漂移), 则需要在8路A/D转换的一 个通道外接一个稳定的参考电压源,来计算出此时的工作 电压Vcc,再计算出其他几路A/D转换通道的电压。例如, 可在ADC转换通道的第七通道外接一个 1.25V的基准参考 电压源,由此求出此时的工作电压Vcc,再计算出其它几 路A/D转换通道的电压。
中国石油大学胜利学院
6/16
9.1.3 与ADC有关的特殊功能寄存器1.P1口模拟功能控制寄存器P1ASF(地址为9DH,复位值为00H)位号 位名称 D7 P17ASF D6 P16ASF D5 P15ASF D4 P14ASF D3 P13ASF D2 P12ASF D1 P11ASF D0 P10ASF
如果要使用相应口的模拟功能,需将P1ASF特殊功能寄存器中的相应位置为‘1’。如,若要使 用P1.6的模拟量功能,则需要将P16ASF设置为1。(注意,P1ASF寄存器不能位寻址,可以使 用汇编语言指令ORL P1ASF, #40H,也可以使用C语言语句P1ASF |= 0x40;)
2.ADC控制寄存器ADC_CONTR(地址为BCH,复位值为00H)位号 D7 D6 SPEED1 D5 SPEED0 D4 ADC_FLAG D3 ADC_START D2 CHS2 D1 CHS1 D0 CHS0
位名称 ADC_PO
WER
1)ADC_POWER:ADC电源控制位。 0:关闭ADC电源。 1:打开ADC电源。 2)SPEED1、SPEED0:ADC转换速度控制位。各种设置如表9-1所示。 3)ADC_FLAG:A/D转换结束标志位。A/D转换完成后,ADC_FLAG = 1,要由软件 清0。不管A/D转换完成后由该位申请产生中断,还是由软件查询该标志位判断A/D转换是 否结束,当A/D转换完成后,ADC_FLAG = 1,一定要软件清0。 4)ADC_START:A/D转换启动控制位,ADC_START=1,开始转换;ADC_START=0, 停止转换。 5)CHS2、CHS1、CHS0:模拟输入通道选择,如表9-2所示。
中国石油大学胜利学院
7/16
3.A/D转换结果寄存器ADC_RES、ADC_RESL特殊功能寄存器ADC_RES(地址为BDH,复位值为00H)和ADC_RESL(地址为 BEH,复位值为00H)用于保存A/D转换结果。 A/D转换结果存储格式由辅助寄存器AUXR1(地址为A2H,复位值为00H)中的 ADRJ控制,ADRJ是AUXR1中的D2位。 (1)当ADRJ=0时,10位A/D转换结果的高8位放在ADC_RES寄存器,低2位放在 ADC_RESL寄存器。存储格式如下:D7 ADC_RES ADC_RESL AUXR1 ADRJ=0 ADC_RES9 D6 ADC_RES8 D5 ADC_RES7 D4 ADC_RES6 D3 ADC_RES5 D2 ADC_RES4 D1 ADC_RES3 ADC_RES1 D0 ADC_RES2 ADC_RES0
中国石油大学胜利学院
8/16
3.A/D转换结果寄存器ADC_RES、ADC_RESL(2)当ADRJ=1时,10位A/D转换结果的最高2位放在ADC_RES寄存器的低2位 ,低8位放在ADC_RESL寄存器。存储格式如下:D7 ADC_RES ADC_RESL AUXR1 ADC_RES7 ADC_RES6 ADC_RES5 ADC_RES4 ADC_RES3 ADC_RES2 ADRJ=1 D6 D5 D4 D3 D2 D1 ADC_RES9 ADC_RES1 D0 ADC_RES8 ADC_RES0
模/数转换结果计算公式如下: ADRJ = 0时,取10位结果 (ADC_RES[7:0],ADC_RESL[1:0]) = 1024 × Vin / Vcc ADRJ = 0时,取8位结果 ADC_RES[7:0] = 256 × Vin / Vcc ADRJ = 1时,取10位结果 (ADC_RES[1:0],ADC_RESL[7:0]) = 1024 × Vin / Vcc Vin为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为 模拟参考电压。
4.与A/D转换中断有关的寄存器中断允许控制寄存器IE中的EADC位(D5位)用于开放ADC中断,EA位 (D7位)用于开放CPU中断;中断优先级寄存器IP中的PADC位(D5位)和IPH 中的PADCH位(D5位)用于设置A/D中断的优先级。在中断服务程序中,要使用 软件将A/D中断标志位ADC_FLAG(也是A/D转换结束标志位)清0。
中国石油大学胜利学院
9.2
模数转换器的应用
9/16
STC12C5A60S2单片机ADC模块的使用编程要点如下: 1)打开ADC电源,第一次使用时要打开内部模拟电源(设置ADC_CONTR)。 2)适当延时,等内部模拟电源稳定。一般延时1ms以内即可。 3)设置P1口中的相应口线作为A/D转换通道(设置P1ASF寄存器)。 4)选择ADC通道(设置ADC_CONTR中的CHS2~CHS0)。 5)根据需要设置转换结果存储格式(设置AUXR1中的ADRJ位)。 6)查询A/D转换结束标志ADC_FLAG,判断A/D转
换是否完成,若完成,则读出结 果(结果保存在ADC_RES和ADC_RESL寄存器中),并进行数据处理。如果是多通 道模拟量进行转换,则更换A/D转换通道后要适当延时,使输入电压稳定,延时量取 20μs~200μs即可,与输入电压源的内阻有关,如果输入电压信号源的内阻在10K 以下,可不加延时;如果是单通道模拟量转换,则不需要更换A/D转换通道,也就不 需要加延时。
8)若采用中断方式,还需进行中断设置(EADC置1,EA置1)。9)在中断服务程序中读取ADC转换结果,并将ADC中断请求标志ADC_FLAG清零。
中国石油大学胜利学院
【例9-1】编程实现利用STC12C5A60S2单片机ADC通道2采集外部模拟电压信号,8位精度, 采用查询方式循环进行转换,并将转换结果保存于30H单元中。假设时钟频率为18.432MHz。 解:取8位精度时,可设置ADRJ=0,直接使用转换结果寄存器ADC_RES的值。由于复位后, ADRJ=0,因此,按照ADC的编程要点进行初始化后,直接判断ADC_FLAG标志是否为1, 若为1,则读出ADC_RES寄存器的值,并存入30H即可;若为0,则继续等待。 汇编语言程序代码如下: $INCLUDE (STC12C5A.INC) ;包含STC12C5A60S2单片机寄存器定义文件 ADC_DAT EQU 30H ;A/D转换结果 ORG 0000H LJMP MAIN ORG 0050H MAIN: MOV SP, #70H ;设置堆栈 ORL ADC_CONTR, #80H ;开A/D转换电源,第一次使用时要打开内部模拟电源 MOV A, #20H LCALL DELAY ;开A/D转换电源后要加适当延时,1ms以内即可 MOV P1ASF,#04H ;设置P1.2的模拟量功能 MOV ADC_CONTR,#11100010B ;选择P1.2作为A/D转换通道 MOV A, #05H LCALL DELAY ;如果切换A/D转换通道,则需要加延时
10/16
中国石油大学胜利学院
WAIT_AD: 11/16 ORL ADC_CONTR, #00001000B ;启动A/D转换 MOV A, #00010000B ;判断A/D转换是否完成 ANL A, ADC_CONTR JZ WAIT_AD ;A/D 转换尚未完成, 继续等待 ANL ADC_CONTR, #11100111B ;将ADC_FLAG清零 MOV A, ADC_RES ;读取A/D转换结果 MOV ADC_DAT, A ;保存A/D转换结果 LJMP WAIT_AD ;等待下一次转换完成 DELAY: ;延时子程序 PUSH 02 ;将寄存器组0 的 R2 入栈 PUSH 03 ;将寄存器组0 的 R3 入栈 PUSH 04 ;将寄存器组0 的 R4 入栈 MOV R4, A DELAY_LOOP0: ;DELAY_LOOP0循环延时200406个时钟周期 MOV R3, #200 ;2个时钟周期 Delay_LOOP1: ;DELAY_LOOP1循环延时1002个时钟周期 MOV R2, #249 ;2个时钟周期 DELAY_LOOP: DJNZ R2, DELAY_LOOP ;4个时钟周期 DJNZ R3, DELAY_LOOP1 ;4个时钟周期 DJNZ R4, DELAY_LOOP0 ;4个时钟周期 POP 04 POP 03 POP 02 RET END
中国石油大学胜利学院
12/16
C语言程序代码如下: #include “stc12c5a.h” //包含STC12C5A60S2单片机寄存器定义文件 unsigned char data adc_dat _at_ 0x30; //A/D转换结果变量 void main(void) { unsigned long i; unsigned char status; ADC_CONTR|=0x80; //开A/D转换电源,第一次使用时要打开内部模拟电源 for (i=0;i<1000
0;i++);//适当延时 P1ASF=0x04; //选择P1.2作为A/D转换通道 ADC_CONTR=0xE2; for (i=0;i<10000;i++); //适当延时 while(1) //循环进行A/D 转换 { ADC_CONTR|=0x08; //重新启动 A/D 转换 status=0; while(status==0) //等待A/D转换结束 { status=ADC_CONTR&0x10; } ADC_CONTR&=0xE7; //将ADC_FLAG清零 adc_dat=ADC_RES; //保存A/D转换结果 } }
中国石油大学胜利学院
13/16 【例9-2】 编程实现利用STC12C5A60S2单片机ADC通道2采集外部模拟电压信号,10位精 度,采用中断方式进行转换,并将转换结果保存于30H和31H单元中。假设时钟频率为 18.432MHz。 解:按照编程要点进行初始化时,可设置ADRJ=1。在中断服务程序中读出ADC_RES寄存 器的值,屏蔽高6位后存入31H单元,读出ADC_RESL寄存器的值,存入30H单元。 汇编语言程序代码如下: $INCLUDE (STC12C5A.INC) ;包含STC12C5A60S2单片机寄存器定义文件 ADC_HI EQU 31H ;A/D转换结果高2位 ADC_LOW EQU 30H ;A/D转换结果低8位 ORG 0000H LJMP MAIN ORG 002BH LJMP ADC_ISR ;ADC中断服务程序入口 ORG 0050H MAIN: MOV SP, #70H ;设置堆栈 ORL ADC_CONTR, #80H ;开A/D转换电源,第一次使用时要打开内部模拟电源 MOV A, #20H LCALL DELAY ;开A/D转换电源后要加适当延时,1ms以内即可 MOV P1ASF,#04H ;设置P1.2的模拟量功能 MOV ADC_CONTR,#11100010B ;选择P1.2作为A/D转换通道 MOV A, #05H LCALL DELAY ;如果切换A/D转换通道,则需要加延时 ORL AUXR1,#04H ;设置ADC转换结果存储格式(ADRJ=1) ORL ADC_CONTR, #00001000B ;启动A/D转换 SETB EADC ;EADC=1, 开放ADC的中断控制位
中国石油大学胜利学院
SETB EA ;开放CPU总中断 SJMP $ ;循环等待中断 ADC_ISR: ;ADC中断服务程序入口 ANL ADC_CONTR, #11100111B ;将ADC_FLAG清零 MOV A, ADC_RES ;读取A/D转换结果高2位 ANL A,#03H ;屏蔽高6位 MOV ADC_HI, A ;保存A/D转换结果高2位 MOV A, ADC_RESL ;读取A/D转换结果低8位 MOV ADC_LOW, A ;保存A/D转换结果低8位 ORL ADC_CONTR, #00001000B ;重新启动A/D转换 RETI DELAY: ;延时子程序 PUSH 02 ;将寄存器组0 的 R2 入栈 PUSH 03 ;将寄存器组0 的 R3 入栈 PUSH 04 ;将寄存器组0 的 R4 入栈 MOV R4, A DELAY_LOOP0: ;DELAY_LOOP0循环延时200406个时钟周期 MOV R3, #200 ;2个时钟周期 Delay_LOOP1: ;DELAY_LOOP1循环延时1002个时钟周期 MOV R2, #249 ;2个时钟周期 DELAY_LOOP: DJNZ R2, DELAY_LOOP ;4个时钟周期 DJNZ R3, DELAY_LOOP1 ;4个时钟周期 DJNZ R4, DELAY_LOOP0 ;4个时钟周期 POP 04 POP 03 POP 02 RET END
14/16
中国石油大学胜利学院
15/16
C语言程序代码如下: #include “stc12c5a.h” //包含STC12C5A60S2单片机寄存器定义文件 unsigned char data adc_hi _at_ 0x31; //A/D转换结果变量高2位 unsigned char data adc_low _at_ 0x30; //A/D转换结果变量低8位 void main(void) { unsigned long i; ADC_CONTR|=0x80; //开A/D转换电源,第一次使用时要打开内部模拟电源 for (i=0;i<10000;i++); //适当延时 P1
ASF=0x04; //选择P1.2作为A/D转换通道 ADC_CONTR=0xE2; for (i=0;i<10000;i++); //适当延时 AUXR1 |=0x04; //ADRJ=1 ADC_CONTR|=0x08; //启动 A/D 转换 EADC=1; //EADC=1, 开放ADC的中断控制位 EA=1; //开放CPU总中断 while(1); //循环等待ADC中断 } void ADC_ISR (void) interrupt 5 // ADC中断函数 { ADC_CONTR&=0xE7; //将ADC_FLAG清0 adc_hi=ADC_RES&0x03; //保存A/D转换结果高2位 adc_low=ADC_RESL; //保存A/D转换结果低8位 ADC_CONTR|=0x08; //重新启动A/D转换 }
中国石油大学胜利学院
16/16
9.3
思考题
1、简述STC12C5A60S2单片机A/D转换器的结构特点。 2、利用STC12C5A60S2的A/D转换器,实现按键扫描功 能。电路图如图9-2所示。试编程实现之。 3、利用STC12C5A60S2单片机ADC通道0采集外部模拟 电压信号,10位精度,每10m转换一次,将转换结果保存 于30H单元中。同时,将转换结果上传到计算机中。假设 时钟频率为18.432MHz。通信参数为:9600,n,8,1。 试编写单片机的汇编语言程序和相应的C语言程序。计算 机的监视程序可以使用串口助手。
正在阅读:
第9章 模数转换器05-25
政府常年法律顾问合同02-25
承家风记家训知荣耻学做人(广播稿)06-25
自然美景图片02-09
乡村美景作文500字02-05
家乡美景我描绘02-13
美景花都项目内容06-06
家乡的美景作文04-01
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 模数转换器
- 1_7_1_5_二芳基庚_戊_二烯类姜黄素衍生物_类似物结构与活性的关系研究
- 《化工总控工》试题库
- 大黄鱼_Pseudosciaenacroc_省略_热激蛋白的基因克隆_原核表达及
- L-阿拉伯糖研究进展
- 45钢动态塑性本构参量与验证
- 第12_19届北京市大学生数学竞赛全部试题解答
- 2012年SCI收录中国期刊刊名
- 《创新创业》创业计划书
- 语法填空动词专练:涉及谓语时态语态,非谓语
- YY(歪歪)用法教程说明
- 2014财务会计专业精美个人求职简历模板-实习经历为亮点-word版可编辑 9
- 七年级语文复习检测题
- 2016年二建管理试题答案
- 米老师--第9讲-考试作文指导
- 法学研究方法初探
- 八年级地理上学期练习题
- 基于ASP_NET的电子商务网站设计与实现
- 《蝙蝠和雷达》《大自然的启示》(附答案)
- 变形金刚4车型解读
- 江苏省常州市教育学会学生学业水平监测高三数学Ⅰ试题(word版)含答案