Hola
muchas gracias por tu respuesta.
Lo e realizado el mismo circuito con dos pic, memoria I2c y LCD, y funciona perfectamente.
Voy a provar con lo de mandar un cero antes.
mira te pongo el programa que e echo para los dos PIC.
Emisor:
INCLUDE "MODEDEFS.BAS"
symbol HABILITAR = PORTB.0
SYMBOL TRANSMISOR = 2
SYMBOL PULSADOR = PORTB.3
TRISB=%00001000
A VAR BYTE
DATO VAR BYTE
pause 600
a=0
DATO=0
INICIO:
FOR A=0 TO 5
HABILITAR=0
PAUSE 20
SEROUT TRANSMISOR, 2400, [A]
PAUSE 20
SEROUT TRANSMISOR, 2400, [DATO]
DATO=DATO+5
pause 20
NEXT A
HABILITAR=1
PULSA:
IF PULSADOR=0 THEN
goto pulsadoractivo
ELSE
GOTO PULSA
ENDIF
PULSADORACTIVO:
IF PULSADOR=0 THEN GOTO PULSADORACTIVO
GOTO INICIO
END
Codigo PIC Intermedio:
INCLUDE "MODEDEFS.BAS"
Define LCD_DREG portA
Define LCD_DBIT 0
DEFINE LCD_RSREG PORTA
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
DEFINE LCD_BITS 4
DEFINE LCD_LINES 4
symbol SCL = PORTB.0
SYMBOL SDA = PORTB.4
SYMBOL EMISOR = 1
SYMBOL HABILITARE = PORTB.5
SYMBOL led = PORTB.6
SYMBOL CONL=%1010000
SYMBOL ledrojo = PORTB.7
pause 500
TRISA=0
TRISB=%00100010
DIR VAR BYTE
DATO VAR BYTE
X VAR BYTE
INICIO:
LCDOUT $FE, 1
EMISOR1:
led=1
SERIN EMISOR, 2400, DIR
SERIN EMISOR, 2400, DATO
I2CWRITE SDA, SCL, CONL, DIR, DATO
PAUSe 10
led=0
I2CREAD SDA, SCL, CONL, DIR, DATO
ledrojo=1
if dir=0 then LCDOUT $FE, 1
SELECT CASE DIR
CASE 0
LCDOUT $FE, $C0, dec DATO
CASE 1
LCDOUT $FE, $C0+4, dec DATO
CASE 2
LCDOUT $FE, $C0+7, dec DATO
CASE 3
LCDOUT $FE, $C0+10, dec DATO
CASE 4
LCDOUT $FE, $C0+13, dec DATO
CASE 5
LCDOUT $FE, $C0+16, dec DATO
END SELECT
ledrojo=0
GOTO EMISOR1
END
Voy a provar lo de poner el zero delante.
muchas gracias