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

📄 vi2c.asm

📁 PIC单片机的汇编源码合集,应用比较广泛,设计程序时可做子程序来用
💻 ASM
字号:
;****************VI2C*******************
;虚拟I2C总线软件包。
;包括 I2CSTAR,I2CSTOP,MACK,MNACK,CHACK,WRBYT,RDBYT 等子程序。

           IFNDEF       VI2C
            #DEFINE     VI2C
        
        #DEFINE     SDA      PORTB,2     ; RB2, 数据输入输出
        #DEFINE     SCL      PORTB,1     ; RB1, 串行时钟
        #DEFINE     SDAIO    TRISB,2     ; 数据线输入输出状态
        #DEFINE     SCLIO    TRISB,1     ; 时钟线输入输出状态 

TXBUF       EQU         SOU         ; 发送数据缓冲器
RXBUF       EQU         SOUH        ; 接收数据缓冲器
BCOUNT      EQU         CNT         ; 位计数
                                              
;*****************I2CSTAR******************
;本程序实现在虚拟I2C总线上发送起始位。
;入口参数:无。
;出口参数:无。
I2CSTAR     BSF         STATUS,RP0
            BCF         SDAIO
            BCF         SCLIO
            BCF         STATUS,RP0
            BSF         SDA
            BSF         SCL
            NOP
            NOP                     
            BCF         SDA         ;SCL高电平期间产生SDA下降沿
            NOP
            NOP
            BCF         SCL
            RETURN
;*****************I2CSTOP*******************
;本程序实现在虚拟I2C总线上发送结束位。
;入口参数:无。
;出口参数:无。
I2CSTOP     BCF         SDA
            BSF         STATUS,RP0
            BCF         SDAIO
            BCF         STATUS,RP0
            BSF         SCL
            NOP
            NOP                     
            BSF         SDA         ;SCL高电平期间产生SDA上升沿
            NOP
            NOP
            RETURN
;********************MACK***************
;本程序实现在虚拟I2C总线上发送应答位。
;入口参数:无。
;出口参数:无。
MACK        BCF         SDA
            BSF         STATUS,RP0
            BCF         SDAIO
            BCF         STATUS,RP0
            BSF         SCL
            NOP
            NOP
            BCF         SCL
            BSF         SDA
            RETURN
;********************MNACK**************
;本程序实现在虚拟I2C总线上发送非应答位。
;入口参数:无。
;出口参数:无。
MNACK       BSF         SDA
            BSF         STATUS,RP0
            BCF         SDAIO
            BCF         STATUS,RP0
            BSF         SCL
            NOP
            NOP
            BCF         SCL
            BCF         SDA
            RETURN
;*******************CHACK*******************
;本程序实现从虚拟I2C总线上检测应答位。
;入口参数:无。
;出口参数:应答位在STATUS:C中。
CHACK       BSF         SCL
            BSF         STATUS,RP0
            BSF         SDAIO
            BCF         STATUS,RP0
            BSF         STATUS,C
            BTFSS       SDA
            BCF         STATUS,C
            BCF         SCL
            RETURN
;****************WRBYT********************
;本程序实现向虚拟I2C总线上发送一个字节数据。
;入口参数:数据在TXBUF中。
;出口参数:无。
WRBYT       MOVLW       8
            MOVWF       BCOUNT
            BSF         STATUS,RP0
            BCF         SDAIO
            BCF         STATUS,RP0
WLP         RLF         TXBUF,F
            BTFSC       STATUS,C
            GOTO        WR1
            BCF         SDA         ;移出0
            BCF         TXBUF,0
            BSF         SCL
            NOP
            NOP
            BCF         SCL
            GOTO        DONE32
WR1         BSF         SDA         ;移出1
            BSF         TXBUF,0
            BSF         SCL
            NOP
            NOP
            BCF         SCL
            BCF         SDA
DONE32      DECFSZ      BCOUNT,F    ;8位移完了吗?
            GOTO        WLP
            RETURN
;****************RDBYT****************
;本程序实现从虚拟I2C总线上接收1个字节数据。
;入口参数:无。
;出口参数:数据在RXBUF中。
RDBYT       MOVLW       8
            MOVWF       BCOUNT
            BSF         STATUS,RP0
            BSF         SDAIO
            BCF         STATUS,RP0
RLP         BSF         SCL
            BSF         STATUS,C
            BTFSS       SDA         ;读取SDA
            BCF         STATUS,C
            RLF         RXBUF,F
            BCF         SCL
            DECFSZ      BCOUNT,F    ;8位数据读完了吗?
            GOTO        RLP
            RETURN
           ENDIF

⌨️ 快捷键说明

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