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

[复制链接]
1064|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

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