TSXYZ 发表于 2010-3-7 09:02:37

为啥STC串口中断后不能进入空闲模式

如果设置串口的PCOM=0X01;能够进入空闲模式,串口只能中断1次,不能再次中断。如果不设置,能再次中断,但是不能进入空闲模式
////////////////////
//初始化串口
void INIT_UART()
{
TMOD=0X20;          //定时器1,模式2
TH1=0Xfd; TL1=0Xfd; //9600初值
PCON=0X00;          //串行口不加倍
TR1=1;            //开定时器1
SCON=0X50;          //串行口方式1,SM2置位为0,REN=1允许接收,TB8,RB8,TI,RI清零
ES=1;
EA=1;               
}

///////////////////////////
///串口中断
void receive() interrupt 4
{
uchar x;
ES=0;
if(SBUF=='@')
    {
       for(x=0;x<6;x++)
          {
             while(!RI);RI=0;
             ORDER=SBUF;
          }
       if(ORDER==ORDER^ORDER^ORDER^ORDER^ORDER)
          {            
             SBUF=0xDD;
             while(!TI);TI=0;
          }
   }
   CLEAR_ORDER();
   ES=1;
PCON=0X01;

}


void main()   
{
   INIT_UART();      
   CLEAR_ORDER();
   PCON=0X01;
   while(1);
}

ct_dev 发表于 2010-3-7 09:57:53

void receive() interrupt 4
{
uchar x;
ES=0;
if(SBUF=='@')
    {
       for(x=0;x<6;x++)
          {
             while(!RI);RI=0;
             ORDER=SBUF;
          }
       if(ORDER==ORDER^ORDER^ORDER^ORDER^ORDER)
          {            
             SBUF=0xDD;
             while(!TI);TI=0;
          }
   }
   CLEAR_ORDER();
   ES=1;
//PCON=0X01;

}


void main()   
{
   INIT_UART();      
   CLEAR_ORDER();
//   PCON=0X01;
   while(1)
       PCON=0X01;
}

TSXYZ 发表于 2010-3-7 10:11:23

万分感谢,可以了。

Joyway 发表于 2011-8-12 11:01:04

楼主这种情况是啥原因呢,是不是因为没有退出中断的原因呀,

gwdong 发表于 2011-8-12 11:15:00

可能是因为没有从ISR退出,中断不会响应,于是不能从睡眠唤醒.....
页: [1]
查看完整版本: 为啥STC串口中断后不能进入空闲模式