Die PullUp-Widerstände sind in der Tat unumgänglich, da ansonsten die Eingänge bei offenem Schalter frei "in der Luft" hängen, und sich aufgrund ihres sehr hohen Eingangswiderstandes ein völlig unkalkulierbares Gemisch an wilden Störsignalen einfangen. Deshalb müssen sie unbedingt über einen hochohmigen Widerstand auf einen sauberen High-Pegel gezogen werden. Und die haben die Controller gleich eingebaut - man aktiviert sie, indem man die entsprechenden Bits im PORT-Register auf 1 setzt (wie peterfido ja schon beschrieben hat).

Aber in Deinem Code ist auch noch ein kleiner Denkfehler drin:

Die Taster sollten lediglich je die passende LED kurz aufblinken lassen wenn man die drückt.
Das tut Dein Code grundsätzlich auch. Aber was passiert, nachdem die LED 30 ms an war und wieder ausgeschaltet wurde? Der Controller ist bereits nach wenigen Befehlen wieder an dem gleichen Punkt, an dem der Taster abgefragt wird und die LED erneut für 30 ms angeschaltet wird. Bei 4 MHz dürften die LED somit nur wenige Mikrosekunden aus sein, bis sie wieder für 30 ms angeschaltet wird - und das erscheint dem Auge natürlich als ein dauerhaftes Leuchten.