📄 93lc46b.c
字号:
#include "indash.h"
void EEPROM_Init()
{
EEPROM_CS = 0;
EEPROM_CLK= 0;
EEPROM_DI = 0;
EEPROM_DO = 0;
if ((EEPROM_Receive_25_Bit(OP_READ, EE_CHECK_SUM_ADDR) != CHECK_SUM_VALUE) & (EEPROM_Receive_25_Bit(OP_READ, EE_CHECK_SUM_ADDR1) != CHECK_SUM_VALUE))
{
EEPROM_Transmit_9_Bit(OP_EWEN, 0x30);
EEPROM_Transmit_9_Bit(OP_ERAL, 0x20); /* clear all */
EEPROM_Transmit_25_Bit(OP_WRITE, EE_CHECK_SUM_ADDR, CHECK_SUM_VALUE);
Initial_Value();
EEPROM_Transmit_25_Bit(OP_WRITE, EE_CHECK_SUM_ADDR1, CHECK_SUM_VALUE);
}
EEPROM_Transmit_9_Bit(OP_EWEN, 0x30);
Recall_Initial_Value();
}
void EEPROM_Clock()
{
/* COMMON clk */
EEPROM_CLK = 0;
EEPROM_CLK = 0;
EEPROM_CLK = 1;
EEPROM_CLK = 1;
EEPROM_CLK = 1;
EEPROM_CLK = 1;
EEPROM_CLK = 1;
EEPROM_CLK = 1;
EEPROM_CLK = 1;
EEPROM_CLK = 1;
EEPROM_CLK = 1;
EEPROM_CLK = 1;
EEPROM_CLK = 1;
EEPROM_CLK = 1;
EEPROM_CLK = 1;
EEPROM_CLK = 1;
EEPROM_CLK = 1;
EEPROM_CLK = 1;
EEPROM_CLK = 0;
EEPROM_CLK = 0;
}
void EEPROM_Transmit_Byte(unsigned char value)reentrant
{
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 char value)reentrant
{
static char cnt = 0;
cnt++;
if (cnt < 6)
EEPROM_Transmit_Addr_Byte(value / 2);
else
cnt = 0;
EEPROM_DI = value % 2;
EEPROM_Clock();
}
void EEPROM_Transmit_25_Bit(char opcode, unsigned char addr, unsigned int value)
{
EA = Disable;
/***** transmit first time *****/
EEPROM_CS = 1; //P1.4
/* start 1 bit */
EEPROM_DI = 1;//P1.2
EEPROM_Clock();
/* opcode 2 bit */
EEPROM_DI = opcode / 2;
EEPROM_Clock();
EEPROM_DI = opcode % 2;
EEPROM_Clock();
/* address 6 bit */
EEPROM_Transmit_Addr_Byte(addr );
/* data 16 bit */
EEPROM_Transmit_Byte(value / 256);
EEPROM_Transmit_Byte(value % 256);
EEPROM_CS = 0;
EEPROM_Clock();
EEPROM_DI = 0;
/* wait EEPROM finish */
if (opcode != OP_WRAL)
Delay(500); /* delay 6ms */
else
Delay(1000); /* delay 15ms */
EA = Enable;
/***** CHECK TRANSMIT VALUE **/
Delay(4000);
EEPROM_Receive_25_Bit( OP_READ, addr);
}
unsigned int EEPROM_Receive_25_Bit(char opcode,unsigned char addr)
{
char i;
// char buf[5];
unsigned int value = 0;
unsigned int value1= 0;
unsigned int value2= 0;
unsigned int xor_value = 0;
/**** receive the first time ******/
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 6 bit */
EEPROM_Transmit_Addr_Byte(addr);
/* data 16 bit */
EEPROM_DI = 1; /* impotant */
for (i = 0; i < 16; i++)
{
EEPROM_Clock();
if (EEPROM_DO)
value |= 0x01 << (15 - i);
}
EEPROM_CS = 0;
EEPROM_Clock();
EEPROM_DI = 0;
/*
Printxy_Normal( 1,5,"value" , FONT_GREEN);
Printxy_Normal( 8,5 , Ntoa((signed long) value, Fill(buf, 5, ' '), LEFT, ' '), FONT_GREEN);
*/
return(value);
}
void EEPROM_Transmit_9_Bit(char opcode, unsigned char addr)
{
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 6 bit */
EEPROM_Transmit_Addr_Byte(addr);
EEPROM_CS = 0;
EEPROM_Clock();
EEPROM_DI = 0;
/* wait EEPROM finish */
Delay(500); /* delay 6ms */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -