当前位置:首页 > 技术学院 > 技术前线
[导读]STC系列单片机中的STC89LE516AD/X2提供了8路8位精度的高速A/D转换器,位于P1口上,从而省去了片外ADC的麻烦。这8路ADC为电压输入型,可做按键扫描,电池电压检测,频谱检测等。ADC转换过程需要17个机器周期。通过对相关功能寄存器的适当配置,就可以控制其工作。下面就对相关功能寄存器进行介绍。

A/D转换寄存器总表:


stc12c5a60s2单片机ad转换

(1) P1_ADC_EN:特殊功能寄存器

P1.x作为A/D转换输入通道来用允许特殊功能寄存器。相应位为“1”时,对应的P1.x口作为A/D转换使用,内部上拉电阻自动断开。


stc12c5a60s2单片机ad转换

ADC_START是模拟/数字转换(ADC)启动控制位,设置为1时,开始转换。

ADC_FLAG是模拟/数字转换结束标志位,当A/D转换完成后,ADC_FLAG=1。

(3) ADC_DATA: A/D转换结果特殊功能寄存器

模拟/数字转换结果计算公式为 结果=256×Vin/Vcc

Vin是模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为模拟参考电压。

内置ADC的使用例程:

STC_ADC.h:

sfr P1_ADC_EN=0x97;

sfr ADC_CONTR=0xc5;

sfr ADC_DATA=0xc6;

int GetAD(unsigned char channel)//channel为要取的通道号(0~7)

{

unsigned char AD_finished=0;

ADC_DATA=0;

ADC_CONTR=channel;

ADC_CONTR|=0x08;

while(!AD_finished)

AD_finished=(ADC_CONTR&0x10);

ADC_CONTR&=0xF7;

return (ADC_DATA);

}

void AD_Init(unsigned char ADin)// ADC 初始化,ADin为八位2进制数,分别对应AD7~0,置1代表打开此路

{

P1=P1|ADin;//要设置为A/D转换的P1.x口,先设为高

P1_ADC_EN=ADin;

}

_main.c:

#include

#include

/*

-------------------------------------------------

此程序用以说明STC单片机ADC的使用方法

-------------------------------------------------

*/

void delay(unsigned time)

{

while(time--);

}

void main()

{

AD_Init(0x63);//0110,0011,要设置为A/D转换的P1.x口,先设置为高

//0110,0011,P1的P1.0,P1.1,P1.5,P1.6设置为A/D转换输入脚

//断开P1.0,P1.1,P1.5,P1.6内部上拉电阻

while(1)

{

P2=GetAD(0);

delay(10000);

P2=GetAD(1);

delay(10000);

P2=GetAD(5);

delay(10000);

P2=GetAD(6);

delay(10000);

}

}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭