Yes, I found that it is nec, and tried to take code from here:
http://www.picbasic.co.uk/forum/showthread.php?t=15368
and modified it to my needs:
Code:
Include "modedefs.bas" ' Include serial modes
'DEFINES FOR LCD PORTS
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 0
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 1
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE LCD_COMMANDUS 1500
DEFINE LCD_DATAUS 44
define osc 4
ADCON1=%00000110 'CONFIGURE PORT A AS DIGITAL
'TRISA=1 'CONFIGURE PORT A AS INPUT
low TRISB
LOW TRISC
LOW TRISA
Leader VAR WORD ' will be up to 900 for a 9mS leader pulse
BtnVal VAR BYTE[32] ' holds 32 pulse results
DByte1 VAR BYTE ' address byte
DByte2 VAR BYTE ' inverse of address byte
DByte3 VAR BYTE ' command byte
DByte4 VAR BYTE ' inverse of command byte
X VAR BYTE ' loop count
LCDOUT $FE, 1, "test "
Main:
PULSIN PORTC.4,0,Leader ' leader pulse is ~9mS low-going
IF Leader < 850 THEN Main
FOR X = 0 TO 31 ' grab 32 incoming pulses
PULSIN PORTC.4,1,BtnVal(X) ' now measuring high-going pulse widths
NEXT X
' now we'll decode 4 bytes from 32 pulses
FOR X = 0 TO 7 ' sort 1st 8 pulses
IF BtnVal[X] > 150 THEN ' > 150 x 10uS = > 1.5mS pulse period
DByte1.0[X]=1
ELSE
DByte1.0[X]=0
ENDIF
NEXT X
FOR X = 8 TO 15 ' sort 2nd 8 pulses, etc....
IF BtnVal[X] > 150 THEN
DByte2.0[X-8]=1
ELSE
DByte2.0[X-8]=0
ENDIF
NEXT X
FOR X = 16 TO 23
IF BtnVal[X] > 150 THEN
DByte3.0[X-16]=1
ELSE
DByte3.0[X-16]=0
ENDIF
NEXT X
FOR X = 24 TO 31
IF BtnVal[X] > 150 THEN
DByte4.0[X-24]=1
ELSE
DByte4.0[X-24]=0
ENDIF
NEXT X
LCDOUT $FE, 1, #dbyte1, " ", #dbyte2, " "
LCDOUT $FE, $C0,#dbyte3, " ", #dbyte4, " "
PAUSE 1000
GOTO Main
The problem is, it still does not works. It displays "0" when I press a key on remote. Sometimes, it will display something, like 4 or 170, but it never matches the key pressed and never repeats.
Bookmarks