一段DM9000A读写程序

2019-07-15 22:44发布

最近用C8051F340外接12M晶振,之后倍频到48MHZ做一个以太网传输的项目,现在遇到点问题,DM9000A的读写函数不正确,测试用例是:写完一个地址,之后把这个地址里的值读出来,但是每次都读不出来....
//-------------------------------------------------
//函数名:void IOW(unsigned char uc_data,unsigned char flag)
//输入:  uc_data:地址或数据;flag=1写数据,=0写寄存器
//输出:   NULL
//返回值:  NULL
//作者:
//修改:
//备注:   写寄存器  
//-------------------------------------------------
void IOW(unsigned char uc_data,unsigned char flag)
{
       
        P4 = uc_data;
        DCMD = flag;
        DCS = 0;
        DRE =1;
        DWD =0;
        Delay(10);
        DWD=1;
        DCS =1;
       
}

//-------------------------------------------------
//函数名:unsigned char IOR(unsigned char uc_add)
//输入:  uc_add:地址
//输出:   NULL
//返回值:  uc_add地址的数据
//作者:
//修改:
//备注:   读寄存器
//-------------------------------------------------
unsigned char IOR(unsigned char flag)
{
        unsigned char uc_data;
        P4=0Xff;
        DCS =1;
        DWD=1;
        Delay(10);
        DCS =0;
        DCMD = flag;                //数据操作
        DWD=1;
        DRE =0;                        //读数据
        uc_data=P4;
        Delay(10);
        DRE=1;
        DCS=1;
       
        return uc_data;
}
//----------------------------------------------
//函数名:void Write_Reg(unsigned char uc_reg,unsigned char uc_data)
//输入: reg:寄存器,uc_data:要写入寄存器的值
//输出: NULL
//返回值:         NULL
//作者:
//修改:
//备注:  写函数
//----------------------------------------------
void Write_Reg(unsigned char uc_reg,unsigned char uc_data)
{

   IOW(uc_reg,0) ;          //写地址
   Delay_us(10);
   IOW(uc_data,1);    //写数据

}

//----------------------------------------------
//函数名:unsigned char Read_Reg(unsigned char uc_reg)
//输入:  uc_reg: 读内容的指针
//输出:   NULL
//返回值:        reg指针的内容
//作者:
//修改:
//备注:   读函数操作
//----------------------------------------------
unsigned char Read_Reg(unsigned char uc_reg)
{
        unsigned char uc_data=0;

        IOW(uc_reg,0);
        Delay(10);
        uc_data=IOR(1)        ;
        return uc_data;

}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。