Gut.
Also so arg isses auch wieder nicht. Das "Modell" byte machst du besser verkehrt, mit 1-er, is besser zum shiften.
Code:
char  bMsk;
char bCol;

TRISB = 0x0F; 

bMsk = 0x01;
for (iX = 0; iX < 4 ; iX++)
{
             PORTB = 0;
             PORTB |= ~bMsk;
             bCol = PORTB & 0xf0;             
           //  auswerten  Taste
             bMsk <<= 1;              
}
Dazu kommt natürlich noch der ganze spaß mit entprellen und umsetzen auf zeichen. *g*