; Reads and writes 93C06
; P1.0 = EEProm CS
; P1.1 = EEProm Clk
; T0 = EEProm Din/Dout
; EEPROM routines summmary:
; E_Read...reads a byte from EEProm of a given address...
; E_Write...writes a byte to EEProm to a given address...
; Ee_Rd_8b...reads a byte from EEProm at given location
; Ee_Wr_8b...writes a byte to EEProm at given location...
; Ee_Clock...time delay for EEloops...
; This reads a byte from EEprom at a given location..
E_Read: SETB EECs ; CS is ON...
LCALL Ee_Clock
SETB EEDin ; DI is H...
LCALL Ee_Clock
MOV A, EEAddress
ANL A, #3Fh
ORL A, #80h ; Code and address for read...
LCALL Ee_Wr_8b ; Send address...
LCALL G_Time
LCALL Ee_Rd_8b ; Read a byte..
CLR EECs ; CS is OFF...
RET
; This writes a byte to EEProm..
E_Write: SETB EECs ; CS is on..
LCALL Ee_Clock
SETB EEDin ; Din goes H
LCALL Ee_Clock
MOV A, #30h ; Code for WE = 11
LCALL Ee_Wr_8b
CLR EEDin
CLR EECs
LCALL G_Time
SETB EECs
LCALL Ee_Clock
SETB EEDin
LCALL Ee_Clock
MOV A, EEAddress
ANL A, #1Fh ; 0011 1111
ORL A, #40h
LCALL Ee_Wr_8b ; Send code and 6bit address to EE
MOV A, EEData
LCALL Ee_Wr_8b
CLR EEDin
CLR EECs
LCALL G_Time
SETB EECs
JNB EEDout, $
CLR EECs
LCALL G_Time
SETB EECs ; CS is on..
LCALL Ee_Clock
SETB EEDin ; Din goes H
LCALL Ee_Clock
MOV A, #00h ; Code for WDis = 00
LCALL Ee_Wr_8b
CLR EEDin
CLR EECs
RET
; This reads 8 bits from EEProm...
Ee_Rd_8b: MOV R7, #08h
Ee_R_Loop: LCALL Ee_Clock
MOV C, EEDout
RLC A
DJNZ R7, EE_R_Loop
MOV R7, #7Fh
Rd_T_Loop: NOP
NOP
DJNZ R7, Rd_T_Loop
RET
; This writes 8 bits to EEProm...
Ee_Wr_8b: MOV R7, #08h
Ee_8_Loop: RLC A
MOV EEDin, C
LCALL Ee_Clock
DJNZ R7, Ee_8_Loop
CLR EEDin
MOV R7, #7Fh
Wr_T_Loop: NOP
NOP
DJNZ R7, Wr_T_Loop
RET
; EE_Clock time delay...
Ee_Clock: SETB EEClk
MOV R6, #10h
Ee_H_Loop: NOP
NOP
NOP
NOP
DJNZ R6, Ee_H_Loop
CLR EEClk
G_Time: MOV R6, #10h
Ee_L_Loop: NOP
NOP
NOP
NOP
DJNZ R6, Ee_L_Loop
RET
; ====================================