IR Remotes have a mark and a space some remotes have the mark as the high (1) and some have it as low (0) these are different lengths. I have found that easy way to decode these with a pic is to forget about ((IR CODES)) and just make your software look at the pulse train. To pick out which are long and which are short pulses; this can be seen on a scope. All you do when you have the long and short is to count the pulses on the remote pulse train then deduct unwanted pulses and make your code look at the pulses that change when you press different buttons on remote this is usually the last 14 pulses (8 usally gets you most remote buttons) Then set up a loop in your code that checks the amount of long pulses in the last 8 pulses put this into a temp reg,when you have counted 8 pulse changes from high to low ect,then jump to next part of your code you will then have a value in your temp reg for the button pressed. each button will return different values in this reg the rest is history remote_ MOVLW ******* ;this is the amount you want to wast MOVWF COUNT3 TST1_ BTFSS REM GOTO TST1_ CLRF TEMP STP1_ BTFSS REM GOTO STP2_ NOP NOP NOP NOP NOP ;you may have to play with this time for differnt remote NOP INCF TEMP ;check this reg to get your long pulse value GOTO STP1_ ;test again till end of pulse STP2_ MOVLW ******* ;this is the lenth of the long pulses get this by first testing one long pulse ADDWF TEMP BTFSS C GOTO SHORT_ LONG_ BSF PULSE,0 RLF PULSE,F ;must be long pulse DECFSZ COUNT3 GOTO TST1_ ; do it again GOTO next part of code_ SHORT_ BCF PULSE,0 ; you will now have a value in the pulse reg RLF PULSE,F ;that will change for different button presses DECFSZ COUNT3 GOTO TST1_ GOTO next part of code_ there is probably a better and shorter way to do this let me no if you find it