PIC16F876 RB6/PGC weirdness

Here's a weird problem I encountered with a PIC16F876 device. The
same may or may not occur on other PIC devices as well.

I was using the '876 as the brains of a stepper motor control
thingy (as part of a custom rotateable sample jig in an EDM machine), with a four-button keypad. The four push-button
switches were connected to
the RB4, RB5, RB6 and RB7 pins of the
device. The other ends of the switches were connected to ground. Like this:

The
four PORTB pins were configured as inputs, with their internal
pull-ups active. Simple, yes? The other pins of the PIC controlled
the stepper motor electronics and also drove a multiplexed four-digit
7-segment LED display. Those are not shown here.

Everything worked fine on breadboard. But when I soldered up the final
PCB and put the keypad at the end of a 1.5 m long cable, something
strange happened. One of the keys on the keypad caused erratic
and frankly quite impossible behavior in the PIC. Behavior that
did not make sense at all. Not something you'd expect from switch bounce
or some such effect (I accounted for switch bounce in the software), but it appeared to completely mess up program
execution within the device. As if it caused an unintentional jump
to some odd position in the program. The device would start doing odd
things—performing bits of existing program out of sequence—and finally would crash completely.

Mind you, the other three keypad buttons worked just fine. It was only the
one wired to RB6/PGC that caused the program to crash. And only
when the keypad was wired through a long cable. The cable terminated in
a jumper block near the PIC—if I disconnected that and simulated a keypress by shorting the
appropriate pins with a paperclip, there was no problem! But the keypad
at the end of its long cable caused the program to misbehave.

Apparently, the increased inductance or capacitance or whatnot of the cable
caused the transition at the input pin to do something weird, perhaps
a momentary voltage spike outside the supply rails—I don't know,
I did not put an oscilloscope probe at the input to look. And apparently
RB6 was more sensitive than the other pins, perhaps due to it being
a programming pin (although the device was not in programming mode, of
course). During programming, the RB6/PGC pin clocks the program counter through
the program memory, so perhaps unwanted voltage spikes during operation can
also cause glitches to the program counter? Who knows.

The solution, finally, was to put a 100-ohm resistor in series with the
input pin, close to the PIC. Suddenly everything just worked again. I don't know whether
this is specific to the PGC pin in this device, or whether an even longer
keypad cable would have caused similar problems with RB7/PGD as well,
perhaps also with RB4 and RB5? Just to be safe, I put similar
series resistors on all four inputs. And just in case similar problems
might exist in other PIC devices as well, I have made a point of
using series resistors whenever there is any significant length of wire
leading from a keypad or an interlock microswitch to a digital input pin.