程序如下
#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多,而且你定时器也用到了中断,所以何必呢?