Well, 8051s aren't used in Arduino, so I don't know how many answers you'll get.
IIRC, most 8051-like chips have essentially open-drain outputs on the PORTs. This means that writing a "1" simply enables a pull-up resistor (on some ports), so that the pins can "source" very little currrent (even though they can "sink" moderate amounts.) My 89C52 data sheet says they can sink up to 10mA, but output voltage above 2.4V is only guaranteed for source currents of 800uA. Port 1 and 2 are supposed to have internal pullups, but it looks like port0 is "pure" open-drain - it won't source voltage at all.
I think the compiler will optimize out those loops you're hoping to use for a delay, so instead of actually delaying execution, I would wager that your delay implementation has been completely optimized out, so the delay(1000) is executing in a couple of microseconds, rather than acting as a delay.
You also don't appear to actually be changing the LED: You've initialized led=P1^0, so led is ending up set to whatever P1^0 (I'm guessing that's the port register on the 8051's?) is at startup, and then you assign other values to it. But nowhere do you write the new value of led to P1, so you're not changing the pin anywhere after setup().