下面一个例程演示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_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当时通道