I have a strange behavior.

The signal I am supposed to get is:

Assuming the normal state is low, I drive the input pin low with an IR receiver-demodulator.

2400us low (=header), then for each of 16 bits I have a bit prefix which is a 600us pause then if the bit is = 1 there will be a 1200us low or if bit = 0, there will be 600us low.

The incoming IR signal triggers an int on RA4 and then I start pulsin-ing to get the data.

The sequence I get is something like:
127,261,136,251,140,137,137,136,136,247,261,136,24 7,0,0,0
0,1,0,1,0,0,0,0,0,1,1,0,1,?,?,?

There seems to be an offset somewhere. I don't seem to get the first bit.
Maybe it takes too much time to get to the routine that checks the pulse durations???

The data structure I am supposed to get is:
0,0,1,0,1,0,0,0,0,0,1,1,0,1,?,?


Here is my code, in the case someone has an idea:

Code:
'-------------------------------------------------------------------------------
'----- HEADER PULSE ------------------------------------------------------------
'-------------------------------------------------------------------------------

'based on pulsin routines from: http://rentron.com/PicBasic/IR_Chips.htm

PULSIN PORTA.4,0,pulse_in        '// Read-in start pulse - in a word var!!
IF (pulse_in < 480) OR (pulse_in = 0) THEN '// Less than header, then keep looking
   'GOTO bypass
ENDIF


'-------------------------------------------------------------------------------
'----- get 2 databytes ---------------------------------------------------------
'-------------------------------------------------------------------------------

'Maybe it is too late to get the header because pulsin may reacto to a high to low transition
'while we are ALREADY in the low state, so the header will be bypassed ????

FOR i = 0 to 15                     'get a sequence of incoming 16 bits (WITHOUT their prefixes)
    PULSIN PORTA.4,0,ir_pulse[i]    '// Read 16 low-going pulses on RA.4
NEXT i                              '// Loop 16 times

'    LCDOUT $fe,1,"hdr:",#pulse_in
' PAUSE 2000

'databyte = $FF                    '// Start with all 1's and find each 0

'we scan the second byte we stored from MSB to LSB
'FOR i = 8 TO 15                     '// Get 8 "data" bits
FOR i = 0 TO 15                     '// Get 8 "data" bits
    LCDOUT $fe,1,#i,":",#ir_pulse[i]
    PAUSE 2000
    IF (ir_pulse[i] < 240) THEN       '240*5us resolution at 8MHz = 1200 us
        databyte.0(15-i) = 0               'clear the bit
    ELSE 
        databyte.0(15-i) = 1
    ENDIF
NEXT i