导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→求救~5045读全是ff...[weichen2643]

 *第42418篇: 求救~5045读全是ff...

  
楼 主:weichen2643 2006年8月1日16:53
 求救~5045读全是ff...
调5045调了两天了,自己写的程序,网上拷的程序通通都读出来是ff,连读标志寄存器也是,也加了很多的延迟,电路就是面包板上搭建的,只接了个5045,实在是不知道什么地方出错了,求大家帮忙.

我写的程序如下,大家帮忙看看有什么问题吧.
#include   <REG52.H>  
#include   <INTRINS.H>  
#define uchar unsigned char
#define uint unsigned int
#define NOP _nop_();_nop_();_nop_();
#define STATUS_REG 0x00
#define MAX_POLL  99
//-----------x5045指令-----------------//
#define WREN 0x06 //写允许
#define WRDI 0x04 //写禁止
#define RDSR 0x05 //读状态寄存器
#define WRSR 0x01 //写状态寄存器
#define READ0 0x03 //读数据
#define WRITE0 0x02 //写数据
#define READ1 0x0B //读数据
#define WRITE1 0x0A //写数据
//-----------SPI通讯接口-----------------//
sbit SI=P1^5;
sbit SCK=P1^6;
sbit SO=P1^4;
sbit CS=P1^3;


void wren_cmd();
void wrdi_cmd();
void wrsr_cmd();
uchar rdsr_cmd();
uchar byte_read(uchar add,bit block);
void byte_write(uchar add,uchar bytedata,bit block);
void rst_wdog();
void wip_poll();
void outbyt(uchar bytedata);
uchar inbyt();

//**********************WREN************************
void wren_cmd()
{
    SCK=0;
    CS=0;
    outbyt(WREN);
    SCK=0;
    CS=1;
}

//**********************WRDI************************
void wrdi_cmd()
{
    SCK=0;
    CS=0;
    outbyt(WRDI);
    SCK=0;
    CS=1;
}

//**********************WRSR************************
void wrsr_cmd()
{
    SCK=0;
    CS=0;
    outbyt(WRSR);
    _nop_();_nop_();_nop_();
    outbyt(STATUS_REG);
    _nop_();_nop_();_nop_();
    SCK=0;
    CS=1;
    wip_poll();
}

//**********************RDSR************************
uchar rdsr_cmd()
{
    uchar buff;
    SCK=0;
    CS=0;
    outbyt(RDSR);
    _nop_();_nop_();_nop_();
    buff=inbyt();
    _nop_();_nop_();_nop_();
    SCK=0;
    CS=1;
    return buff;    
}

//**********************byte_WR*********************
void byte_write(uchar add,uchar bytedata,bit block)
{
    SCK=0;
    CS=0;
    if(!block)
    {
        outbyt(WRITE0);
    }
    else
    {
        outbyt(WRITE1);
    }
    _nop_();_nop_();_nop_();
    outbyt(add);
    _nop_();_nop_();_nop_();
    outbyt(bytedata);
    _nop_();_nop_();_nop_();
    SCK=0;
    CS=1;
    wip_poll();
}

//**********************byte_RD*********************
uchar byte_read(uchar add,bit block)
{
    uchar buff;
    SCK=0;
    CS=0;
    if(!block)
    {
        outbyt(READ0);
    }
    else
    {
        outbyt(READ0);
    }
    _nop_();_nop_();_nop_();
    outbyt(add);
    _nop_();_nop_();_nop_();
    buff=inbyt();
    _nop_();_nop_();_nop_();
    SCK=0;
    CS=1;
    return(buff);    
}

//**********************rst_dog*******************
void rst_wdog()
{
    CS=0;
    _nop_();_nop_();_nop_();
    CS=1;    
}

//**********************wip_poll******************
void wip_poll()
{
    uchar i;
    for(i=0;i  <MAX_POLL;i++)
    {
        if(rdsr_cmd()&0x01)
            continue;
        return;
    }
}

//**********************outbyt********************
void outbyt(uchar bytedata)
{
    uchar i;
    for(i=0;i  <8;i++)
    {
        SCK=0;
        _nop_();_nop_();_nop_();
        if(bytedata&0x80)
            SI=1;
        else
            SI=0;
        SCK=1;
        _nop_();_nop_();_nop_();
        bytedata=bytedata  <  <1;                
    }   
    SI=0;
}

//**********************inbyt********************
uchar inbyt()
{
    uchar buff,i;
    SCK=1;
    _nop_();_nop_();_nop_();
    SCK=0;
    _nop_();_nop_();_nop_();
    buff=buff|(uchar)(SO);
    for(i=0;i  <7;i++)
    {
        buff=buff  <  <1;
        SCK=1;
        _nop_();_nop_();_nop_();
        SCK=0;
        _nop_();_nop_();_nop_();
        buff=buff|(uchar)(SO);
    }
    return buff;                               
}

//**********************test********************测试读它的状态寄存器,结果读出ff...
main()
{
    uchar aa;
    aa=rdsr_cmd();
    _nop_();_nop_();_nop_();
}
   
   


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:请教:M41T0时钟芯片使用方法

[下一篇主题]:求救