关于AT89C52定时器0与串口同时运行的问题

做了一个基于定时器0中断的本地时钟,加入串口通信连接其它模块,但使用UART发送内容后,content[0] = content[0] + 1,且定时器0似乎未进入中断程序,去掉后时钟工作正常,求解释。以下为我写的代码。

#include <reg51.h>
#define choice P0 //LED内容选择
sbit wei1 = P2^4;
sbit wei2 = P2^5;
sbit wei3 = P2^6;
sbit wei4 = P2^7; //LED位选
unsigned int timer0count = 0; //50ms定时用
unsigned int content[4] = {5,4,2,2}; //时钟初始化
const unsigned char code character[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
void delay(unsigned int xms)
{
unsigned int i,j;
for(i = xms;i > 0;i--)
for(j = 112;j > 0;j--);
} //软件延时
void TimerInit(void)
{
TMOD |= 0x21;
TL0 = 0x00;
TH0 = 0x4c;
EA = 1;
TR0 = 0;
ET0 = 0;
TR1 = 0;
ET1 = 0;
} //寄存器初始化
void UART_init(void)
{
PCON = 0x00;
SCON = 0x50;
REN = 0;
ES = 0;
} //串口初始化
void UART_open(void)
{
TR1 = 1;
REN = 1;
ES = 1;
} //打开串口收发数据
void UART_close(void)
{
TH1 = 0xFD;
TL1 = 0xFD;
TR1 = 0;
REN = 0;
ES = 0;
} //关闭串口
void Timer0_start(void)
{
TL0 = 0x00;
TH0 = 0x4c;
TR0 = 1;
ET0 = 1;
}//打开定时器0
void Timer0_stop(void)
{
TR0 = 0;
ET0 = 0;
}//关闭定时器0
void UART_send_byte(unsigned char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
} //UART发送一个字符
void Uart_Send_Data(unsigned char* p)
{
while(*p)
{
UART_send_byte(*p);
p++;
}
}//发送一个字符串
void Timechange(void)
{
if(timer0count >= 1200)
{
timer0count = 0;
if((content[2] == 9) && (content[1] == 5) && (content[0] == 9))
content[3] = content[3] + 1;
if((content[1] == 5)&&(content[0] == 9))
{
content[2] = (content[2] + 1) % 10;
if((content[3]>=2) && (content[2] >=4))
content[3] = content[2] = 0;
}
if(content[0] == 9)
content[1] = (content[1] + 1)% 6;
content[0] = (content[0] + 1) % 10;
}
}//时钟改变显示内容
void blinker(void)
{
wei1 = 1;
wei2 = wei3 = wei4 = 0;
choice = character[content[3]];
delay(5);
wei2 = 1;
wei1 = wei3 = wei4 = 0;
choice = character[content[2]]; 
delay(5);
wei3 = 1;
wei1 = wei2 = wei4 = 0;
choice = character[content[1]]; 
delay(5);
wei4 = 1;
wei1 = wei2 = wei3 = 0;
choice = character[content[0]]; 
delay(5);
}//数码管显示
void main()
{
TimerInit();
UART_init();
UART_open();
Uart_Send_Data("Hello!\r\n"); //*
Timer0_stop();
UART_close();
Timer0_start();
while(1)
{
Timechange();
blinker();
}
}
//定时器0中断程序
void timer0() interrupt 1
{
EA = 0;
TH0 = 0x4C;
TL0 = 0x00;
timer0count = timer0count + 1;
EA = 1;
}