⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 x5045.c

📁 stc89c58的c51测试程序
💻 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 + -