STC系列单片机中的STC89LE516AD/X2提供了8路8位精度的高速A/D转换器,位于P1口上,从而省去了片外ADC的麻烦。这8路ADC为电压输入型,可做按键扫描,电池电压检测,频谱检测等。ADC转换过程需要17个机器周期。通过对相关功能寄存器的适当配置,就可以控制其工作。下面就对相关功能寄存器进行介绍。
A/D转换寄存器总表:
(1) P1_ADC_EN:特殊功能寄存器
P1.x作为A/D转换输入通道来用允许特殊功能寄存器。相应位为“1”时,对应的P1.x口作为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
#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);
}
}
上一篇:STM32延时注意事项
下一篇:STC89C52RC单片机实现串口打印功能
推荐阅读最新更新时间:2024-03-16 16:25
设计资源 培训 开发板 精华推荐
- 赞一赞我国的青年:专访TI杯2019年国赛9支优秀队伍
- 学习赢京东卡 | 从12V电池及供电网络优化的角度分析电动汽车E/E架构的趋势
- 【EEWORLD第二十九届】2011年08月社区明星人物揭晓!
- 【报名赢小米手环、膳魔师保温杯等好礼】罗德与施瓦茨HDMI 1.4b/2.1 接口测试
- 有奖直播已结束【如何利用 TI MSPM0 汽车微控制器提高检测和控制性能】
- 【有奖征文】TI DSP 30 周年——聊聊DSP的那些事儿
- 瑞萨电子RL78/G14 demo板低价开团 19.9元包邮
- 点评《与Atmel SAM D21/R21的相遇、相识、相知(上)》,赢温暖新春礼
- 下资料 看视频 抽大奖!泰克汽车电子测试解决方案