⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 93c46.asm

📁 C51源程序集合 包括以下目录源码 ├─AD-MSP430f149D ├─ADC8535 ├─bin ├─c51源程序 ├─c51源程序锦集 ├─ct2Timer ├─
💻 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 + -