viic.asm

来自「lcd多层菜单显示,应用比较广泛,主要是用来方便显示相关的信息用的,是不可少的好」· 汇编 代码 · 共 148 行

ASM
148
字号
;程序名:虚拟IIC总线程序包
;VSDA:  虚拟IIC总线数据线
;VSCL:  虚拟IIC总线时钟线
;SLA:   寻址字节存放单元
;SLAW:  寻址字节写
;SLAR:  寻址字节读
;NUMBYT:传输字节数存放单元
;MTD:   发送数据缓冲区
;MRD:   接收数据缓冲区
;占用:  F0、C、R0、R1、R2、R3、A
;VIIC1.0软件包规定了读写子程序RDNBYT/WRNBYT的惟一出口界面,因此RDNBYT/WRNBYT
;的调用操作命令,以及满足调用操作的初始化操作的三条命令为VIIC的应用界面,即: 
;MOV SLA,#SLAR/SLAW ;总线上节点寻址并确定传送方向
;MOV NUMBYT,#N ;确定传送字节数N
;LCALL RDNBYT/WRNBYT ;读/写操作调用

;*********启动总线********************
STA:    SETB    VSDA
        SETB    VSCL
        NOP
        NOP
        NOP
        NOP
        CLR     VSDA
        NOP
        NOP
        NOP
        NOP
        CLR     VSCL
        RET
;**********停止总线********************
STOP:   CLR     VSDA
        SETB    VSCL
        NOP
        NOP
        NOP
        NOP
        SETB    VSDA
        NOP
        NOP
        NOP
        NOP
        CLR     VSDA
        CLR     VSCL
        RET
;**********发送应答********************
MACK:   CLR     VSDA
        SETB    VSCL
        NOP
        NOP
        NOP
        NOP
        CLR     VSCL
        SETB    VSDA
        RET
;**********发送非应答******************
MNACK:  SETB    VSDA
        SETB    VSCL
        NOP
        NOP
        NOP
        NOP
        CLR     VSCL
        CLR     VSDA
        RET
;**********应答位检查******************
CACK:   SETB    VSDA
        SETB    VSCL
        CLR     F0
        MOV     C,VSDA
        JNC     CEND
        SETB    F0
 CEND:  CLR     VSCL
        RET
;**********发送一个数据字节******************
WRBYT:  MOV     R0,#8
WLP:    RCL     A
        JC      WR1
        AJMP    WR0
WLP1:   DJNZ    R0,WLP
        RET
WR1:    SETB    VSDA
        SETB    VSCL
        NOP
        NOP
        NOP
        NOP
        CLR     VSCL
        CLR     VSDA
        AJMP    WLP1
WR0:    CLR     VSDA
        SETB    VSCL
        NOP
        NOP
        NOP
        NOP
        CLR     VSCL
        AJMP    WLP1
;**********接受一个数据字节******************
 RDRYT: MOV     R0,#8
 RLP:   SETB    VSDA
        SETB    VSCL
        MOV     C,VSDA
        MOV     A,R2
        RLC     A
        MOV     R2,A
        CLR     VSCL
        DJNZ    R0,RLP
        RET
;**********发送N个数据字节******************
WRNBYT: MOV     R3,NUMBYT
        LCALL   STA
        MOV     A,SLA
        LCALL   WRBYT
        LCALL   CACK
        JB      F0,WRNBYT
        MOV     R1,#MTD
WRDA:   MOV     A,@R1
        LCALL   WRBYYT
        LCALL   CACK
        JB      F0,WRNBYT
        INC     R1
        DJNZ    R3,WRDA
        LCALL   STOP
        RET
;**********接受N个数据字节******************
RDNBYT: MOV     R3,NUMBYT
        LCALL   STA
        MOV     A,SLA
        LCALL   WRBYT
        LCALL   CACK
        JB      F0,RDNBYT
RDN:    MOV     R1,#MRD
RDN1:   LCALL   RDBYT
        MOV     @R1,A
        DJNZ    R3,ACK
        LCALL   MNACK
        LCALL   STOP
        RET
ACK:    LCALL   MACK
        INC     R1
        SJMP    RDN1





⌨️ 快捷键说明

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