当前位置: 代码迷 >> 单片机 >> 封闭串口中断,也可以利用串口发送和接收数据
  详细解决方案

封闭串口中断,也可以利用串口发送和接收数据

热度:96   发布时间:2016-04-28 15:02:44.0
关闭串口中断,也可以利用串口发送和接收数据?
 程序如下

#include<reg52.h>
char a;
void main()
{
EA=1;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
ET1=0;  
TR1=1;   

ES=0;//stop the serial interrupt 
REN=1;
SM0=0;
SM1=1; 
while(1)

     if(RI==1)
     {
RI=0;
a=SBUF;
P1=a;
SBUF=a;
    }
     else if(TI==1)
     TI=0;                       
}
}

我把串口中断ES=0了,中断都被关闭了。我还是可以发送和接收数据。所以我认为,ES只是作用于“中断服务程序,也就是 void Serial_interrupt_function() interrupt 4 ”只有在void Serial_interrupt_function() interrupt 4,ES才有绝对控制权。

中断的目的是获得CPU的响应。既然我们可以不用中断就可以获得CPU的响应,那用中断的意义就没了,就像上面的程序一样,while(1)可以一直占用CPU,CPU就可以直接处理While(1)中的代码指令。CPU直接响应发送和接收数据了。

串行通信有TXD和RXD,这两根线是物理连接P3.0和P3.1口的。所以物理上是通路。只要REN=1,就允许接收和发送。

ES是用于获得CPU响应的,串行通信的硬件电路和ES应该没关系?
------解决方案--------------------
通常发生是不用中断的。
接受 用中断 是 因为 不知道 字符 什么时候 会来, 
你 不用中断 就得 查询, 而查询 会 占 cpu 大量时间。
------解决方案--------------------
定时器还是轮询啊,轮询次数是比死循环少,但是还是比打开串口中断占用的CPU多,而且你定时器也用到了中断,所以何必呢?
  相关解决方案