求助:麻烦帮我解读一下ADC0832转换程序,谢谢

2019-07-16 06:34发布

uchar ADC0832(uchar channel)//写入3为串行数据命令来决定工作方式:cho单端输入
{uchar i=0;
uchar j;
uint dat=0;
uchar ndat=0;
if(channel==0)channel=2;
if(channel==1)channel=3;
ADDI=1;        //DI为1
    _nop_();    //延时两个指令周期
    _nop_();
    ADCS=0;     //拉低cs,选通;确定数据输入开始
    _nop_();
    _nop_();
    ADCLK=1;     //时钟信号为高
    _nop_();
    _nop_();
    ADCLK=0;     //时钟信号为低,此处为第一个下降沿
    _nop_();
    _nop_();
    ADCLK=1;     //时钟信号为高
    ADDI=channel&0x1; // 和0x01相位与,将channel的高七位变成0得到最低位
    _nop_();          //如果是0,ADDI为0,如果是1,ADDI是1
    _nop_();
    ADCLK=0;     //时钟信号为低,此处为第二个下降沿
    _nop_();
    _nop_();
    ADCLK=1;      //时钟信号为高
    ADDI=(channel>>1)&0x1; //先右移一位,再与;如果是0,ADDI是1,如果是1,ADDI是1
    _nop_();
    _nop_();
    ADCLK=0;       //时钟信号为低,此处为第三个下降沿
    ADDI=1;        //DI为1
    _nop_();
    _nop_();
    dat=0;
    for(i=0;i<8;i++)                                  就是这下面的看不懂
    {
        dat|=ADDO;//收DO口数据

        ADCLK=1;
        _nop_();
        _nop_();
        ADCLK=0;//形成一次时钟脉冲

        _nop_();
        _nop_();
        dat<<=1; //左移一位。如果是0,ADDO为0,如果是1,ADDO为2,如果是2,ADDO为4,
        if(i==7) dat|=ADDO;
    }   
    for(i=0;i<8;i++)
    {
        j=0;
        j=j|ADDO;//收DO数据
         ADCLK=1;
        _nop_();
        _nop_();
        ADCLK=0;//形成一次时钟脉冲

        _nop_();
        _nop_();
        j=j<<7;
        ndat=ndat|j;
        if(i<7)ndat>>=1;
    }
    ADCS=1;//拉高CS端
    ADCLK=0;//拉低CLK端
    ADDO=1;//拉高数据端回到初始状态
    dat<<=8;
    dat|=ndat;
    return(dat);            //return ad k         
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
diangongshi
1楼-- · 2019-07-16 07:31
下面的就是串行接收数据,一次一位数据,8次是一个字节数据。
sww5203028
2楼-- · 2019-07-16 13:30
diangongshi 发表于 2011-12-8 14:00
下面的就是串行接收数据,一次一位数据,8次是一个字节数据。

能把循环的过程简单的展示一下吗?
diangongshi
3楼-- · 2019-07-16 19:24
 精彩回答 2  元偷偷看……
sailor_yan
4楼-- · 2019-07-16 21:29
楼上的程序很专业,楼主发的程序一看就是很业余的!
sww5203028
5楼-- · 2019-07-16 22:50
diangongshi 发表于 2011-12-10 23:41
你好,看一下我的这个程序吧,很简单的,看下你就明白了,有哪里不懂的我们再讨论。
/****************** ...

谢谢,确实你的程序思路非常清楚,也很好懂
电子狂客
6楼-- · 2019-07-17 03:31
diangongshi 发表于 2011-12-10 23:41
你好,看一下我的这个程序吧,很简单的,看下你就明白了,有哪里不懂的我们再讨论。
/****************** ...

你好!我用您的程序在proteus中仿真,无论选择哪个通道。显示的都是通道1的值。很晕啊。什么问题?
谢谢!

一周热门 更多>