📄 x5045.c
字号:
#include <regx51.h>
#include "intrins.h"
//void XOutByte(unsigned char val);
//unsigned char XInByte(void);
//void XWrEn(void);
//unsigned char XRdStatus(void);
//void XWrByte(unsigned int addr, unsigned char val);
//void XWrWord(unsigned int addr, unsigned int val);
//unsigned char XRdByte(unsigned int addr);
//unsigned int XRdWord(unsigned int addr);
//void ClrDog (void);
//void XWrStatus(unsigned char val);
#define uint unsigned int
#define uchar unsigned char
#define nop() _nop_();_nop_();
//#ifndef X5045
//sbit SI=P3^7;
//sbit SCK=P3^6;
//sbit SO=P3^5;
//sbit CS=P3^4;
//#endif
//#define WREN 0x06
//#define WRDI 0x04
//#define RDSR 0x05
//#define WRSR 0x01
//#define READ 0x03 //0000 A8 0 1 1
//#define WRITE 0x02 //0000 A8 0 1 0
//#define XSelect( ) SCK = 0; CS = 0 //WDT;打开X5045片选CS
//#define XDeselect( ) SCK = 0; CS = 1 //关闭X5045片选CS
//#define XWrWait( ) while ( XRdStatus() & 0x01) //WIP=0 退出 等待X5045写入完成
/*--------------------------------------
X5045收发SPI协议
--------------------------------------*/
/*void XOutByte(unsigned char val)
{
unsigned char i = 8;
ACC=val;
do{
SCK=0;
SI=(ACC&0x80);
SCK=1; //上升沿写入
}while(--i!=0);
SI=0;
}
unsigned char XInByte(void)
{
unsigned char i = 8;
SO=1;
do
{ SCK=1;
SCK=0;//下降沿输出
CY=SO;
CY= ACC & 0X80; //RLC A
}while(--i!=0);
return ACC;
}*/
/*--------------------------------------
软件使能X5045写操作
--------------------------------------*/
/*void XWrEn(void)
{
XSelect();//打开X5045片选
#ifdef WP
WP = 1;//硬件使能X5045写操作
#endif
XOutByte(WREN);//发送使能X5045写命令
XDeselect();//关闭X5045片选
}*/
/*--------------------------------------
读X5045状态
--------------------------------------*/
/*unsigned char XRdStatus(void)
{
unsigned char val;
XSelect();//打开X5045片选
XOutByte(RDSR);//发送读X5045状态命令
val = XInByte();//接收X5045状态数据
XDeselect();//关闭X5045片选
return val;
}*/
/*--------------------------------------
写X5045状态
--------------------------------------*/
/*void XWrStatus(unsigned char val)
{
XWrEn();
XSelect();//打开X5045片选
XOutByte(WRSR);//发送写X5045状态命令
_nop_();
XOutByte(val); //发送X5045状态数据
XDeselect();//关闭X5045片选
XWrWait();
}
/*--------------------------------------
软件禁止X5045写操作
void XWrDisable(void)
{
XSelect();//打开X5045片选
XOutByte(WRDI);//发送禁止X5045写命令
#ifdef WP
WP = 0;//硬件禁止X5045写操作
#endif
XDeselect();//关闭X5045片选
}
--------------------------------------*/
/*--------------------------------------
写X5045一个字节
--------------------------------------*/
/*void XWrByte(unsigned int addr, unsigned char val)
{
unsigned char temp;
temp = WRITE;
if ( ((unsigned char * )(&addr))[0] ) temp |= 8; //地址高8位有效时,发送A8
XWrEn();//使能X5045写操作
XSelect();//打开X5045片选
XOutByte(temp);//发送X5045写命令及高位地址
_nop_();
XOutByte(((unsigned char * )(&addr))[1]);//发送X5045写低位地址
_nop_();
XOutByte(val);//发送X5045写数据
XDeselect();//关闭X5045片选
XWrWait();//等待本次X5045写入完成
}
/*--------------------------------------
写X5045一个字
--------------------------------------*/
//void XWrWord(unsigned int addr, unsigned int val)
//{
//unsigned char temp;
// temp = WRITE;
// if ( ((unsigned char * )(&addr))[0] ) temp |= 8; //地址高8位有效时,发送A8
// XWrEn();//使能X5045写操作
// XSelect();//打开X5045片选
// XOutByte(temp);//发送X5045写命令及高位地址
// XOutByte(((unsigned char * )(&addr))[1]);//发送X5045写低位地址
// XOutByte(((unsigned char * )(&val))[1]);//发送X5045写低位数据
// XOutByte(((unsigned char * )(&val))[0]);//发送X5045写高位数据
// XDeselect();//关闭X5045片选
// XWrWait();//等待本次X5045写入完成
//}
/*--------------------------------------
读X5045一个字节
--------------------------------------*/
/*unsigned char XRdByte(unsigned int addr)
{
unsigned char val;
XSelect();//打开X5045片选
val = READ;
if ( ((unsigned char * )(&addr))[0] ) val |= 8; //地址高8位有效时,发送A8
XOutByte(val);//发送X5045读命令及高位地址
_nop_();
XOutByte(((unsigned char * )(&addr))[1]);//发送X5045低8位地址
_nop_();
val= XInByte();//接收X5045读数据
// _nop_();
XDeselect();//关闭X5045片选
return( val );
}
/*--------------------------------------
读X5045一个字
--------------------------------------*/
//unsigned int XRdWord(unsigned int addr)
//{
//unsigned char val;
// XSelect();//打开X5045片选
// val = READ;
// if ( ((unsigned char * )(&addr))[0] ) val |= 8; //地址高8位有效时,发送A8
// XOutByte(val);//发送X5045读命令及高位地址
// XOutByte(addr & 0xff);//发送X5045读低位地址
// val = XInByte();//接收X5045读低位数据
// addr = XInByte();//接收X5045读高位数据
// XDeselect();//关闭X5045片选
// addr <<= 8;
// addr |= val;
// return addr;
//}
/*--------------------------------------
清除x5045 WDT
--------------------------------------*/
/*void ClrDog (void)
{
CS=0;
_nop_();
CS=1;
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -