查看: 1736|回复: 0
打印 上一主题 下一主题

51单片机读DM9000c的ID

[复制链接]
跳转到指定楼层
沙发
发表于 2016-5-28 21:55:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在网上买了个DM9000c的网络通信模块,老板给了读ID的程序,可我用这个程序读不到ID,不知道是怎么回事?
代码如下:
#include<reg51.h>

sbit nRSET = P3^0;
sbit CS = P2^1;
sbit IOW = P2^2;
sbit IOR = P2^3;
sbit CMD = P2^4;

sbit LED = P2^0;


void mdelay (int m)
{
        int i;
        for (;m > 0; m--)
                for (i = 0; i < 100; i++);
}

void dm9000_write (unsigned char reg, unsigned char date)
{
        P1 = reg;
        CS = 0;
        CMD = 0;
        IOR = 1;
        IOW = 0;
        mdelay(1);
        CS = 1;
        IOW = 1;
        mdelay(2);
        P1 = date;
        CS = 0;
        CMD = 0;
        IOR = 1;
        IOW = 0;
        mdelay(1);
        CS = 1;
        IOW = 1;
}

static unsigned char dm9000_read (unsigned char reg)
{
        unsigned char date = 0;

        P1 = reg;
        CS = 0;
        CMD = 0;
        IOR = 1;
        IOW = 0;
        CS = 1;
        IOW = 1;
        P1 = 0xFF;
        CS = 0;
        CMD = 1;
        IOW = 1;
        IOR = 0;
        date = P1;
        P1 = date;
        CS = 1;
        IOR = 1;

        return date;
}

void main (void)
{
        unsigned int date = 0;
        
        LED = 0;
        nRSET = 0;
        mdelay(5000);
        nRSET = 1;
        mdelay(5000);
        nRSET = 0;
        mdelay(5000);
        nRSET = 1;
        mdelay(5000);
        LED = 1;        
        mdelay(5000);
        date = dm9000_read (0x28);
        if (date == 0x46)
                date = dm9000_read (0x29);
        else
                while(1);
        if (date == 0x0A)
                date = dm9000_read (0x2A);
        else
                while(1);
        if (date == 0x00)
                date = dm9000_read (0x2B);
        else
                while (1);
        if (date == 0x90)
                CMD = ~CMD;
        else
                while (1);
                        
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入中科因仑

本版积分规则

快速回复 返回顶部 返回列表