打印

请帮我看看这个51模拟SPI的程序出了什么问题

[复制链接]
895|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jyynl|  楼主 | 2014-4-8 18:14 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jyynl 于 2014-4-8 18:52 编辑

时序图如下




用的是51单片机做MCU,模拟SPI,11.0592的晶振

我写的程序如下


//写入控制寄存器
void Write_CommandReg(uchar add,uchar com)
{
        
        uchar i;
        uchar mark;
        cs=0;
        mark=0x80;
        _nop_();
        for(i=0;i<8;i++)
        {
                sck=0;
                if(add&mark)
                {
                        MOSI=1;
                }
                else
                {
                        MOSI=0;
                }
                sck=1;
                mark>>=1;
        }
        mark=0x80;
        for(i=0;i<8;i++)
        {
                sck=0;
                if(com&mark)
                {
                        MOSI=1;
                }
                else
                {
                        MOSI=0;
                }

                sck=1;
                mark>>=1;
        }
        _nop_();
        cs=1;
}

//读取控制寄存器
uchar Read_CommandReg(uchar add)
{
        
        uchar i;
        uchar mark;
        uchar readdata;
        cs=0;
        mark=0x80;
        readdata=0;
        _nop_();
        for(i=0;i<8;i++)
        {
                sck=0;
                if(add&mark)
                {
                        MOSI=1;
                }
                else
                {
                        MOSI=0;
                }
                sck=1;
                mark>>=1;
        }
        _nop_();
        for(i=0;i<8;i++)
        {
                readdata<<=1;        
                sck=0;
                sck=1;
                if(MISO)
                {
                        readdata|=0x01;
                }               
        }
        _nop_();
        cs=1;
        return(readdata);
        
}



//写入数据寄存器
void Write_DataReg(uchar add,uint dat)
{
        
        uchar i;
        uchar mark;
        uint marklong;
        cs=0;
        mark=0x80;
        marklong=0x8000;
        _nop_();
        for(i=0;i<8;i++)
        {
                sck=0;
                if(add&mark)
                {
                        MOSI=1;
                }
                else
                {
                        MOSI=0;
                }
                sck=1;
                mark>>=1;
        }

        for(i=0;i<16;i++)
        {
                sck=0;
                if(dat&marklong)
                {
                        MOSI=1;
                }
                else
                {
                        MOSI=0;
                }

                sck=1;
                marklong>>=1;
        }
        _nop_();
        cs=1;
}

//读取数据寄存器
uint Read_DataReg(uchar add)
{

        uchar i;
        uchar mark;
        uint readdata;
        cs=0;
        mark=0x80;
        readdata=0;
        _nop_();
        for(i=0;i<8;i++)
        {
                sck=0;
                if(add&mark)
                {
                        MOSI=1;
                }
                else
                {
                        MOSI=0;
                }
                sck=1;
                mark>>=1;
        }
        _nop_();
        for(i=0;i<16;i++)
        {
                readdata<<=1;        
                sck=0;
                sck=1;
                if(MISO)
                {
                        readdata|=0x0001;
                }               
        }
        _nop_();
        cs=1;
        return(readdata);
        
}

希望各位高手给指正一下


相关帖子

沙发
jyynl|  楼主 | 2014-4-8 22:00 | 只看该作者
没人帮帮忙吗……

使用特权

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

本版积分规则

26

主题

102

帖子

0

粉丝