51的AD转换电路,要好使的
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/30 06:27:28
51的AD转换电路,要好使的
51的AD转换电路,要好使的
51的AD转换电路,要好使的
可以用ADC0832,函数程序
//
//读取ADC0832转换值函数
//入口函数:channel选择通道
uchar ADC0832_Read(uchar channel)
{
uchar i = 0;
uchar tmp = 0; //高字节数据
uchar tmp1 = 0; //低字节数据
//开始标志位
ADC0832_DODI = 1;
_nop_(); _nop_();
ADC0832_CS = 0; //片选信号
ADC0832_CLK = 1;
_nop_(); _nop_();
ADC0832_CLK = 0;
_nop_(); _nop_();
//选择通道
switch(channel)
{
case 0: //通道0
ADC0832_DODI = 1; //SGL = 1;
_nop_(); _nop_();
ADC0832_CLK = 1;
_nop_(); _nop_();
ADC0832_CLK = 0;
_nop_(); _nop_();
ADC0832_DODI = 0; //ODD = 0;
_nop_(); _nop_();
ADC0832_CLK = 1;
_nop_(); _nop_();
ADC0832_CLK = 0;
_nop_(); _nop_();
break;
case 1: //通道1
ADC0832_DODI = 1; //SGL = 1;
_nop_(); _nop_();
ADC0832_CLK = 1;
_nop_(); _nop_();
ADC0832_CLK = 0;
_nop_(); _nop_();
ADC0832_DODI = 0; //ODD = 1;
_nop_(); _nop_();
ADC0832_CLK = 1;
_nop_(); _nop_();
ADC0832_CLK = 0;
_nop_(); _nop_();
break;
default:
break;
}
ADC0832_DODI = 1;
_nop_(); _nop_();
//读取8位转换数值
for(i=0;i<8;i++)
{
ADC0832_CLK = 1; //产生同步时钟
_nop_(); _nop_();
ADC0832_CLK = 0;
_nop_(); _nop_();
if(ADC0832_DODI) //按位获取8位数据
{
tmp |= 0x01; //从低位获取
}
else
{
tmp &= 0xfe;
}
if(i<7)
{
tmp <<= 1; //移位
}
}
tmp1 = tmp & 0x01;
tmp1 <<= 6;
for(i=0;i<7;i++) //获取7位校验数据
{
ADC0832_CLK = 1;
_nop_(); _nop_();
ADC0832_CLK = 0;
_nop_(); _nop_();
if(ADC0832_DODI)
{
tmp1 |= 0x80;
}
else
{
tmp1 &= 0x7f;
}
if(i<6)
{
tmp1 >>= 1;
}
}
ADC0832_CS = 1; //禁止ADC0832
if(tmp == tmp1) //当高字节与低字节相同时,该值有效
{
return tmp; //返回数值
}
}