描述:
            #include <reg52.h>
#include<stdio.h>
#define jingzhen     11059200UL			 /*使用22.1184M晶体*/	 
#define botelv   9600UL		     /*波特率定义为9600*/
unsigned char zifuchuan[]="abcdefg哈哈";			//待显示字符。
volatile unsigned char sending;
unsigned char i=0,print_flag=0;
unsigned int time=0;
sbit s3=P3^2;  //INT0    s3触发关
sbit s2=P3^3; //INT1	 s2触发开
sbit led1=P1^0;
sbit led2=P1^1;
void waibuzhongduan_init()
{
     //P3|=0x0f;
	 EA=1; //开启全局中断
	 EX0=1;	 //外部中断0开启
	 IT0=1;	 //下降沿触发
	  
	 EX1=1;	  //外部中断1开启
	 IT1=1;	 //下降沿触发
}
void delay(unsigned char i)
{
	unsigned char j,k;
	for(j=i;j>0;j--)
		for(k=90;k>0;k--);
}
void Timer0_init() //定时器初始化函数
{
    TMOD|=0x20;      //设置计数器1的工作方式2
	TH1=0xfd;			//设置计数器1的初值,决定波特率
	TL1=0xfd;			//设置计数器1的初值,决定波特率
	PCON=0x00;      // 波特率倍增0x00不加倍	 0x80加倍
	SCON=0x50;		//设置工作方式1 开启接受允许
	EA=1;		    //开启总中断
	ES=1;			//开启串口接受中断
	TR1=1;			//计数器1开始运行
    TMOD|=0x01;//选择T016位定时器模式
    TH0=(65536-45872)/256;
    TL0=(65536-45872)%256;//赋初值
    //EA=1;//全局中断开
    ET0=1;//T0中断开
    TR0=0;// T0计时器关
}
/*void on_off()
{
	 if(s2==0)
		{
			delay(10);
			if(!s2)
			{
				while(!s2);		   
			    TR0=~TR0;//s2为计时开关
			}
		}
} */
void display_str ()
{
    unsigned int  idata times[10];
   if(2==i)
   {
   //sendc(zifuchuan);
   sprintf(times,"%d",++time);
   ES=0;
   TI=1;
   printf("%s\n",times);
   while(!TI);
   TI=0;
   ES=1;
   i=0;
   }
   led2=~led2;
}
void main()
{
    waibuzhongduan_init();
	Timer0_init();
	while(1)
	{
	if(print_flag==1)
	    display_str();
	}
}
void timer0 ()interrupt 1 //中断函数  (50ms)
{
 TH0=(65536-45872)/256;
 TL0=(65536-45872)%256;//赋初值
  i++;
}
void ITN1 ()interrupt 2 //中断函数  开启定时器
{
   print_flag=0;
   TR0=1;
   led1=~led1;
}
void ITN0()interrupt 0 //中断函数  关闭定时器
{										   
   TR0=0;
   display_str();
   delay(5);
   i=0;//置0
   time=0;
   print_flag=1;
    led1=~led1;
}
解决方案1:
            void ITN0()interrupt 0 //中断函数  关闭定时器
这个函数里不要放那么多东西
  display_str();
   delay(5);
去掉
        

