关于串口中断的一个问题。求教

2019-07-16 02:29发布

这是郭天翔《新概念51单片机C语言教程》里的一个例子6.5.1,

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char

uchar flag,a,i;
uchar code table[]="i get ";

void init()
{
    TMOD=0x20;
        TH1=0xfd;
        TL1=0Xfd;
        TR1=1;
        REN=1;
        SM0=0;
        SM1=1;
        EA=1;
        ES=1;
}


void main()
{
    init();
        while(1)
        {
            if(flag==1)
                {
                       ES=0;                                 //关闭串口中断
                        for(i=0;i<6;i++)
                        {
                            SBUF=table[i];
                                while(!ti);
                                TI=0;
                        }
                        SBUF=a;
                        while(!TI);
                        TI=0;
                        ES=1;

                        flag=0;
                }
        }
}


void  ser()interrupt 4
{
    RI=0;
          a=SBUF;
          flag=1;
}

       教程里的这个例子下载运行是,为什么在电复位时,在串口调试软件的接受发送缓冲区会自动输出table的“i get  ”?
       如果把if语句里的ES=0去掉,就不会这样。但是教程里说,如果在if语句里不把串口中断关掉,在接下来的发送数据完成后,会触发中断。flag又会值1,再次发送数据,这样会进入死循环。
       可是我去掉ES=0这句后,结果是我给一次SBUF发送一次数据,接受区就输出一次,并没有出现死循环....
       哪位高手能告诉我??谢谢




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。