Hallo, was warteschleifen in C angeht, mußt Du nicht unbedingt was eigenes erfinden, guck mal unter util/delay.h
Code:
 
nibble=data/0b00010000;
data / 16 einfacher zu lesen wäre es mit 4 mal rechts schieben
Code:
nibble=data>>4;
Aber der Fehler liegt wohl hier:
Code:
 LCD_PORT=nibble&&00001111;
&& ist eine logische UND Verknüpfung bitweise UND macht man mit einem &
Code:
 LCD_PORT=nibble&00001111;
Vielleicht hilft es weiter
Gruß Sebastian