这是我写的:
调用法:val=getadval(通道号);
转换前要先初始化。初始化函数为:initadc();
#include "stc12c5410ad.h"
#define uchar unsigned char
void initadc();
uchar getadval(uchar);
void initadc()
{
uchar i,j;
adc_contr|=0x80;
for(i=20;i>0;i--) for(j=250;j>0;j--);
}
uchar getadval(uchar ch)
{
uchar lastp1m0,lastp1m1,i,m_mask;
code uchar mtab[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
lastp1m0=p1m0;
lastp1m1=p1m1;
ch&=0x07;
m_mask=mtab[ch];
p1m0|=m_mask;
p1m1|=m_mask;
adc_contr&=0xf0;
adc_contr|=ch;
for(i=250;i>0;i--); //待输入电压稳定后开始转换
adc_contr|=0x08;
while((adc_contr&0x10)==0);
adc_contr&=0xe7;
p1m0=lastp1m0;
p1m1=lastp1m1;
return adc_data;
}