📄 spi93c46.h
字号:
/*----------------------------------------------------------------------------
读写E2ROM函数
93c46 操作函数列表
ReadRom(unsigned char address) //读 address 中的内容
WriteRom(unsigned char address, int Word) //将 Word 写入address 单元
Erase(unsigned char address) // 擦除某一单元
------------------------------------------------------------------------------*/
/*---------- 注意事项----------------------------------------------------------
如果IO口与别的器件共用,在读、写之前应先将其复位为1.
例:
P1=0xff;
WriteRom(1,0x1234);
------------------------------------------------------------------------------*/
//#include "reg51.h"
//对从芯片而言
sbit SPI_CS =P1^0;
sbit SPI_SK =P1^1;
sbit SPI_DI =P3^0;
sbit SPI_DO =P3^1;
void start()
{ SPI_SK=0;
SPI_CS=1;
SPI_DI=1;
SPI_SK=1;
}
// SPI_SK上升沿数据有效 _/-
SPI_WriteBits(unsigned char byte,unsigned char num_of_bits)
{
unsigned char count;
byte=byte<<(8-num_of_bits);
for(count=0;count<num_of_bits;count++)
{ SPI_SK=0;
byte<<=1;
SPI_DI=CY;
SPI_SK=1;
}
}
// SPI_SK上升沿数据有效 _/-
unsigned char SPI_ReadByte()
{
unsigned char count,byte;
for(count=0;count<8;count++)
{ SPI_SK=0;
byte<<=1;
SPI_SK=1;
if(SPI_DO) byte++;
}
return(byte);
}
//93C46 查除/写入允许
void EWEN()
{ //EWENChar=0x30;
start();
SPI_WriteBits(0x00,2);
SPI_WriteBits(0x30,6);
SPI_CS=0;
}
void EWDS()
{ //EWDSChar=0x00;
start();
SPI_WriteBits(0x00,2);
SPI_WriteBits(0x00,6);
SPI_CS=0;
}
unsigned int ReadRom(unsigned char address) //读 address 中的内容
{
unsigned int RomWord=0;
start();
SPI_WriteBits(0x02,2);
SPI_WriteBits(address,6);
RomWord=SPI_ReadByte();
RomWord=RomWord<<8;
RomWord=RomWord | SPI_ReadByte();
SPI_CS=0; /////////
return(RomWord);
}
void WriteRom(unsigned char address, unsigned int Word)
{
EWEN(); //93C46 查除/写入允许
start(); //启动 93C46
SPI_WriteBits(0x01,2);
SPI_WriteBits(address,6);
//发送数据
SPI_WriteBits( (unsigned char)(Word>>8),8);
SPI_WriteBits( (unsigned char)(Word),8);
SPI_CS=0;
SPI_CS=1;
while(!SPI_DO);
SPI_CS=0;
EWDS();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -