打印

帮忙看个AD转换程序

[复制链接]
2117|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要的低电平是通过谁给的?

使用特权

评论回复
5
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

使用特权

评论回复
6
mostever|  楼主 | 2007-8-11 16:17 | 只看该作者

谢谢啊


另一般datasheet是不是全英语的?

使用特权

评论回复
7
kukucat| | 2007-8-11 19:59 | 只看该作者

差不多吧~~~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

10

帖子

0

粉丝