在书中看了一些问题,不太理解,求帮忙解答一下

2019-07-15 18:16发布

#include <absacc.h>
#include <reg52.h>
#define uchar unsigned char
#define IN0 XBYTE[0x7ff8]         /*设置AD0809的通道0地址*/ \不明白的地方1
sbit ad_busy = P3^3;                 /*即EOC状态*/

void ad0809(uchar idata * x)      /*采样结果放指针中的A/D采集函数*/
{
    uchar i;
    uchar xdata * ad_adr;
    ad_adr = &IN0;
    for(i=0;i<8;i++)                 /*处理8通道*/
    {   
        *ad_adr = 0;                 /*启动转换*/         //不明白的地方2
        i = i;                               /*延时等待EOC变低*/
        i = i;
        while(ad_busy == 0);    /*查询等待转换结束*/
        x = *ad_adr;            /*存转换结果*/
        ad_adr++;                  /*下一通道*/
    }
}

int main(void)
{
    static uchar idata ad[10];
    ad0809(ad);                   /*采样AD0809通道的值*/

    return 0;
}


问题:
不明白的地方1:为什么IN0的地址是这一个?
不明白的地方2:指针指向的是IN0的地址,*ad_adr指的是IN0这个地址的内容?具体指的是什么?为什                           么启动转换可以转化成这种形式?START的启动不是低电平—高电平—低电平吗?

电路图片:



捕获.PNG
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
阿信509
1楼-- · 2019-07-15 19:25
你要选中0809就要有地址线和读写信号的配合,你看看那个oe端怎么才能选中呢?
woodmice
2楼-- · 2019-07-15 20:49
 精彩回答 2  元偷偷看……
新时代工程师
3楼-- · 2019-07-16 01:04
woodmice 发表于 2014-10-23 10:18
不明白的地方1:为什么IN0的地址是这一个?
从原理图看,要使0809动作,P2.7必须为0,同时通道地址由P0以写 ...

关于不明白地方二:你的意思是不是当单片机执行语句*ad_adr = 0的时序给了AD0809 启动(START)的一个启动时序?
woodmice
4楼-- · 2019-07-16 02:58
新时代工程师 发表于 2014-10-23 16:29
关于不明白地方二:你的意思是不是当单片机执行语句*ad_adr = 0的时序给了AD0809 启动(START)的一个启动 ...


是,正确。
并且同时也将通道地址也锁存进了0809

一周热门 更多>