原创 个人项目整理:X5045操作函数(C51)

2011-4-28 09:10 3935 10 12 分类: MCU/ 嵌入式
个人项目整理

#include <INTRINS.h>

//X5045的引脚

sbit X5045_CS_WDI = P1^0;
sbit X5045_SO = P1^1;
sbit X5045_SI=P1^3;
sbit X5045_SCK = P1^2;
sbit X5045_WP=P3^2;
unsigned char bdata flag;
sbit X5045bit=flag^0;            //X5045读出写入数据位

#define WREN     0x06
#define WRDI      0x04
#define RDSR    0x05
#define WRSR    0x01
#define READH   0x0B
#define READL   0x03
#define READ    0x03
#define WRITEH  0x0A
#define WRITEL  0x02
#define WRITE   0x02

/****************************************************************************************
*NAME:       void WR_X5045(WRData)
*FUNCTION:   写数据到X5045函数
*Parameter:  一个字节数据
*RETURN:     无返回值
*****************************************************************************************/
void WR_X5045(WRData)//将8位数据串行放入X5045中
{
 unsigned char data i;
 
 for(i=0;i<8;i++)
  {
   X5045_SCK=0;
   _nop_();
   flag|=((WRData>>(7-i))&0x01);
   X5045_SI=X5045bit;
   X5045bit=0;
   _nop_();
   X5045_SCK=1;
  }
}
/****************************************************************************************
*NAME:       unsigned char RD_X5045(void)
*FUNCTION:   从X5045读数据函数
*Parameter:  无参数
*RETURN:     返回一个读取的字节数据
*****************************************************************************************/
unsigned char RD_X5045(void)//从X5045中串行读8位数据
{
 unsigned char data i,temp,ReadData;
 temp=0;
 ReadData=0;
 for(i=0;i<8;i++)
  {
   X5045_SCK=0;
   _nop_();
   temp=X5045_SO;
   temp=temp<<(7-i);
   ReadData+=temp;
   temp=0;
   _nop_();
   X5045_SCK=1;
  }
 return ReadData;
}
/****************************************************************************************
*NAME:       void X5045_init(unsigned char OverTime,unsigned char ProtectRange)
*FUNCTION:   X5045初始化函数
*Parameter:  OverTime:看门狗定时溢出时间设置(0:1.4s,1:600ms,2:200ms,3:禁止);ProtectRange:保护地址空间设置(0:不保护,1:0x0180-0x01ff,2:0x0100-0x01ff,3:0x0000-0x01ff)
*RETURN:     无返回值
*****************************************************************************************/
void X5045_init(unsigned char OverTime,unsigned char ProtectRange)
{
 X5045_CS_WDI = 1;
 _nop_();
 X5045_CS_WDI = 0;
 _nop_();
 X5045_WP=0;//写保护
 _nop_();
 X5045_WP=1;//可写
 _nop_();
 X5045_CS_WDI=0;
 _nop_();
 WR_X5045(0x06);//WREN,使能写操作
 X5045_CS_WDI=1;
 _nop_();
 X5045_CS_WDI=0;
 WR_X5045(0x01);//WRSR,写状态寄存器
 WR_X5045((OverTime<<4)+(ProtectRange<<2));//写数据到状态寄存器
 X5045_CS_WDI=1;
 _nop_();
 X5045_WP=0;//写保护
}
/****************************************************************************************
*NAME:       unsigned char  X5045(unsigned char code5045,unsigned char addr5045,unsigned char data5045)
*FUNCTION:   X5045操作函数
*Parameter:  code5045:操作代码,addr5045:操作地址,data5045:操作数据
*RETURN:     从X5045中读出的数据
*****************************************************************************************/
unsigned char X5045(unsigned char code5045,unsigned char addr5045,unsigned char data5045)
{
 unsigned char data i,TempData;
 TempData=0;
 switch(code5045&0x07)
   {
     case WREN://使能写操作
         X5045_CS_WDI=0;
         X5045_WP=1;
        WR_X5045(0x06);
        X5045_CS_WDI=1;
        break;
     case WRDI://禁止写操作
        X5045_CS_WDI=0;     
        X5045_WP=0;
        X5045_CS_WDI=1;
        break;
     case RDSR://读状态寄存器
        X5045_CS_WDI=0;
        WR_X5045(0x05);
        TempData=RD_X5045();
        X5045_CS_WDI=1;
        break;
     case WRSR://写状态寄存器
        X5045_CS_WDI=0;
        X5045_WP=1;
        WR_X5045(0x06);
        X5045_CS_WDI=1;
        _nop_();
        X5045_CS_WDI=0;
        WR_X5045(0x01);
        WR_X5045(data5045);
        X5045_WP=0;
        X5045_CS_WDI=1;
        break;
     case READ://从选定的地址开始读存储器阵列的数据
        X5045_CS_WDI=1;
       _nop_();
       _nop_();
       X5045_CS_WDI=0;
       _nop_();
       _nop_();               
       X5045_CS_WDI=1;
       _nop_();
       _nop_();
       X5045_CS_WDI=0;      
        WR_X5045(code5045);
        WR_X5045(addr5045);
        TempData=RD_X5045();
        X5045_CS_WDI=1;
        break;
     case WRITE://从选定的地址开始写入数据至存储器阵列
        X5045_WP=1;
        _nop_();
        X5045_CS_WDI=0;
        _nop_();
        WR_X5045(0x06);//使能写操作
        X5045_CS_WDI=1;
        _nop_();
        X5045_CS_WDI=0;
        WR_X5045(0x01);//写状态寄存器
        WR_X5045(0x00);//状态寄存器全为0,存储器去保护
        X5045_CS_WDI=1;
        _nop_();     
        X5045_WP=0;
        delay(10000)//延时约10ms
        X5045_CS_WDI=1;
        _nop_();
        X5045_WP=1;
        _nop_();
        X5045_CS_WDI=0;
        WR_X5045(6);//使能写操作                                    
        X5045_CS_WDI=1;   
        _nop_();
        X5045_CS_WDI=0;
        WR_X5045(code5045);//写操作
        WR_X5045(addr5045);
        WR_X5045(data5045);
        X5045_CS_WDI=1;
        _nop_();
        _nop_();
        X5045_WP=0;
        break;
   }
  return TempData;

}


X5045英文数据手册:attachment download

X5045中文数据手册(力源):attachment download


青山Blog http://blog.ednchina.com/qingshan

文章评论2条评论)

登录后参与讨论

xucun915_925777961 2011-4-29 00:59

不错,来学习学习^_^

用户321598 2011-4-28 19:18

hehe
相关推荐阅读
用户377227 2013-02-20 17:40
OLED SSD1303显示驱动 for MSP430
RiTdisplay公司128*64点阵OLED(RGS101280640W003) SSD1303显示驱动 for MSP430,文中仅列出驱动接口、控制文档和函数声明,详细的源代码请看附件,开...
用户377227 2012-07-30 17:41
CPLD/FPGA的UART接口设计之系统时钟(晶振)和波特率关系探讨
        UART(Universal Asynchronous Receiver Transmitter,通用异步收发器)是一种广泛使用的异步串行数据通信协议。目前大多数MCU、串口通信I...
用户377227 2012-05-21 21:40
单色8*8点阵LED让人易困惑的那些事
       一般到市面上买单色8*8点阵LED,店家会问要共阳的还是共阴的,很多初学者搞不清楚什么是共阳的,什么是共阴的。         其实单色点阵LED本无所谓共阳还是共阴,如此命名多...
用户377227 2011-07-21 17:21
随笔:关于PL2303型号命名之乱
    使用PL2303这款芯片制作USB转串口时,相信很多人对PL2303生产商都有一样的困惑和不满,即尽管引脚定义和使用方式都有很大的不同,可是芯片仍采用相同的型号来命名(只是在后面加个版本号)。...
用户377227 2011-07-21 15:44
转:单片机C语言中_nop_函数的使用及C语言的延时计算
本文转载自http://hi.baidu.com/xiaowu191/blog/item/ca9b0b2913cd12f7e7cd4039.html,原作者不详,在此向作者致谢意。本文转载自网络标准的...
用户377227 2011-06-21 21:18
美科学家研制出世界上第一束生物激光(转载)
本文转自:http://news.sciencenet.cn/sbhtmlnews/2011/6/245486.html?id=245486,在此向原作者致谢意。作者:赵路 来源:科学时报 发布...
我要评论
2
10
关闭 站长推荐上一条 /2 下一条