📄 serial-eeprom-example.asm
字号:
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 + -