Me cuesta entender por que se complican tanto. Los puetos de estos microcontroladores son todos I/O, las diferencias son que el puerto 0 (P0) no tiene pull up interna, con lo cual se debe poner pull up externa. Para que un puerto sea de entrada, ademas de tener pull up, es necesario colocarlo a "1", que en realidad lo que se hace es poner en alta impedancia el transistor de salida, la pull up se encarga de poner la entrada en "1", entonces se puede sensar, si se coloca por ejemplo un pulsador a masa, si dicha entrada es uno o cero.
Espero que te sirva, no creo que necesites el codigo para hacer esta pavada pero igual lo pongo:
Suponiendo el puerto 0 (P0), con pull up externa: P0.X = 1;
Siendo X el bit a emplear como entrada.