帮忙看个AD转换程序

[复制链接]
3156|6
 楼主| mostever 发表于 2007-8-10 23:18 | 显示全部楼层 |阅读模式

51单片机和AD转换器max197的接口 
51的P0口与max197的数据口相连 
51的P2.0经反相器与max197的/CS相连 (即ADCS)

程序

uchar CH0DataL,CH0DataH; 

/* MAX197片外地址定义 */
#define adch0 XBYTE[0x0100]

sbit ADINT = P1^0;            // MAX197的中断输出位
sbit HBEN = P1^1;            // MAX197数据总线复用控制


main()
{
    EA = 1;
    EX0 = 1;        // 打开外部中断0
    
    /* 无限循环,等待外部中断0启动模数转换 */
    while(1);
}

/* 外部中断0服务子程序 */
void int0svr(void) interrupt 0 using 1
{
    EX0 = 0;        // 关闭外部中断0

    /* 向MAX197的控制字寄存器写入控制字0x40;PD1=0,PD0=1:正常工作,内部时钟模式;ACQMOD=0:内部控制采集;RNG=0,BIP=0:0~5V测量范围;A2=A1=A0=0:测量通道为0号 */
    adch0 = 0x40;

    /* 查询MAX197的中断输出ADINT,检测是否完成了信号的一次模数转换 */
    while (ADINT!=0)
    {
        //当转换完成时,先设置HBEN=0,即先读低位
        HBEN = 0;
    }

    CH0DataL = adch0;

    // 设置HBEN=1,再读高位
    HBEN = 1;
    CH0DataH = adch0;
    HBEN = 0;
    EX0 = 1;        // 打开外部中断0
}

问题:
1、adch0 (即XBYTE[0x0100])= 0x40;写到P2.0口还是写道P0口的? 
2、CH0DATAL=adch0;这个是把哪个口的数据赋到CH0DATAL里? 
3、片选/cs要的低电平是通过谁给的?
https://bbs.21ic.com/upfiles/img/20078/2007810231717870.jpg

https://bbs.21ic.com/upfiles/img/20078/2007810231434912.jpg
 
 

 
 楼主| mostever 发表于 2007-8-10 23:19 | 显示全部楼层

AD模块

guoqi 发表于 2007-8-11 12:49 | 显示全部楼层

哄哄

估计这个上面的片选,读,写信号都是自己用IO来模拟的!
你不是有原理图吗!
 楼主| mostever 发表于 2007-8-11 14:48 | 显示全部楼层

不明白的地方

1、adch0 (即XBYTE[0x0100])= 0x40;写到P2.0口还是写道P0口的? 
2、CH0DATAL=adch0;这个是把哪个口的数据赋到CH0DATAL里? 
3、片选/cs要的低电平是通过谁给的?
kukucat 发表于 2007-8-11 15:56 | 显示全部楼层

这是总线方式连接啊

1.XBYTE[0x0100])=中的“0x0100”是地址总线上数据,即P2口高地址,P0口低地址,当P2.0为‘1’时不就选中MAX197了啊,这样把值0x40送到了数据总线上了P0口(数据/低地址复用),也即把值给MAX197了啊!具体时序还是看下89C52的DATASHEET;
2.CH0DATAL=adch0;也是同样的道理
3.“0x0100”中的‘01’就是值P2口为‘00000001’即P2.0为高,选中MAX197
 楼主| mostever 发表于 2007-8-11 16:17 | 显示全部楼层

谢谢啊


另一般datasheet是不是全英语的?
kukucat 发表于 2007-8-11 19:59 | 显示全部楼层

差不多吧~~~

您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

10

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部