📄 93c46.asm
字号:
%*define (write_1) (
setb DI
setb SK
clr SK
)
%*define (write_0) (
clr DI
setb SK
clr SK
)
%*define (write_carry) (
mov DI,C
setb SK
clr SK
)
;
; 定义 93C46的引脚
;
CS bit P0.0
SK bit P0.1
DI bit P0.2
DO bit P0.3
;
; 定义 93C46的指令
;
enable equ 30H
disable equ 00H
read equ 80H
write equ 40H
;
address equ 11H
dest equ 12H
buffer equ 15H
;
public read_data,write_enable,write_disable,write_data
;
org 10h
;
write_command:
%write_1
mov r7,#8
more: rlc A
%write_carry
djnz r7,more
ret
;
write_byte:
mov r7,#8
write_bit:
rlc A
%write_carry
djnz r7,write_bit
ret;
;
write_enable:
push ACC
push PSW
setb rs1
clr rs0
mov A,#enable
setb CS
acall write_command
clr CS
pop PSW
pop ACC
ret
;
write_disable:
push ACC
push PSW
setb rs1
clr rs0
mov A,#disable
setb CS
acall write_command
clr CS
pop PSW
pop ACC
ret
;
write_data:
push ACC
push PSW
setb rs1
clr rs0
mov A,#write
orl A,address
setb CS
acall write_command
;
; 写入 2 bytes 的数据到 93C46.
;
mov r0,dest
mov r3,#2
wloop:
mov A,0
acall write_byte
inc r0
djnz r3,wloop
acall check_busy
clr CS
pop PSW
pop ACC
ret
;
read_data:
push ACC
push PSW
setb rs1
clr rs0
mov A,#read
orl A,address
setb CS
acall write_command
mov r0,dest
;
; 从 93C46 读出 2 bytes 的数据.
;
mov r3,#2
rloop1:
mov r4,#8
rloop2:
setb SK
clr SK
mov c,DO
rlc A
djnz r4,rloop2
mov 0,A
inc r0
djnz r3,rloop1
;
clr CS
pop PSW
pop ACC
ret
;
check_busy:
check_again:
clr CS
setb CS
mov C,DO
jnc check_again
ret
;
End
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -