I2CBUS_INIT
BCF STATUS,RP0
MOVF RC,W
ANDLW 0X18
MOVWF RC
CLRF BUSSTA
CLRF BUSCON
RETURN
;=======================================
; 传送设备地址
;入口: BUSCON
;出口: BUSSTA
;=======================================
TX_SLAVE_ADDR
BCF STATUS,RP0
BCF BUSSTA,ACK_ERROR
MOVLW SLAVEADDR
MOVWF TXBUF
BTFSC BUSCON,SLAVE_RW
BSF TXBUF,R_NOT_W
CALL I2CTXB
BTFSC BUSSTA,TX_SUCCESS
GOTO TXADDR_SUCCESS
CLRWDT
BTFSS BUSSTA,ACK_ERROR
CALL I2CSTOP
GOTO TXADDR_END
TXADDR_SUCCESS
CLRWDT
TXADDR_END
RETURN
;=======================================
;TX_DATA_ADDR 发送写/读的地址
;=======================================
TX_DATA_ADDR
BCF STATUS,RP0
MOVLW DATAADDRH
MOVWF TXBUF
CALL I2CTXB
BCF STATUS,RP0
BTFSS BUSSTA,TX_SUCCESS
GOTO TX_DATA_ADDR_ERROR
MOVLW DATAADDRL
MOVWF TXBUF
CALL I2CTXB
BCF STATUS,RP0
BTFSS BUSSTA,TX_SUCCESS
GOTO TX_DATA_ADDR_ERROR
GOTO TX_DATA_END
TX_DATA_ADDR_ERROR
BCF BUSSTA,TX_PROGRESS
BCF BUSSTA,TX_SUCCESS
BSF BUSSTA,ACK_ERROR
TX_DATA_END
RETURN
;=======================================
;向 EEPROM 输出一个8位数据,并检测EEPROM的ACK信号
;入口: TXBUF 寄存器
; BUSSTA 寄存器
;出口: EEPROM 存储器
; BUSSTA 寄存器
;======================================
I2CTXB BCF STATUS,RP0
BSF BUSSTA,TX_PROGRESS
BCF BUSSTA,TX_SUCCESS
MOVLW 0X08
MOVWF BCOUNT
TXLOOP CLRWDT
BSF STATUS,RP0
BCF TRISC,SCL
NOP
BCF TRISC,SDA
BCF STATUS,RP0
RLF TXBUF,F
BSF STATUS,RP0
BTFSC STATUS,C
BSF TRISC,SDA
NOP
BSF TRISC,SCL
NOP
NOP
BCF STATUS,RP0
DECFSZ BCOUNT,F
GOTO TXLOOP
;---------------------------------------
;检测是EEPROM否有ACK信号产生,产生为正常
;检测方法:
; 1. 将RC口的SCL.SDA分别设置为输出和输入状态
; 2. 延时2个指令周期,将SCL设置为高电平
; 3. 延时2个指令周期,检测RC口SDA的状态
上一页 [1] [2] [3] [4] [5] [6] 下一页
本文关键字:单片机 程序 PIC单片机,单片机-工控设备 - PIC单片机