嵌入式 > 嵌入式开发 > 详情

STC系列单片机内部AD的应用

发布时间:2020-08-24 发布时间:
|

本文引用地址:/zixunimg/eepwimg/www.eepw.com.cn/article/201612/325239.htm

下面一个例程演示STC89LE516AD/X2系列单片机的A/D转换功能。时钟11.0592MHz,转换结果以16进制形式输出到串行口,可以用串行口调试程序观察输出结果。(本代码摘自宏晶科技芯片手册,经作者调试可正常运行)。

#include

#include

//定义与ADC有关的特殊功能寄存器

sfr P1_ADC_EN = 0x97; //A/D转换功能允许寄存器

sfr ADC_CONTR = 0xC5; //A/D转换控制寄存器

sfr ADC_DATA = 0xC6;//A/D转换结果寄存器

typedef unsigned char INT8U;

typedef unsigned int INT16U;

void delay(INT8U delay_time) //延时函数

{

INT8U n;

INT16U m;

for (n=0;n

{

for(m=0;m<10000;m++);

}

}

INT8U get_AD_result(INT8U channel)

{

INT8U AD_finished = 0; //存储A/D转换标志

ADC_DATA = 0;

ADC_CONTR = channel; //选择A/D当前通道

delay(1);//使输入电压达到稳定

ADC_CONTR |= 0x08; //0000,1000令ADC_START = 1,启动A/D转换

AD_finished = 0;

while ( AD_finished == 0 ) //等待A/D转换结束

{

AD_finished = (ADC_CONTR & 0x10); //0001,0000, ADC_FLAG ==1测试A/D转换结束否

}

ADC_CONTR &= 0xF7; //1111,0111令ADC_START = 0,关闭A/D转换,

return (ADC_DATA); //返回A/D转换结果

}

void main()

{

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

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

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

get_AD_result(0); //P1.0为A/D当前通道

get_AD_result(1); //P1.1为A/D当前通道



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
什么是总线压限