




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、增强型8051单片机实用开发技术1/16增强型8051单片机实用开发技术2/16 STC12C5A60S2单片机集成有单片机集成有8路路10位高速模数转换器位高速模数转换器ADC),速度可达到),速度可达到250KHz25万次万次/秒,可做温度检测、压秒,可做温度检测、压力检测、电池电压检测、按键扫描、频谱力检测、电池电压检测、按键扫描、频谱检测等。检测等。增强型8051单片机实用开发技术3/16 STC12C5A60S2 STC12C5A60S2单片机片内集成单片机片内集成8 8通道通道1010位模位模数转换器数转换器ADCADC)。)。ADCADC输入通道与输入通道与P1P1口复用,上口复
2、用,上电复位后电复位后P1P1口为弱上拉型口为弱上拉型I/OI/O口,用户可以通过口,用户可以通过软件设置将软件设置将8 8路中的任何一路设置为路中的任何一路设置为A/DA/D转换,不转换,不需作为需作为A/D A/D 使用的口可继续作为使用的口可继续作为I/OI/O口使用。口使用。增强型8051单片机实用开发技术4/169.1.1 模数转换器的结构模数转换器的结构STC12C5A60S2单片机的模数转换器由多路选择开关、比较器、逐次比较寄存器、单片机的模数转换器由多路选择开关、比较器、逐次比较寄存器、10位位ADC、转、转换结果寄存器换结果寄存器ADC_RES和和ADC_RESL以及以及AD
3、C控制寄存器控制寄存器ADC_CONTR构成。构成。ADC7/P1.7ADC6/P1.6ADC5/P1.5ADC4/P1.4ADC3/P1.3ADC2/P1.2ADC1/P1.1ADC0/P1.0比较器模拟输入信号通道选择开关10-bit DACA/D转换结果寄存器ADC_RES和ADC_RESLCHS2/CHS1/CHS0ADC_POWERSPEED1 SPEED0ADC_FLAG ADC_STARTCHS2CHS1CHS0逐次比较寄存器ADC控制寄存器ADC_CONTR增强型8051单片机实用开发技术5/16 STC12C5A60S2 STC12C5A60S2单片机单片机A/DA/D转换模
4、块的参考电压源是输入工作电压转换模块的参考电压源是输入工作电压VccVcc,所以一般不用外接参考,所以一般不用外接参考电压源。如三端稳压电路电压源。如三端稳压电路78057805的输出电压是的输出电压是5V5V,但实际电压可能是,但实际电压可能是4.88V4.88V到到4.96V4.96V,如果用户需要的,如果用户需要的精度比较高,可在应用产品出厂前将实际测出的工作电压值记录在单片机内部的精度比较高,可在应用产品出厂前将实际测出的工作电压值记录在单片机内部的EEPROMEEPROM里面,以供里面,以供程序校正使用。程序校正使用。 如果如果VccVcc不稳定例如电池供电的系统中,电池电压常常在不
5、稳定例如电池供电的系统中,电池电压常常在5.3V-4.2V5.3V-4.2V之间漂移),之间漂移), 则需则需要在要在8 8路路A/DA/D转换的一个通道外接一个稳定的参考电压源,来计算出此时的工作电压转换的一个通道外接一个稳定的参考电压源,来计算出此时的工作电压VccVcc,再计算出,再计算出其他几路其他几路A/DA/D转换通道的电压。例如,可在转换通道的电压。例如,可在ADCADC转换通道的第七通道外接一个转换通道的第七通道外接一个 1.25V 1.25V的基准参考电压的基准参考电压源,由此求出此时的工作电压源,由此求出此时的工作电压VccVcc,再计算出其它几路,再计算出其它几路A/DA
6、/D转换通道的电压。转换通道的电压。 增强型8051单片机实用开发技术6/161P1口模拟功能控制寄存器口模拟功能控制寄存器P1ASF地址为地址为9DH,复位值为,复位值为00H)2ADC控制寄存器控制寄存器ADC_CONTR地址为地址为BCH,复位值为,复位值为00H)CHS0CHS1CHS2ADC_STARTADC_FLAGSPEED0SPEED1ADC_POWER位名称位名称D0D1D2D3D4D5D6D7位号位号1ADC_POWER:ADC电源控制位。电源控制位。 0:关闭:关闭ADC电源。电源。 1:打开:打开ADC电源。电源。 2SPEED1、SPEED0:ADC转换速度控制位。各
7、种设置如表转换速度控制位。各种设置如表9-1所示。所示。3ADC_FLAG:A/D转换结束标志位。转换结束标志位。A/D转换完成后,转换完成后,ADC_FLAG = 1,要由软件,要由软件清清0。不管。不管A/D转换完成后由该位申请产生中断,还是由软件查询该标志位判断转换完成后由该位申请产生中断,还是由软件查询该标志位判断A/D转换是转换是否结束,当否结束,当A/D转换完成后,转换完成后,ADC_FLAG = 1,一定要软件清,一定要软件清0。4ADC_START:A/D转换启动控制位,转换启动控制位,ADC_START=1,开始转换;,开始转换;ADC_START=0,停止转换。停止转换。5
8、CHS2、CHS1、CHS0:模拟输入通道选择,如表:模拟输入通道选择,如表9-2所示。所示。P10ASFP11ASFP12ASFP13ASFP14ASFP15ASFP16ASFP17ASF位名称D0D1D2D3D4D5D6D7位号如果要使用相应口的模拟功能,需将如果要使用相应口的模拟功能,需将P1ASF特殊功能寄存器中的相应位置为特殊功能寄存器中的相应位置为1。如,若要使。如,若要使用用P1.6的模拟量功能,则需要将的模拟量功能,则需要将P16ASF设置为设置为1。(注意,。(注意,P1ASF寄存器不能位寻址,可以使寄存器不能位寻址,可以使用汇编语言指令用汇编语言指令ORL P1ASF, #
9、40H,也可以使用,也可以使用C语言语句语言语句P1ASF |= 0 x40;)增强型8051单片机实用开发技术7/163A/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位
10、位A/D转换结果的高转换结果的高8位放在位放在ADC_RES寄存器,低寄存器,低2位放在位放在ADC_RESL寄存器。存储格式如下:寄存器。存储格式如下:ADRJ=0AUXR1ADC_RES0ADC_RES1ADC_RESLADC_RES2ADC_RES3ADC_RES4ADC_RES5ADC_RES6ADC_RES7ADC_RES8ADC_RES9ADC_RESD0D1D2D3D4D5D6D7增强型8051单片机实用开发技术8/163A/D转换结果寄存器转换结果寄存器ADC_RES、ADC_RESL(2当当ADRJ=1时,时,10位位A/D转换结果的最高转换结果的最高2位放在位放在ADC_R
11、ES寄存器的低寄存器的低2位位,低,低8位放在位放在ADC_RESL寄存器。存储格式如下:寄存器。存储格式如下:ADRJ=1AUXR1ADC_RES0ADC_RES1ADC_RES2ADC_RES3ADC_RES4ADC_RES5ADC_RES6ADC_RES7ADC_RESLADC_RES8ADC_RES9ADC_RESD0D1D2D3D4D5D6D7模模/数转换结果计算公式如下:数转换结果计算公式如下:ADRJ = 0时,取时,取10位结果位结果 (ADC_RES7:0,ADC_RESL1:0) = 1024 Vin / VccADRJ = 0时,取时,取8位结果位结果 ADC_RES7:
12、0 = 256 Vin / VccADRJ = 1时,取时,取10位结果位结果 (ADC_RES1:0,ADC_RESL7:0) = 1024 Vin / VccVin为模拟输入通道输入电压,为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为为单片机实际工作电压,用单片机工作电压作为模拟参考电压。模拟参考电压。 4与与A/D转换中断有关的寄存器转换中断有关的寄存器 中断允许控制寄存器中断允许控制寄存器IE中的中的EADC位位D5位用于开放位用于开放ADC中断,中断,EA位位D7位用于开放位用于开放CPU中断;中断优先级寄存器中断;中断优先级寄存器IP中的中的PADC位位D
13、5位和位和IPH中的中的PADCH位位D5位用于设置位用于设置A/D中断的优先级。在中断的优先级。在中断服务程序中,要使用软件将中断服务程序中,要使用软件将A/D中断标志位中断标志位ADC_FLAG也是也是A/D转转换结束标志位清换结束标志位清0。 增强型8051单片机实用开发技术9/169.2 模数转换器的应用模数转换器的应用STC12C5A60S2单片机单片机ADC模块的使用编程要点如下:模块的使用编程要点如下:1打开打开ADC电源,第一次使用时要打开内部模拟电源设置电源,第一次使用时要打开内部模拟电源设置ADC_CONTR)。)。2适当延时,等内部模拟电源稳定。一般延时适当延时,等内部模
14、拟电源稳定。一般延时1ms以内即可。以内即可。3设置设置P1口中的相应口线作为口中的相应口线作为A/D转换通道设置转换通道设置P1ASF寄存器)。寄存器)。4选择选择ADC通道设置通道设置ADC_CONTR中的中的CHS2CHS0)。)。5根据需要设置转换结果存储格式设置根据需要设置转换结果存储格式设置AUXR1中的中的ADRJ位)。位)。6查询查询A/D转换结束标志转换结束标志ADC_FLAG,判断,判断A/D转换是否完成,若完成,则读出结转换是否完成,若完成,则读出结果结果保存在果结果保存在ADC_RES和和ADC_RESL寄存器中),并进行数据处理。如果是多通寄存器中),并进行数据处理。
15、如果是多通道模拟量进行转换,则更换道模拟量进行转换,则更换A/D转换通道后要适当延时,使输入电压稳定,延时量取转换通道后要适当延时,使输入电压稳定,延时量取20s200s即可,与输入电压源的内阻有关,如果输入电压信号源的内阻在即可,与输入电压源的内阻有关,如果输入电压信号源的内阻在10K以下,可不加延时;如果是单通道模拟量转换,则不需要更换以下,可不加延时;如果是单通道模拟量转换,则不需要更换A/D转换通道,也就不转换通道,也就不需要加延时。需要加延时。8若采用中断方式,还需进行中断设置若采用中断方式,还需进行中断设置EADC置置1,EA置置1)。)。9在中断服务程序中读取在中断服务程序中读取
16、ADC转换结果,并将转换结果,并将ADC中断请求标志中断请求标志ADC_FLAG清零。清零。 增强型8051单片机实用开发技术10/16【例【例9-1】编程实现利用】编程实现利用STC12C5A60S2单片机单片机ADC通道通道2采集外部模拟电压信号,采集外部模拟电压信号,8位精度,位精度,采用查询方式循环进行转换,并将转换结果保存于采用查询方式循环进行转换,并将转换结果保存于30H单元中。假设时钟频率为单元中。假设时钟频率为18.432MHz。 解:取解:取8位精度时,可设置位精度时,可设置ADRJ=0,直接使用转换结果寄存器,直接使用转换结果寄存器ADC_RES的值。由于复位后,的值。由于
17、复位后,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,
18、#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转换通道转换通道,则需要加延时则需要加延时 增强型8051单
19、片机实用开发技术11/16WAIT_AD: 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:
20、 ;延时子程序延时子程序 PUSH 02 ;将寄存器组将寄存器组0 的的 R2 入栈入栈 PUSH 03 ;将寄存器组将寄存器组0 的的 R3 入栈入栈 PUSH 04 ;将寄存器组将寄存器组0 的的 R4 入栈入栈 MOV R4, A DELAY_LOOP0: ;DELAY_LOOP0循环延时循环延时201906个时钟周期个时钟周期 MOV R3, #200 ;2个时钟周期个时钟周期Delay_LOOP1: ;DELAY_LOOP1循环延时循环延时1002个时钟周期个时钟周期 MOV R2, #249 ;2个时钟周期个时钟周期DELAY_LOOP: DJNZ R2, DELAY_LOOP ;
21、4个时钟周期个时钟周期 DJNZ R3, DELAY_LOOP1 ;4个时钟周期个时钟周期 DJNZ R4, DELAY_LOOP0 ;4个时钟周期个时钟周期 POP 04 POP 03 POP 02 RET END 增强型8051单片机实用开发技术12/16C语言程序代码如下:语言程序代码如下:#include “stc12c5a.h” /包含包含STC12C5A60S2单片机寄存器定义文件单片机寄存器定义文件unsigned char data adc_dat _at_ 0 x30; /A/D转换结果变量转换结果变量void main(void) unsigned long i; unsi
22、gned char status; ADC_CONTR|=0 x80; /开开A/D转换电源转换电源,第一次使用时要打开内部模拟电源第一次使用时要打开内部模拟电源 for (i=0;i10000;i+);/适当延时适当延时 P1ASF=0 x04; /选择选择P1.2作为作为A/D转换通道转换通道 ADC_CONTR=0 xE2; for (i=0;i10000;i+); /适当延时适当延时 while(1) /循环进行循环进行A/D 转换转换 ADC_CONTR|=0 x08; /重新启动重新启动 A/D 转换转换 status=0; while(status=0) /等待等待A/D转换结束
23、转换结束 status=ADC_CONTR&0 x10; ADC_CONTR&=0 xE7; /将将ADC_FLAG清零清零 adc_dat=ADC_RES; /保存保存A/D转换结果转换结果 增强型8051单片机实用开发技术13/16【例【例9-2】 编程实现利用编程实现利用STC12C5A60S2单片机单片机ADC通道通道2采集外部模拟电压信号,采集外部模拟电压信号,10位精位精度,采用中断方式进行转换,并将转换结果保存于度,采用中断方式进行转换,并将转换结果保存于30H和和31H单元中。假设时钟频率为单元中。假设时钟频率为18.432MHz。解:按照编程要点进行初始化时,
24、可设置解:按照编程要点进行初始化时,可设置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 OR
25、G 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转换通道转换通道
26、MOV A, #05H LCALL DELAY ;如果切换如果切换A/D转换通道转换通道,则需要加延时则需要加延时 ORL AUXR1,#04H ;设置设置ADC转换结果存储格式转换结果存储格式ADRJ=1) ORL ADC_CONTR, #00001000B ;启动启动A/D转换转换 SETB EADC ;EADC=1, 开放开放ADC的中断控制位的中断控制位 增强型8051单片机实用开发技术14/16 SETB EA ;开放开放CPU总中断总中断 SJMP $ ;循环等待中断循环等待中断ADC_ISR: ;ADC中断服务程序入口中断服务程序入口 ANL ADC_CONTR, #111001
27、11B ;将将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转换转换 RETIDELAY: ;延时子程序延时子程序 PUSH 02 ;将寄存器组将寄存器组0 的的 R2 入栈入栈 PUSH 03 ;将寄存
28、器组将寄存器组0 的的 R3 入栈入栈 PUSH 04 ;将寄存器组将寄存器组0 的的 R4 入栈入栈 MOV R4, A DELAY_LOOP0: ;DELAY_LOOP0循环延时循环延时201906个时钟周期个时钟周期 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, DE
29、LAY_LOOP0 ;4个时钟周期个时钟周期 POP 04 POP 03 POP 02 RET END增强型8051单片机实用开发技术15/16C语言程序代码如下:语言程序代码如下:#include “stc12c5a.h” /包含包含STC12C5A60S2单片机寄存器定义文件单片机寄存器定义文件unsigned char data adc_hi _at_ 0 x31; /A/D转换结果变量高转换结果变量高2位位unsigned char data adc_low _at_ 0 x30; /A/D转换结果变量低转换结果变量低8位位void main(void) unsigned long i; ADC_CONTR|=0 x80; /开开A/D转换电源转换电源,第一次使用时要打开内部模拟电源第一次使用时要打开内部模拟电源 for (i=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 保险行业档案管理培训
- 小学趣味排箫课件
- 出镜记者与主持人实务 课件 第一章 现场采访报道
- 生活垃圾焚烧锅炉培训
- 2025年超市父亲节活动方案
- 2025年秋季学期班主任工作方案演讲稿
- 伺服系统与工业机器人课件第5章 伺服系统的控制结构与模式
- 2025年银行年度工作方案工作思路
- 广告行业提案
- 配水员管理知识培训课件
- 四川省宜宾市2022-2023学年八年级下学期期末数学试题( 含答案解析 )
- XX项目阳光分包试点工作方案参考方案
- 创业带动就业补贴花名册
- 上海市中心商务写字楼清单
- 附九江学院第四届教工男子乒乓球单打赛程表
- 积极心理学-完整版教学课件
- 物资仓库防洪防汛应急预案
- 永磁同步电机矢量控制方法的研究毕业论文(设计)
- .三坐标测量员技能考核考试题答案
- 检验科知识题库+答案
- FMEA潜在失效模式及分析标准表格模版
评论
0/150
提交评论