📄 93c66.c
字号:
//存储芯片93C66驱动程序
#include "reg51.h"
#include "intrins.h"
typedef unsigned char Byte;
typedef unsigned int Word;
typedef unsigned long Dword;
typedef bit Bool ;
sbit CS_PIN = P1^0;
sbit XSCK_PIN = P1^1;
sbit XSDO_PIN = P1^2;
sbit XSDI_PIN = P1^3;
Bool Fg_Timeout;
void DelayX1ms(Byte count)
{
Byte i, j, k;
for(i=0; i<count; i++)
for(j=0; j<40; j++)
for(k=0; k<120; k++)
;
}
void Xbus_Delay(void)
{
Byte i;
for(i=0; i<10; i++)
;
}
void WR_3wire(Byte value)
{
Byte i;
for(i=0; i<8; i++)
{
if(value&0x08)
{
XSDO_PIN = 1;
}
else
{
XSDO_PIN = 0;
}
XSCK_PIN = 1;
Xbus_Delay();
XSCK_PIN = 0;
Xbus_Delay();
}
}
void Ewds_ROM(void)
{
CS_PIN = 1;
WR_3wire(0x04);
WR_3wire(0x00);
CS_PIN = 0;
}
void Write_ROM(Byte adr, Byte value);
{
CS_PIN = 1;
WR_3wire(0x05);
WR_3wire(adr);
WR_3wire(value);
CS_PIN = 0;
XSCK_PIN = 0;
XSDO_PIN = 0;
DelayX1ms(10);
if(XSDI_PIN == 0) //if always DO ="0"
{
; //indicate is still progress
}
}
void Erase_ROM(Byte adr);
{
CS_PIN = 1;
WR_3wire(0x07);
WR_3wire(adr);
CS_PIN = 0;
XSCK_PIN = 0;
XSDO_PIN = 0;
DelayX1ms(10);
if(XSDI_PIN == 0) //if always DO ="0"
{
; //indicate is still progress
}
}
void Erase_ROM1(Byte adr);
{
Word i;
CS_PIN = 1;
WR_3wire(0x07);
WR_3wire(adr);
CS_PIN = 0;
XSCK_PIN = 0;
XSDO_PIN = 0;
DelayX1ms(10);
Fg_Timeout = 1;
for(i=0; i<1000; i++)
{
if(XSDI_PIN != 0)
{
Fg_Timeout = 0;
break;
}
}
}
void Ewen_ROM(void)
{
CS_PIN = 1;
WR_3wire(0x04);
WR_3wire(0xc0);
CS_PIN = 0;
Xbus_Delay();
}
void Eep_WriteData(Byte adr, Byte value)
{
CS_PIN = 1;
Ewen_ROM();
Erase_ROM(adr);
Write_ROM(adr, value);
Ewds_ROM();
CS_PIN = 0;
XSCK_PIN = 0;
}
//测试写入128个数据
void Push_Eeprom93c66(void)
{
Byte adr, value = 0;
for(adr=0; adr<128; adr++)
{
CS_PIN = 1;
Eep_WriteData(adr, value);
CS_PIN = 0;
XSCK_PIN = 0;
value++;
}
}
Byte ReceiveByte(void)
{
Byte i;
Byte value = 0;
//Receive byte (MSB first)
for(i=0; i<8; i++)
{
XSCK_PIN = 1;
Xbus_Delay();
XSCK_PIN = 0;
value << 1;
if(XSDI_PIN)
{
value |= 0x01;
}
}
Xbus_Delay();
return value;
}
//将93c66内地址数据读出来
Byte ReadROM(Byte adr)
{
Byte value;
XSCK_PIN = 0;
XSDO_PIN = 0;
WR_3wire(0x06);
WR_3wire(adr);
WR_3wire(0x04);
WR_3wire(0xc0);
value = ReceiveByte();
return value;
}
//测试将93c66内128个数据读出来
void Pop_Eeprom93c66(void)
{
Byte adr;
Byte *Buff;
for(adr=0; adr<128; adr++)
{
CS_PIN = 1;
Buff = ReadROM(adr);
CS_PIN = 0;
XSCK_PIN = 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -