Sure! Let me know if you need anything else
Master 16f877 - External 4Mhz Crystal:
Code:
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
' Master
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
DEFINE OSC 4
'OPTION_REG.7 = 0
ADCON1 = 7
'------------------------------------------------------------------------------
DEFINE I2C_SLOW 1
TRISB.5 = 1
TRISB.7 = 1
'------------------------------------------------------------------------------
scl VAR PORTB.5 ' i2c clock input
sda VAR PORTB.7 ' i2c data input
'------------------------------------------------------------------------------
I2Caddress VAR BYTE
valor VAR BYTE
'------------------------------------------------------------------------------
' Set LCD Data port
DEFINE LCD_DREG PORTD
' Set starting Data BIT (0 OR 4) IF 4-BIT bus
DEFINE LCD_DBIT 4
' Set LCD Register Select port
DEFINE LCD_RSREG PORTC
' Set LCD Register Select BIT
DEFINE LCD_RSBIT 6
' Set LCD Enable port
DEFINE LCD_EREG PORTC
' Set LCD Enable BIT
DEFINE LCD_EBIT 7
' Set LCD bus size (4 OR 8 bits)
DEFINE LCD_BITS 4
' Set number of lines ON LCD
DEFINE LCD_LINES 2
' Set command delay time in us
DEFINE LCD_COMMANDUS 2000
' Set Data delay time in us
DEFINE LCD_DATAUS 50
'------------------------------------------------------------------------------
Pause 500 ' Wait for LCD to startup
LCDOut $fe, 1
LCDOut $fe, "Daniel"
Pause 500 ' Wait for LCD to startup
valor = 0
'------------------------------------------------------------------------------
main:
I2Caddress = $3
LCDOut $fe, 1
LCDOut "Writting 1 - LED ON..."
Pause 500
I2CWrite SDA, SCL, I2Caddress, [6], bogus ' Write offset to slave
Pause 500
LCDOut $fe, 1
LCDOut "Writting 1 - LED OFF..."
Pause 500
I2CWrite SDA, SCL, I2Caddress, [8], bogus ' Write to slave
Pause 500
LCDOut $fe, 1
LCDOut "Reading 1..."
Pause 500
I2CRead SDA, SCL, I2Caddress, [valor], bogus ' Read from slave
LCDOut $fe, 1
LCDOut "Value: ", DEC valor
Pause 500
'--------
I2Caddress = $5
LCDOut $fe, 1
LCDOut "Writting 2 - LED ON..."
Pause 500
I2CWrite SDA, SCL, I2Caddress, [4], bogus ' Write to slave
Pause 500
LCDOut $fe, 1
LCDOut "Writting 2 - LED OFF..."
Pause 500
I2CWrite SDA, SCL, I2Caddress, [10], bogus ' Write to slave
Pause 500
LCDOut $fe, 1
LCDOut "Reading 2..."
Pause 500
I2CRead SDA, SCL, I2Caddress, [valor], bogus ' Read from slave
LCDOut $fe, 1
LCDOut "Value: ", DEC valor
Pause 500
'--------
GoTo main ' Do it forever
'-------------------------------------------------------------------------------
bogus:
LCDOut $fe,1, "Time out" ' I2C command timed out
Pause 500
GoTo main
'-------------------------------------------------------------------------------
End
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
Bookmarks