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

📄 5045.c

📁 x5045三线制总线读写程序,通过keil C验证OK!
💻 C
字号:

#include "spi.h"
#include "serial.h"
#include <intrins.h>
#define NOP()  // _nop_();_nop_()

//看门狗写使能子程序
  void wren_dog(void)
  {
	SPI_SCK=0;
	SPI_CS=0;
	in_byte(WREN);
	SPI_SCK=0;
	SPI_CS=1;
  }

//看门狗写禁止子程序
  void wrdi_dog(void)
 {
	SPI_SCK=0;
	SPI_CS=0;
	in_byte(WRDI);
	SPI_SCK=0;
	SPI_CS=1;
  }



//写状态寄存器
  void wrsr_dog(unsigned char status_reg)
 {
	SPI_SCK=0;
	SPI_CS=0;
	in_byte(WRSR);
	in_byte(status_reg);
	SPI_SCK=0;
	SPI_CS=1;
	wip_poll();
  }


//读状态寄存器
 unsigned char rdsr_dog(void)
 {
	unsigned char reg1;
	SPI_SCK=0;
	SPI_CS=0;
	in_byte(RDSR);
	reg1=out_byte();
	SPI_SCK=0;
	SPI_CS=1;
	return(reg1);
 }

//字节读
//H,地址高字节;L地址低字节;data_dog读出的数据
  unsigned char byte_read(unsigned char H,unsigned char L)
 {
	unsigned char data_dog,add=0;
	SPI_SCK=0;
	SPI_CS=0;
	add=H<<3;
	add|=READ;//READ;
	in_byte(add);
	add=L;
	in_byte(add);
	data_dog=out_byte();
	SPI_SCK=0;
	SPI_CS=1;
	return(data_dog);
  }
//字节写
//H,地址高字节;L地址低字节;D写入的数据
  void byte_write(unsigned char H,unsigned char L,unsigned char D)
 {
	unsigned char data_dog,add=0;
	SPI_SCK=0;
	SPI_CS=0;
	add=H<<3;
	add|=WRTE;//WRTE;
	in_byte(add);
	add=L;
	in_byte(add);
	data_dog=D;
	in_byte(data_dog);
	SPI_SCK=0;
	SPI_CS=1;
	wip_poll();
  }

//复位看门狗子程序
  void rest_dog(void)
 {
	SPI_CS=0;
	SPI_CS=1;
  }

//检验写操作是否结束。
  unsigned char wip_poll(void)
 {
	unsigned char i;
	unsigned char wip;
	for(i=0xff;i>=1;i--) 
	{
		wip=rdsr_dog();
		wip&=0x01;
		if(wip==0) break;
    }
   return(wip);
 }

//单字节指令或数据写入X25045
//在SPI_SI线上输入的数据在SPI_SCK的上升沿被锁存。
  void in_byte(unsigned char byt)
  {
	unsigned char i;
	for(i=0;i<8;i++)
	{
		SPI_SCK=0; 
        SPI_SI=byt&0x80;
		SPI_SCK=1;
		byt<<=1; 
	}
    SPI_SI=0;
  }

//单字节数据从X25045读到单片机
//数据由SPI_SCK的下降沿输出到SPI_SO线上。
  unsigned char out_byte(void)
  {
	unsigned char i;
	unsigned char byt=0;
	for(i=0;i<8;i++)
	{
		byt=byt<<1;
		SPI_SCK=1;
		SPI_SCK=0;
		byt|=SPI_SO;
 	}
	return (byt);
  }	 


/**************************************************/
void main(void)
{
  unsigned char D; 
  unsigned char add_H=0x01,add_L=0x00;
  unsigned char ucDATA=0x11;
  init_serial();
  while(1)
	{
		//wren_dog();
  		//wrsr_dog(0);
  		//wren_dog();	
  		byte_write(add_H,(add_L++),(ucDATA++));
		D=byte_read(add_H,add_L); 
	    PutChar(D);	 
     }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -