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:
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.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




Bookmarks