just notice it takes a long time to get a sample , doing a pulsin sample serial of 32 bits ,arranging it to make a byte value , write to eprom if the byte data changes only ( 4 bytes) then go do the lot again , i did a debug cycle test , and it takes about 1 sec a loop which seem really long to me doing a sample at 4mhz i am playing with increasing the osc to 8mhz , which should help . but a way to stream line the code would be a better approach , just not sure how to do it

GetIRcode:

TRISIO = %00111111 ' setup input=1,output=0 GPIO.0 = 1 to input
PULSIN GPIO.0,1,Leader ' get leader high pulse time value in on GPIO.0
IF Leader < 400 tHEN return ' look for 4500us high pulse below 4000us then its 2nd key area pulse or data/ address bits
IF Leader > 480 tHEN return ' above 4800us then it no sig

FOR X = 0 TO 31 ' grab 32 incoming pulses
PULSIN GPIO.0,1,BtnVal(X) ' now measuring high-going pulse widths
NEXT X

z = 0 ' Z points to start range of byte
S = 7 ' S points to end range of byte
X = 0 ' start X at 0 to line up with BtnVal array
for Y = 1 to 4 ' Get in Array and decode 4 bytes from 32 bit pulses
T = 7 ' Set T to 7 so that it puts BtnVal(0) in to D7 location
FOR X = Z TO S ' sort 8 pulses of byte

IF BtnVal[X] > 150 THEN ' > 150 x 10uS = > 1.5mS pulse period = 1
DByteTmp = DByte[Y] ' get into temp var

DByteTmp.0[T]=1 ' Set value to 0 or 1 , T reverses bit order of BtnVal(x) so byte has correct bin value to write byte
ELSE
DByteTmp.0[T]=0
ENDIF

DByte[Y] = DByteTmp ' get it back into DByte(y)
T = T - 1 ' T points to next MSB on loop
NEXT X

Z = x ' Z = X (0,8,16,24) points to start of next byte
S = 7 + X ' S (7,15,23,31) points to End of next DByte BtnVal offset to X
next Y ' loop for 4 bytes


' only save code if it differnat to stored IR code

for x = 1 to 4
if DByte[x] <> STDByte[x] then
wrITE x,DByte[x]
endif
next x

Return