您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 关于STC15F2K60S2的AD应用
STC15F2K60S2芯片A/D转换器的应用1.目的在工业控制过程中,它是控制系统与微机之间不可缺少的接口方式。要实现自动控制,就要检测有关参数,A/D转换器,把检测到的电压或电流信号(模拟量)转换成计算机能够识别的等效数字量,这些数字量经过计算机处理后输出结果,通过D/A转换器变为电压或电流信号,送到执行机构,达到控制某种过程的目的。2.与A/D转换相关的寄存器与STC15系列单片机A/D转换相关的寄存器列于下表所示。符号描述地址位地址及其符号MSBLSB复位值P1ASFP1AnalogFunctionConfigureregister9DHP17ASFP16ASFP15ASFP14ASFP13ASFP12ASFP11ASFP10ASF00000000BADC_CONTRADCControlRegisterBCHADC_POWERSPEED1SPEED0ADC_FLAGADC_STARTCHS2CHS1CHS000000000BADC_RESADCResulthighBDH00000000BADC_RESLADCResultlowBEH00000000BCLK_DIVPCON2时钟分频寄存器97HMCKO_S1MCKO_S0ADRJTx_RxTx2_Rx2CLKS2CLKS1CLKS00000x000BIEInterruptEnableA8HEAELVDEADCESET1EX1ET0EX000000000BIPInterruptPriorityLowB8HPPCAPLVDPADCPSPT1PX1PT0PX000000000B2.1.P1口模拟功能控制寄存器P1ASFSTC15系列单片机的A/D转换口在P1口(P1.7-P1.0),有8路10位高速A/D转换器,速度可达到300KHz(30万次/秒)。8路电压输入型A/D,可做温度检测、电池电压检测、按键扫描、频谱检测等。上电复位后P1口为弱上拉型I/O口,用户可以通过软件设置将8路中的任何一路设置为A/D装换,不需作为A/D使用的P1口可继续作为I/O口使用(建议只作为输入)。需作为A/D使用的口需先将P1ASF特殊功能寄存器中的相应位置为‘1’,将相应的口设置为模拟功能。P1ASF寄存器的格式如下:P1ASF:P1口模拟功能控制寄存器(该寄存器是只写寄存器,读无效)P1ASF[7:0]P1.x的功能其中P1ASF寄存器地址为:[9DH](不能进行位寻址)P1ASF.0=1P1.0口作为模拟功能A/D使用P1ASF.1=1P1.1口作为模拟功能A/D使用P1ASF.2=1P1.2口作为模拟功能A/D使用P1ASF.3=1P1.3口作为模拟功能A/D使用P1ASF.4=1P1.4口作为模拟功能A/D使用SFRnameAdessBitB7B6B5B4B3B2B1B0P1ASF9DHNameP17ASFP16ASFP15ASFP14ASFP13ASFP12ASFP11ASFP10ASFP1ASF.5=1P1.5口作为模拟功能A/D使用P1ASF.6=1P1.6口作为模拟功能A/D使用P1ASF.7=1P1.7口作为模拟功能A/D使用2.2.ADC_CONTRADC_CONTR寄存器的格式如下:ADC_CONTR:ADC控制寄存器SFRnameAdessBitB7B6B5B4B3B2B1B0ADC_CONTRBCHnameADC_POWERSPEED1SPEED0ADC_FLAGADC_STARTCHS2CHS1CHS0对ADC_CONTR寄存器进行操作,建议直接用MOV赋值语句,不要用‘与’和‘或’语句。ADC_POWER:ADC电源控制位。0:关闭ADC电源;1:打开A/D转换器电源。建议进入空闲模式和掉电模式前,将ADC电源关闭,即ADC_POWER=0,可降低功耗。启动A/D转换前一定要确认A/D电源已打开,A/D转换结束后关闭A/D电源可降低功耗,也可不关闭。初次打开内部A/D转换模拟电源,需适当延时,等内部模拟电源稳定后,再启动A/D转换。建议启动A/D转换后,在A/D转换结束之前,不改变任何I/O口的状态,有利于高精度A/D转换,如能将定时器/串行口/中断系统关闭更好。SPEED1,SPEED0:模数转换器转换速度控制位SPEED1SPEED0A/D转换所需时间1190个时钟周期转换一次,CPU工作频率21MHz时,A/D转换速度约300MHz10180个时钟周期转换一次01360个时钟周期转换一次00540个时钟周期转换一次ADC_FLAG:模数转换器转换结束标志位,当A/D转换完成后,ADC_FLAG=1,要由软件清0。不管是A/D转换完成后由该位申请产生中断,还是由软件查询该标志位A/D转换是否结束,当A/D转换完成后,ADC_FLAG=1,一定要软件清0。ADC_START:模数转换器(ADC)转换启动控制位,设置为“1”时,开始转换,转换结束后为0。CHS2/CHS1/CHS0:模拟输入通道选择,CHS2/CHS1/CHS0CHS2CHS1CHS0AnalogChannelSelect000选择P1.0作为A/D输入来用001选择P1.1作为A/D输入来用010选择P1.2作为A/D输入来用011选择P1.3作为A/D输入来用100选择P1.4作为A/D输入来用101选择P1.5作为A/D输入来用110选择P1.6作为A/D输入来用111选择P1.7作为A/D输入来用2.3.ADC转换结果调整寄存器位—ADRJADC转换结果调整控制位——ADRJ位于寄存器CLK_DIV/PCON中,用于控制ADC转换结果存放的位置。MnemonicAddNameB7B6B5B4B3B2B1B0ResetValueCLK_DIV98H时钟寄存器MCKO_S1MCKO_S0ADRJTx_RxTx2_Rx2CLKS2CLKS1CLKS00000,x000ADRJ:ADC转换结果调整0:ADC_RES[7:0]存放高8位ADC结果,ADC_RESL[1:0]存放低2位ADC结果1:ADC_RES[1:0]存放高2位ADC结果,ADC_RESL[7:0]存放低8位ADC结果2.4.A/D转换结果寄存器ADC_RES、ADC_RESL特殊功能寄存器ADC_RES和ADC_RESL寄存器用于保存A/D转换结果,其格式如下:AUXRI寄存器的ADRJ位是A/D转换结果寄存器(ADC_RES、ADC_RESL)的数据格式调整控制位。当ADRJ=0时,10位A/D转换结果的高8位存放在ADC_RES中,低2位存放在ADC_RESL的低2位中。MnemonicAddNameB7B6B5B4B3B2B1B0ADC_RESBDhA/D转换结果寄存器高8位ADC_RES7ADC_RES6ADC_RES5ADC_RES4ADC_RES3ADC_RES2ADC_RES3ADC_RES2ADC_RESBDhA/D转换结果寄存器低2位------ADC_RES1ADC_RES0CLK_DIV97H时钟分频寄存器ADRJ=0此时,如果用户需取完整10位结果,按下面公式计算:Vin10-bitA/DConversionResult:(ADC_RES[7:0],ADC_RESL1:0])=1024*Vcc如果用户只需取8位结果,按下面公式计算:Vin8-bitA/DConversionResult:(ADC_RES[7:0])=256*Vcc式中,Vin为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为模拟参考电压。当ADRJ=1时,10位A/D转换结果的高2位存放在ADC_RES的低2位中,低8位存放在ADC_RESL中。此时,如果用户需取完整10位结果,按下面公式计算:Vin10-bitA/DConversionResult:(ADC_RES[1:0],ADC_RESL[7:0])=1024*Vcc式中,Vin为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为模拟参考电压。2.5.中断允许寄存器IEIE:中断允许寄存器(可位寻址)SFRnameAdessBitB7B6B5B4B3B2B1B0IEA8HNameEAELVDEADCESET1EX1ET0EX0EA:CPU的中断开放标志EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。MnemonicAddNameB7B6B5B4B3B2B1B0ADC_RESBDhA/D转换结果寄存器高ADC_RESBDhA/D转换结果寄存器低CLK_DIV97H时钟分频寄存器MCKO_S1MCKO_S0ADRJTx_RxTX2_Rx2CLKS2CLKS1CLKS0MnemonicAddNameB7B6B5B4B3B2B1B0ADC_RESBDhA/D转换结果寄存器高2位------ADC_RES9ADC_RES8ADC_RESBDhA/D转换结果寄存器低8位ADC_RES7ADC_RES6ADC_RES5ADC_RES4ADC_RES3ADC_RES2ADC_RES1ADC_RES0CLK_DIV97H时钟分频寄存器ADRJ=1EA的作用是使中断允许形成多级控制。即各中断源首先受EA控制;其次还受各中断源自己的中断允许控制位控制。EADC:A/D转换中断允许位EADC=1,允许A/D转换中断,EADC=0,禁止A/D转换中断。2.6.中断优先级控制寄存器IPIP:中断优先级控制寄存器(可位寻址)SFRnameAdessBitB7B6B5B4B3B2B1B0IPB8HNamePPCAPLVDPADCPSPT1PX1PT0PX0PADC:A/D转换中断优先级控制位。当PADC=0时,A/D转换中断为最低优先级中断(优先级0)当PADC=1时,A/D转换中断为最高优先级中断(优先级1)3.A/D转换器的结构ADC_POWERCHS2SPEED1ADC_FLAGADC_STARTCHS0CHS1SPEED0A/D转换结果寄存器:ADC_RESandADC_RESL逐次比较寄存器10-BitDAC比较器模拟输入信号通道选择开关CHS2/CHS1/CHS0ADC7/P1.7ADC5/P1.5ADC1/P1.1ADC2/P1.2ADC6/P1.6ADC3/P1.3ADC4/P1.4ADC0/P1.04.程序/****************************************************///利用STC12C5A60S2AD转换,实现温度计//函数名:main.c/****************************************************/#includereg51.h#include10bit_adc.c#defineucharunsignedchar/*宏定义用uchar代替unsignedchar*/#defineuintunsignedint/*宏定义用uint代替unsignedint*/codeucharseven_seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};ucharcp0;uintcp1,AD_DAT;sbitP3_4=P3^4;sbitP3_5=P3^5;sbitP3_6=P3^6;/************Timer0中断服务函数***************/voidtimer0_isr(void)interrupt1{TH0=(65536-1000)/256;//重装初值TL0=(65536-1000)%256;//重装初值cp1++;//中断1次,变量加1if(cp1=1000)//1秒到了{cp1=0;AD_DAT=get_adc();AD_DAT=(790-AD_DAT)*0.095;}P2=0xff;P3=0xff;switch(cp0){case0:P2=seven_seg[AD_DAT%100%10];P3_6=0;break;case1:P2=seven
本文标题:关于STC15F2K60S2的AD应用
链接地址:https://www.777doc.com/doc-2665642 .html