技术热线: 4007-888-234

PIC16F73读写24C01的程序

更新时间: 2019-03-23
阅读量:1972

PIC16F73读写24C01的程序

;*****Start code
E2PROM_START
 BSF PORTC,SDAT
 BSF PORTC,SCLK
 BSF STATUS,5
 MOVLW DATA_OUT
 MOVWF TRISC
 BCF STATUS,5
 NOP
 NOP
 NOP
 NOP
 NOP
 BCF PORTC,SDAT
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 BCF PORTC,SCLK
 NOP
 NOP
 NOP
 NOP
 RETURN
;*****Stop code
E2PROM_STOP
 BCF PORTC,SCLK
 BCF PORTC,SDAT
 BSF STATUS,5
 MOVLW DATA_OUT
 MOVWF TRISC
 BCF STATUS,5
 NOP
 NOP
 NOP
 NOP
 BSF PORTC,SCLK
 NOP
 NOP
 NOP
 NOP
 BSF PORTC,SDAT
 NOP
 NOP
 NOP
 NOP
 BCF PORTC,SCLK
 NOP
 NOP
 RETURN
;*****Byte out code
E2PROM_BYTE_OUT
 MOVLW 08H
 MOVWF E2PROM_cnt
 BSF STATUS,5
 MOVLW DATA_OUT
 MOVWF TRISC
 BCF STATUS,5
OUT_LOOP
 BCF PORTC,SCLK
 NOP
 NOP
 NOP
 BTFSS E2PROM_data,7
 GOTO PULL_DOWN_SDAT
 BSF PORTC,SDAT
 GOTO OUT_NEXT_BIT
PULL_DOWN_SDAT
 BCF PORTC,SDAT
OUT_NEXT_BIT
 RLF E2PROM_data,1
 NOP
 NOP
 BSF PORTC,SCLK
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 DECFSZ E2PROM_cnt,1
 GOTO OUT_LOOP
 BCF PORTC,SCLK
 BSF STATUS,5
 MOVLW DATA_IN
 MOVWF TRISC
 BCF STATUS,5
 NOP
 NOP
 BSF PORTC,SCLK
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
WAIT_ACK_LOOP
 BTFSC PORTC,SDAT
 GOTO WAIT_ACK_LOOP
 BCF PORTC,SCLK
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 RETURN
;*****Byte in code
E2PROM_BYTE_IN
 MOVLW 08H
 MOVWF E2PROM_cnt
 CLRF E2PROM_data
 BSF STATUS,5
 MOVLW DATA_IN
 MOVWF TRISC
 BCF STATUS,5
 BCF STATUS,0
IN_LOOP
 RLF E2PROM_data,1
 BCF PORTC,SCLK
 NOP
 NOP
 NOP
 NOP
 NOP
 BSF PORTC,SCLK
 NOP
 NOP
 NOP
 BTFSS PORTC,SDAT
 GOTO REC_DOWN_SDAT
 BSF E2PROM_data,0
 GOTO IN_NEXT_BIT
REC_DOWN_SDAT
 BCF E2PROM_data,0
IN_NEXT_BIT
 NOP
 NOP
 NOP
 BCF PORTC,SCLK
 NOP
 NOP
 NOP
 DECFSZ E2PROM_cnt,1
 GOTO IN_LOOP
 NOP
 NOP
 NOP
 RETURN
;*****Read code
READ_E2PROM
 MOVLW 0A0H
 MOVWF E2PROM_data
 CALL E2PROM_START
 CALL E2PROM_BYTE_OUT
 MOVF E2PROM_addr,0
 MOVWF E2PROM_data
 CALL E2PROM_BYTE_OUT
 MOVLW 0A1H
 MOVWF E2PROM_data
 CALL E2PROM_START
 CALL E2PROM_BYTE_OUT
 CALL E2PROM_BYTE_IN
 CALL E2PROM_STOP
 RETURN
;*****Write code
WRITE_E2PROM
 MOVLW 0A0H
 MOVWF E2PROM_data
 CALL E2PROM_START
 CALL E2PROM_BYTE_OUT
 MOVF E2PROM_addr,0
 MOVWF E2PROM_data
 CALL E2PROM_BYTE_OUT
 MOVF        Need_write_data,0
 MOVWF E2PROM_data
 CALL E2PROM_BYTE_OUT
 CALL E2PROM_STOP
 RETURN