You need to configure the timer and interrupts before you can use them. In main() you need at least the following configuration bits set in order to be able to turn the timer on with "TR0 = 1;" :
Set those bits first thing in main() and this should do the trick:
TMOD = 0x01; // 16-bit no auto reload
TH0 = 0xDC; //Set high and low bits to count 0xFFFF - 0xDC00 = 0x23FF counts
TL0 = 0x00;
ET0 = 1; // Enable timer0 interrupt
EA = 1; // Enable all interrupts
//TR0 = 1; //Enable Timer0 immediately
The rest of your code should run fine.
Note: you could change your interrupt function definition to: "void timer0_isr(void) interrupt 1 using 1" to force it to use register bank 1 for the interrupt function operation.