STC89C51中的中断和flag有关问题

STC89C51中的中断和flag问题
1.中断
定义了一个void Ser()interrupt4
                      {
                           RI=0;
                           RxData=SBUF;
                           flag=1
                      }
主程序void main()
        SCON=0x50;  
TMOD|=0x20;  
TH1=0xE6;  
TR1=1;  
EA=1;  
ES=1;
if(flag==1)
{
ES=0;
SBUF=RxData;
while(!TI);
TI=0; 
ES=1;
flag=0;
}
不知道怎么回事,串口调试窗口里面要么收不到我发送的数据,要么很久才收到一个,然后又收不到了晶振我用的是12M,波特率是1200
2.flag问题
我在外面定义一个unsigned char flag=1;然后主程序里面if(flag==1){SBUF=buffer;}最后buffer怎么没办法赋值给SBUF,实在是费解。。。本人小白一个,还请各路大神予以细心解答,感激不尽!!!
------解决思路----------------------
1、你主程序要弄个死循环,不然跑完直接一下就跑飞了
2、中断和主程序中都用到的变量 要定义成volatile类型,至于原因自己谷歌,不作多余解释了。
volatile unsigned char flag=1;
------解决思路----------------------
引用:
1、你主程序要弄个死循环,不然跑完直接一下就跑飞了
2、中断和主程序中都用到的变量 要定义成volatile类型,至于原因自己谷歌,不作多余解释了。
volatile unsigned char flag=1;

不错,没有死循环,主程序一下就跑完了,这时接收中断还没收到字符呢。把if(flag==1) 到flag=0这段放到一个死循环里面反复执行。另外flag应该初始化为0