Code:
' 18F6680 24FC1025
DEFINE OSC 20
@ __CONFIG _CONFIG1H, _OSC_HS_1H
@ __CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
@ __CONFIG _CONFIG4L, _LVP_OFF_4L
TRISF = 0
PORTF = 0
DPIN VAR PORTF.6 'I2C DATA PIN
CPIN VAR PORTF.7 'I2C CLOCK PIN
CONTR CON %10100001 'READ CONTROL
CONTW CON %10100000 'WRITE CONTROL
ADDR_HB VAR BYTE
ADDR_LB VAR BYTE
DATI VAR BYTE
DATO VAR BYTE
ACK VAR BIT
ADDR_HB = %00000000
ADDR_LB = %00000000
DATO = %11100000
CNT VAR BYTE
CNT = 0
START:CNT = CNT + 1
GOSUB WRITE_DATA
PAUSE 100
GOSUB READ_DATA
SEROUT2 PORTB.2, 16572,["TEST ",DEC CNT,$d,$a]
Serout2 PORTB.2, 16572,["DATA IN ",BIN DATI]
SEROUT2 PORTB.2, 16572,[$d,$a]
PAUSE 500
GOTO START
WRITE_DATA: ACK=1 :Serout2 PORTB.2, 16572,["ACK ",BIN ACK,$d,$a]
GOSUB START_ROM
SHIFTOUT DPIN,CPIN,1,[CONTW]
SHIFTIN DPIN,CPIN,0,[ACK\1]
Serout2 PORTB.2, 16572,["ACK ",BIN ACK,$d,$a]
SHIFTOUT DPIN,CPIN,1,[ADDR_HB]
SHIFTIN DPIN,CPIN,0,[ACK\1]
SHIFTOUT DPIN,CPIN,1,[ADDR_LB]
SHIFTIN DPIN,CPIN,0,[ACK\1]
SHIFTOUT DPIN,CPIN,1,[DATO]
SHIFTIN DPIN,CPIN,0,[ACK\1]
GOSUB STOP_ROM
PAUSE 10
RETURN
READ_DATA:
GOSUB START_ROM
SHIFTOUT DPIN,CPIN,1,[CONTR]
SHIFTIN DPIN,CPIN,0,[ACK\1]
SHIFTOUT DPIN,CPIN,1,[ADDR_HB]
SHIFTIN DPIN,CPIN,0,[ACK\1]
SHIFTOUT DPIN,CPIN,1,[ADDR_LB]
SHIFTIN DPIN,CPIN,0,[ACK\1]
GOSUB START_ROM
SHIFTOUT DPIN,CPIN,1,[CONTR]
SHIFTIN DPIN,CPIN,0,[ACK\1]
SHIFTIN DPIN,CPIN,0,[DATI\8]
GOSUB STOP_ROM
PAUSE 10
RETURN
START_ROM:
HIGH CPIN:HIGH DPIN:LOW DPIN:RETURN
STOP_ROM:
HIGH CPIN:LOW DPIN:HIGH DPIN:RETURN
Bookmarks