I think rise and fall time are not at issue here, rather the time at 1 or 0 state. But if your instruction execution time is 1 uS, then I think the minimum time requirement is met.
I'll spell out the init sequence, just like it shows in the data sheet (almost).
E, RS, R/W all start out low, D0-D3 of the LCD are wired low.
Do delay of 15 mS after power is applied
Put 0011 (0x3) on data port (d7=0, d6=0, d5=1, d4=1)
Toggle E: L>H>L
Do a delay of 5 mS
Toggle E: L>H>L
Do a delay of 100 uS
Toggle E: L>H>L
Put 0010 (0x2) on data port
Toggle E: L>H>L
(Starting here you may use the two nibble write routine that I posted earlier)
Send command 0x28 (the upper nibble 0x2 is already on the data port)
Toggle E: L>H>L (upper nibble of 0x28)
Put 1000 (0x8) on data port
Toggle E: L>H>L (lower nibble of 0x28)
Do a delay of 2 mS (unless you use the 2 nibble write routine, which has the delay included).
Send command 0x01
Put 0000 on data port
Toggle E: L>H>L
Put 0001 on data port
Toggle E: L>H>L
Do a delay of 2 mS (unless you use the 2 nibble write routine, which has the delay included).
Send command 0x06
Put 0000 on data port
Toggle E: L>H>L
Put 0110 on data port
Toggle E: L>H>L
Do a delay of 2 mS (unless you use the 2 nibble write routine, which has the delay included).
Send command 0x0C
Put 0000 on data port
Toggle E: L>H>L
Put 1100 on data port
Toggle E: L>H>L
The display should now be initialized with the cursor at home (cursor is not turned on, so you wont see it). If you want the cursor on, use 0x0E instead of 0x0C in the last command. You can now write characters (with RS pin high), in the same fashion, or use the function I posted.