; FILENAME X93C46.ASM
; DESCRIPTION EXAMPLE PROGRAM FOR 93C46 EEPROM
; HARDWARE JAZZ-31 & 93C46 AT PORT1
; ASSEMBLER SXA51
; ENGINEER KRIANGSAK B.
; COMPANY SILA RESEARCH CO.,LTD.
; I/O PORT 93C46 JAZZ-31
; ======== ==========
; PIN-2 SK --- PIN-1 P1.0
; PIN-3 DI --- PIN-2 P1.1
; PIN-4 DO --- PIN-3 P1.2
; PIN-1 CS --- PIN-4 P1.3
; FUNCTION WRITE 93H,46H TO 93C46 AT ADDRESS 07H
; READ ADDRESS 07H AND GOTO JAZZ-31 MONITOR
; ********** VARIABLE **********
EEPCLK EQU P1.0
EEPDI EQU P1.1
EEPDO EQU P1.2
EEPCS EQU P1.3
; ********** MAIN **********
ORG 8100H
MAIN: CLR EEPCLK
CLR EEPCS
LCALL EEPEN ;ENABLE FIRST
MOV R2,#07H
LCALL EEPER ;ERASE
MOV R2,#07H
MOV R3,#93H
MOV R4,#46H
LCALL EEPWR ;WRITE
MOV R3,#0
MOV R4,#0
MOV R2,#07H
LCALL EEPRD
LJMP 0036H
; ********** EEPRD SUB **********
; 93C46 READ WORD SUBROUTINE
; IN = R2 ADDRESS (0-63)
; OUT = R3,R4 DATA
; REG = A,R2,R3,R4
EEPRD: MOV A,R2
ANL A,#00111111B ;MAKE SURE DATA=6 BIT
ORL A,#10000000B ;OPCODE
SETB EEPCS ;CS=1
SETB EEPDI ;START BIT
LCALL CLOCK
MOV R2,#8 ;OPCODE,ADDRESS
EEPRD2: RLC A
MOV EEPDI,C
LCALL CLOCK
DJNZ R2,EEPRD2
MOV R2,#8 ;READ DATA (8 BIT FIRST)
EEPRD4: LCALL CLOCK
MOV C,EEPDO
RLC A
DJNZ R2,EEPRD4
MOV R3,A
MOV R2,#8 ;READ DATA (8 BIT LAST)
EEPRD5: LCALL CLOCK
MOV C,EEPDO
RLC A
DJNZ R2,EEPRD5
MOV R4,A
CLR EEPCS ;CS=0
RET
CLOCK: SETB EEPCLK ;SYNC CLOCK
NOP
NOP
CLR EEPCLK
NOP
NOP
RET
; ********** EEPWR SUB **********
; 93C46 WRITE WORD SUBROUTINE
; IN = R2 ADDRESS (0-63)
; = R3,R4 DATA
; REG = A,R2
EEPWR: MOV A,R2
ANL A,#00111111B ;MAKE SURE DATA=6 BIT
ORL A,#01000000B ;OPCODE
SETB EEPCS ;CS=1
SETB EEPDI ;START BIT
LCALL CLOCK
MOV R2,#8 ;OPCODE,ADDRESS
EEPWR2: RLC A
MOV EEPDI,C
LCALL CLOCK
DJNZ R2,EEPWR2
MOV R2,#8 ;WRITE DATA (8 BIT FIRST)
MOV A,R3
EEPWR4: RLC A
MOV EEPDI,C
LCALL CLOCK
DJNZ R2,EEPWR4
MOV R2,#8 ;WRITE DATA (8 BIT LAST)
MOV A,R4
EEPWR5: RLC A
MOV EEPDI,C
LCALL CLOCK
DJNZ R2,EEPWR5
CLR EEPCS ;CS=0
NOP
NOP
SETB EEPCS ;CS=1 (CHECK STATUS)
NOP
NOP
JNB EEPDO,$ ;WAIT FOR BUSY
NOP
NOP
CLR EEPCS ;CS=0
RET
; ********** EEPER SUB **********
; 93C46 ERASE WORD SUBROUTINE
; IN = R2 ADDRESS (0-63)
; REG = A,R2
EEPER: MOV A,R2
ANL A,#00111111B ;MAKE SURE DATA=6 BIT
ORL A,#11000000B ;OPCODE
SETB EEPCS ;CS=1
SETB EEPDI ;START BIT
LCALL CLOCK
MOV R2,#8 ;OPCODE,ADDRESS
EEPER2: RLC A
MOV EEPDI,C
LCALL CLOCK
DJNZ R2,EEPER2
CLR EEPCS ;CS=0
NOP
NOP
SETB EEPCS ;CS=1 (CHECK STATUS)
NOP
NOP
JNB EEPDO,$ ;WAIT FOR BUSY
NOP
NOP
CLR EEPCS ;CS=0
RET
; ********** EEPEN SUB **********
; 93C46 ENABLE SUBROUTINE
; REG = A,R2
EEPEN: MOV A,#00110000B ;OPCODE
SETB EEPCS ;CS=1
SETB EEPDI ;START BIT
LCALL CLOCK
MOV R2,#8 ;OPCODE,ADDRESS
EEPEN2: RLC A
MOV EEPDI,C
LCALL CLOCK
DJNZ R2,EEPEN2
RET
END