标题: ADC0832模式转换模块的程序,请大神帮我看看有没有问题。 [打印本页]
作者: 水煮相对论 时间: 2017-4-3 09:47
标题: ADC0832模式转换模块的程序,请大神帮我看看有没有问题。
/***********读数模转换数据********************************************************/ //请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串行协议进行的 // 1 0 0 通道 // 1 1 1 通道 unsigned char ad0832read(bit SGL,bit ODD){ unsigned char i=0,value=0,value1=0; SCL=0; DO=1; CS=0; //开始 SCL=1; //第一个上升沿 SCL=0; DO=SGL; SCL=1; //第二个上升沿 SCL=0; DO=ODD; SCL=1; //第三个上升沿 DO=1; for(i=0;i<8;i++) { SCL=1; value<<=1; if(DO) value++; } for(i=0;i<8;i++) { //接收校验数据 value1<<=1; if(DO) value1+=0x80; SCL=1; SCL=0; } CS=1; SCL=1; return 0;}
作者: imxuheng 时间: 2017-4-3 21:09
天哪,这也太乱了,
这是前人的程序,我试过,没问题
sbit cs=P1^0;
sbit clk=P1^1;
sbit data_in=P1^2;
sbit data_out=P1^2;
unsigned char Get_AD_Result(unsigned char CH)
{
unsigned char i,test,adval;
adval=0x00;
test=0x00;
clk=0;
data_in=1;
_nop_();
cs=0;
_nop_();
clk=1;
_nop_();
if(CH==0x00)
{
clk=0;
data_in=1;
_nop_();
clk=1;
_nop_();
clk=0;
data_in=0;
_nop_();
clk=1;
_nop_();
}
else
{
clk=0;
data_in=1;
_nop_();
clk=1;
_nop_();
clk=1;
_nop_();
clk=0;
data_in=1;
_nop_();
clk=1;
_nop_();
}
clk=0;
data_in=1;
for(i=0;i<8;i++)
{
_nop_();
adval<<=1;
clk=1;
_nop_();
clk=0;
if(data_out)
adval|=0x01;
else
adval|=0x00;
}
for(i=0;i<8;i++)
{
test>>=1;
if(data_out)
test|=0x80;
else
test|=0x00;
_nop_();
clk=1;
_nop_();
clk=0;
}
_nop_();
cs=1;
data_out=1;
clk=1;
return (adval == test) ? test:0;
}
数据转换方法为
d = Get_AD_Result(0);
Display_Buffer[0]=d/51 +'0';//整数部分
Display_Buffer[2]=(d%51)*10/51 +'0';//一位数
Display_Buffer[3]=((d%51)*10%51)*10/51 +'0';//两位数
作者: zl2168 时间: 2017-4-4 15:48
本帖最后由 zl2168 于 2017-4-4 15:50 编辑
实例85 ADC0832串行A-D(TXD输出CLK)
先Proteus仿真一下,确认有效。
以上摘自张志良编著《单片机实验实训100例》 ISBN 978-7-5124-1603-1,北航社出版.。书中电路和程序设计有详细说明,程序语句条条有注解。
作者: zl2168 时间: 2017-4-4 15:51
本帖最后由 zl2168 于 2017-4-4 15:52 编辑
实例86 ADC0832串行A-D(虚拟CLK)
先Proteus仿真一下,确认有效。
以上摘自张志良编著《单片机实验实训100例》 ISBN 978-7-5124-1603-1,北航社出版.。书中电路和程序设计有详细说明,程序语句条条有注解。
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |