个人项目整理
#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
xucun915_925777961 2011-4-29 00:59
用户321598 2011-4-28 19:18