STC单片机内置ADC的使用方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STC单片机内置ADC的使用方法
STC系列单片机中的STC89LE516AD/X2提供了8路8位精度的高速A/D转换器,位于P1口上,从而省去了片外ADC的麻烦。
这8路ADC为电压输入型,可做按键扫描,电池电压检测,频谱检测等。
ADC转换过程需要17个机器周期。
通过对相关功能寄存器的适当配置,就可以控制其工作。
下面就对相关功能寄存器进行介绍。
A/D转换寄存器总表:
寄存器
地
址
名称7 6 5 4 3 2 1 0 初
始初
P1_A DC_EN
9
7H
允许
P1.x
成为
A/D口
P
17
P
16
P
15
P
14
P
13
P
12
P
11
P
10
000
000
ADC _
CON TR
C
5H
A/D
转换
控制
寄存器
---A
DC_
FLA
G
A
DC_
STA
RT
C
HS2
C
HS1
C
HS0
x
xx0
000
ADC _DATA
C
6H
A/D
转换
结果
寄存器
--------0
000
000
(1)P1_ADC_EN:特殊功能寄存器
P1.x作为A/D转换输入通道来用允许特殊功能寄存器。
相应位为“1”时,对应的P1.x口作为A/D转换使用,内部上拉电阻自动断开。
(2)ADC_CONTR:特殊功能寄存器
CHS2/CHS1/CHS0是模拟输入通道选择,CHS2/CHS1/CHS0的取值如下表所示:
C HS2
C
HS1
C
HS0
模拟输入通道选择
0 0 0 选择P1.0为A/D输入0 0 1 选择P1.1为A/D输入0 1 0 选择P1.2为A/D输入
0 1 1 选择P1.3为A/D输入
1 0 0 选择P1.4为A/D输入
1 0 1 选择P1.5为A/D输入
1 1 0 选择P1.6为A/D输入
1 1 1 选择P1.7为A/D输入
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 <reg51.h>
#include <stc_adc.h>
/*
-------------------------------------------------
此程序用以说明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);
}
}。