hi

das Register LATB ist ein Latch und enthält die sollzustände der ausgänge das Register PORTB entält die Level an den pins. warum das sein mus steht hier. wenn du einen ausgang setzen willst dann must du das bit im Latch setzen und wenn du ein Level von einem eingang einlesen willst dann must du das über das Register PORT machen ist aber glaub ich erst ab den 18er typen so. die pullups von PORTB sin nach einem (POR) Power On Reset aus du kannst sie über das Register INTCON2 bit 7 (RBPU) einschalten die beschreibung dazu findest du in dem datenblatt von deinem PIC.

du schreibst TRISB &= 0xF5

da ist dein problem es mus heisen TRISB = 0xF5 da bei einem bitweise & (und) die bits nur eins sind wenn beide eins sind also von 0xF5 und von TRISB da aber von der vorherigen LED Farbe die Bits bereits 0 sind werden sie nicht 1 und du hast beim umschalten alle ports als ausgänge!!!!

auserdem kannst du besser 0b11110101 stat 0xf5 schreiben das ist übersichtlicher

noch mal zusammengefasst

TRISB &= 0b11110101
TRISB hat den wert 0b0b11111010 (von der letzten LED) also...

0b11111010 &= 0b11110101
ergibt
0b11110000

wenn du die ersten vier bits unabhängig von den letzten verändern willst ann must du das so machen

Code:
#define mInitRedLED()       LATB &= 0b11110000; TRISB |= 0b00001111; TRISB &= 0b11110101;
von LATB die ersten vier bit löschen
von TRISB die ersten vier bit setzen
von TRISB die bits 1 und 3 löschen