📄 93c46.asm
字号:
;以前用的程序 [C.C.] [31次] 01-8-5 下午 05:42:50
; Assembler: X8051 v4.03a 2500 A.D.
; 93C46
EEPROM_CS reg p2.0 ; CS
EEPROM_SK reg p2.1 ; SK
EEPROM_DI reg p2.2 ; DI
EEPROM_DO reg p2.3 ; DO
TestEEPROMRoutine:
call FinishEEPROM ; Power ON first time for
93C46
;
call WriteEEPROMEnable
mov r0, #00h
mov a, #55h
call WriteEEPROM
call WriteEEPROMDisable
;
mov r0, #00h
call ReadEEPROM
xrl a, #55h ; ZF = 1 Success
ret
;*****************************************************************************;
; EEPROM SubRoutine ;
;*****************************************************************************;
PrepareEEPROMCmd:
clr EEPROM_DI
clr EEPROM_SK ; SK, DI low
nop
clr EEPROM_CS
call EDelay
;
setb EEPROM_DO ; set DO input
nop
setb EEPROM_CS ; CS active
nop
nop
setb EEPROM_DI ; DI high
nop
setb EEPROM_SK ; SK high (Latch start bit)
nop
nop
clr EEPROM_SK ; SK low
nop
ret
FinishEEPROMCmd:
clr EEPROM_DI
clr EEPROM_SK ; SK, DI low
nop
clr EEPROM_CS ; CS low
call EDelay
ret
OutputEEPROMData:
mov c, a.7
rl a
mov EEPROM_DI, c ; DI = data
nop
setb EEPROM_SK ; SK high
nop
nop
clr EEPROM_SK ; SK low
nop
djnz r2, OutputEEPROMData
ret
WriteEEPROMEnable:
call PrepareEEPROMCmd
mov a, #00000000b ; 00 Write Enable
mov r2, #2
call OutputEEPROMData
mov a, #11000000b ; 11xxxx Write Enable Address
mov r2, #6
call OutputEEPROMData
call FinishEEPROMCmd
ret
WriteEEPROMDisable:
call PrepareEEPROMCmd
mov a, #00000000b ; 00 Write Disable
mov r2, #2
call OutputEEPROMData
mov a, #00000000b ; 00xxxx Write Disable Address
mov r2, #6
call OutputEEPROMData
call FinishEEPROMCmd
ret
InputEEPROMData:
clr a
InputEEPROMData_Loop:
setb EEPROM_SK ; SK high
nop
nop
mov c, EEPROM_DO ; data = DO
clr EEPROM_SK ; SK low
nop
rlc a
djnz r2, InputEEPROMData_Loop
ret
ReadEEPROM:
call PrepareEEPROMCmd
mov a, #10000000b ; 10 Read Command
mov r2, #2
call OutputEEPROMData
mov a, r0 ; Address
anl a, #3Fh
rl a
rl a
mov r2, #6
call OutputEEPROMData
clr EEPROM_DI ; DI low before Read Data
mov r2, #8 ; Read High byte
call InputEEPROMData
mov b, a
mov r2, #8
call InputEEPROMData ; Read Low byte
call FinishEEPROMCmd
ret
WriteEEPROM:
call PrepareEEPROMCmd
push a
mov a, #01000000b ; 01 Write Command
mov r2, #2
call OutputEEPROMData
mov a, r0 ; Address
anl a, #3Fh
rl a
rl a
mov r2, #6
call OutputEEPROMData
mov a, b
mov r2, #8
call OutputEEPROMData ; Write High byte
pop a
mov r2, #8
call OutputEEPROMData ; Write Low byte
clr EEPROM_CS ; CS low
call EWDelay ; about 20 ms
call FinishEEPROMCmd
ret
; base on 11.0592 MHz
EDelay:
mov r7, #23 ; 1 + 23 * 2 = 47 clocks / 921600 = 50
us
djnz r7, $
ret
EWDelay: ; about 20 ms
mov r6, #20
EWDelay_Main: ; about 1 ms (1025 clocks / 921600 =
1.1121 ms)
mov r7, #230 ; 1 + 230 * (1 + 1 + 2) = 921 clocks /
921600 = 0.999 ms
EWDelay_Sub:
nop
nop
djnz r7, EWDelay_Sub
djnz r6, EWDelay_Main ; 2 clocks
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -