📄 vi2c.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 + -