STC系列单片机内部AD的应用
![](http://m.amcfsurvey.com/editerupload/fetch/20161101/325239_1_0.jpg)
下面一个例程演示STC89LE516AD/X2系列单片机的A/D转换功能。时钟11.0592MHz,转换结果以16进制形式输出到串行口,可以用串行口调试程序观察输出结果。(本代码摘自宏晶科技芯片手册,经作者调试可正常运行)。
#include
#include
//定义与ADC有关的特殊功能寄存器
sfrP1_ADC_EN = 0x97; //A/D转换功能允许寄存器
sfr ADC_CONTR = 0xC5; //A/D转换控制寄存器
sfr ADC_DA
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_DA
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_DA
}
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当前通道
评论