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

📄 93c46.asm

📁 < 嵌入式C语言程序设计>>一书的源代码
💻 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 + -