📄 93lc66b.c
字号:
#include "indash.h"
#define _ROM ((char *) 0x020000)
void EEPROM_Init()
{
EEPROM_CS = 0;
EEPROM_CLK = 0;
EEPROM_DI = 1;
EEPROM_DO = 1;
if (EEPROM_Receive_20_Bit(OP_READ, EE_CHECK_SUM_ADDR) != CHECK_SUM_VALUE)
{
EEPROM_Transmit_12_Bit(OP_ERAL, 0x100); /* clear all */
EEPROM_Transmit_12_Bit(OP_EWEN, 0x180);
EEPROM_Transmit_20_Bit(OP_WRITE, EE_CHECK_SUM_ADDR, CHECK_SUM_VALUE);
Initial_Value();
}
EEPROM_Transmit_12_Bit(OP_EWEN, 0x180);
Recall_Initial_Value();
}
void EEPROM_Clock()
{
EEPROM_CLK = 0; /* COMMON clk */
EEPROM_CLK = 0;
EEPROM_CLK = 0;
EEPROM_CLK = 0;
EEPROM_CLK = 0;
EEPROM_CLK = 1;
EEPROM_CLK = 1;
EEPROM_CLK = 1;
EEPROM_CLK = 1;
EEPROM_CLK = 1;
EEPROM_CLK = 0;
}
void EEPROM_Transmit_Byte(unsigned char value)
{
static char cnt = 0;
cnt++;
if (cnt < 8)
EEPROM_Transmit_Byte(value / 2);
else
cnt = 0;
EEPROM_DI = value % 2;
EEPROM_Clock();
}
void EEPROM_Transmit_Addr_Byte(unsigned int value)
{
static char cnt = 0;
cnt++;
if (cnt < 9)
EEPROM_Transmit_Addr_Byte(value / 2);
else
cnt = 0;
EEPROM_DI = value % 2;
EEPROM_Clock();
}
void EEPROM_Transmit_20_Bit(char opcode, unsigned int addr, unsigned char value)
{
EEPROM_CLK = 0;
EEPROM_CS = 1;
/* start 1 bit */
EEPROM_DI = 1;
EEPROM_Clock();
/* opcode 2 bit */
EEPROM_DI = opcode / 2;
EEPROM_Clock();
EEPROM_DI = opcode % 2;
EEPROM_Clock();
/* address 9 bit */
EEPROM_Transmit_Addr_Byte(addr);
/* data 8 bit */
EEPROM_Transmit_Byte(value);
EEPROM_CS = 0;
/* wait EEPROM finish */
if (opcode != OP_WRAL)
Delay(800); /* delay 6ms */
else
Delay(1500); /* delay 15ms */
}
unsigned char EEPROM_Receive_20_Bit(char opcode, unsigned int addr)
{
char i;
unsigned char value = 0;
EEPROM_CLK = 0;
EEPROM_CS = 1;
/* start 1 bit */
EEPROM_DI = 1;
EEPROM_Clock();
/* opcode 2 bit*/
EEPROM_DI = opcode / 2;
EEPROM_Clock();
EEPROM_DI = opcode % 2;
EEPROM_Clock();
/* address 9 bit */
EEPROM_Transmit_Addr_Byte(addr);
EEPROM_DO = 1; /* very improtant PULL HIGH */
/* data 8 bit */
for (i = 0; i < 8; i++)
{
EEPROM_Clock();
if (EEPROM_DO)
value |= 0x01 << (7 - i);
}
EEPROM_CS = 0;
return(value);
}
void EEPROM_Transmit_12_Bit(char opcode, unsigned int addr)
{
EEPROM_CLK = 0;
EEPROM_CS = 1;
/* start 1 bit */
EEPROM_DI = 1;
EEPROM_Clock();
/* opcode 2 bit*/
EEPROM_DI = opcode / 2;
EEPROM_Clock();
EEPROM_DI = opcode % 2;
EEPROM_Clock();
/* address 9 bit */
EEPROM_Transmit_Addr_Byte(addr);
EEPROM_CS = 0;
/* wait EEPROM finish */
Delay(800); /* delay 6ms */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -