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

📄 serial-eeprom-example.asm

📁 Library for the 8051 microcontroller. such as math routine, hexBCD, LCD, Keyboard, I2C, Remote, Ke
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        mov     th1, #baud_const
        orl     PCON,#10000000b  ; set double baud rate
        MOV     TMOD,#00100001b  ; T0=16 bit, T1=8 bit auto reload
                                 ; both are timers, software control
        MOV     SCON,#01010010b  ; Set Serial for mode 1 &
                                 ; Enable reception, ti=1, ri=0
        ORL     TCON,#01010101b  ; Start both timers, both int are
                                 ; falling edge trigger
        mov     dptr, #welcome
        acall   pstr
        ajmp    main

welcome: db     "Serial EEPROM tester",13,10,13,10,0

        
;********************************************************
;     and here's where all the dirty work is done
;********************************************************


read:   ;r0 is word address to read, data is returned in
        ;r2 (lsb) and r3 (msb)

        clr     pre
        setb    cs
        nop

        clr     sk
        setb    di      ;the start bit
        setb    sk
        clr     sk
        nop
        setb    sk      ;another '1'
        clr     sk
        clr     di      ;and a '0'
        setb    sk

        mov     r4, #6
        mov     a, r0
        rl      a
        rl      a
read2:  rlc     a
        clr     sk
        mov     di, c   ;and do each address bit
        setb    sk
        djnz    r4, read2
        clr     di
  
        mov     r4, #8
        clr     a
read3:  clr     sk
        nop
        setb    sk
        mov     c, do
        rlc     a
        djnz    r4, read3
        mov     r3, a
        mov     r4, #8
        clr     a
read4:  clr     sk
        setb    sk
        mov     c, do
        rlc     a
        djnz    r4, read4
        mov     r2, a
        clr     cs
        clr     di
        ret

;********************************************************

write:  ;r0 is word address to write, r2 (lsb) and r3 (msb)
        clr     pre
        setb    pe
        setb    cs
        nop
        clr     sk
        setb    di      ;the start bit
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        setb    di      ;a '1'
        setb    sk

        mov     r4, #6
        mov     a, r0
        rl      a
        rl      a
write2: rlc     a
        clr     sk
        mov     di, c   ;and do each address bit
        setb    sk
        djnz    r4, write2

        mov     a, r3
        mov     r4, #8
write3: clr     sk
        rlc     a
        mov     di, c
        setb    sk
        djnz    r4, write3
        mov     a, r2
        mov     r4, #8
write4: clr     sk
        rlc     a
        mov     di, c
        setb    sk
        djnz    r4, write4
        clr     di
        clr     cs
        nop
        setb    cs
        nop
        nop
write5: mov     c, do
        jnc     write5
        nop
        clr     cs
        ret

;********************************************************

pren:   ;enable the protection register (for next cycle)
        setb    pre
        setb    pe
        setb    cs
        nop
        clr     sk
        setb    di      ;the start bit
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        setb    di      ;a '1'
        setb    sk
        clr     sk
        setb    di      ;a '1'
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     cs
        clr     pre
        ret

;********************************************************

prclear:
        setb    pre
        setb    pe
        setb    cs
        nop
        clr     sk
        setb    di      ;the start bit
        setb    sk
        clr     sk
        setb    di      ;a '1'
        setb    sk
        clr     sk
        setb    di      ;a '1'
        setb    sk
        clr     sk
        setb    di      ;a '1'
        setb    sk
        clr     sk
        setb    di      ;a '1'
        setb    sk
        clr     sk
        setb    di      ;a '1'
        setb    sk
        clr     sk
        setb    di      ;a '1'
        setb    sk
        clr     sk
        setb    di      ;a '1'
        setb    sk
        clr     sk
        setb    di      ;a '1'
        setb    sk
        clr     di
        clr     cs
        clr     pre
        nop
        setb    cs
        nop
        nop
prclr5: mov     c, do
        jnc     prclr5
        nop
        clr     cs
        ret

;********************************************************

prds:   ;permantly fix protect register!!!
        setb    pre
        setb    pe
        setb    cs
        nop
        clr     sk
        setb    di      ;the start bit
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     cs
        clr     pre
        nop
        setb    cs
        nop
        nop
prds5:  mov     c, do
        jnc     prds5
        nop
        clr     cs
        ret

;********************************************************

prwrite: ;r0 is address to write into protect register
        setb    pre
        setb    pe
        setb    cs
        nop
        clr     sk
        setb    di      ;the start bit
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        setb    di      ;a '1'
        setb    sk

        mov     r4, #6
        mov     a, r0
        rl      a
        rl      a
prwrt2: rlc     a
        clr     sk
        mov     di, c   ;and do each address bit
        setb    sk
        djnz    r4, prwrt2
        clr     di
        clr     cs
        clr     pre
        nop
        setb    cs
        nop
        nop
prwrt5: mov     c, do
        jnc     prwrt5
        nop
        clr     cs
        ret

;********************************************************

wen:    ;enable writing
        clr     pre
        setb    pe
        setb    cs
        nop
        clr     sk
        setb    di      ;the start bit
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        setb    di      ;a '1'
        setb    sk
        clr     sk
        setb    di      ;a '1'
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     cs
        clr     pre
        ret

;********************************************************

wds:    ;disable writing
        clr     pre
        setb    pe
        setb    cs
        nop
        clr     sk
        setb    di      ;the start bit
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        setb    di      ;a '1'
        setb    sk
        clr     sk
        setb    di      ;a '1'
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     sk
        clr     di      ;a '0'
        setb    sk
        clr     cs
        clr     pre
        ret
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -