具体步骤如下:
1. 确定T1的工作方式(编程TMOD寄存器)
2. 计算T1的初值,载入TH1、TL1
3. 启动T1(编程TCON中的TR1位)
4. 确定串行口工作方式(编程SCON寄存器)
5. 串行口工作在中断方式时,要进行中断设置(编程IE,IP)
在第4步初始化当中:
REN=-1;
SM0=0;
SM1=1;
这三位都是串行口控制寄存器SCON里的,单片机刚上电时SCON被清零,因为串口方式为0,穿行口为同步移位寄存器的输入/输出方式,当执行完REN = 1这条语句后,它便直接开始从RXD引脚接收数据,并不管它连接的系统有无发送数据这是SM0和SM1还未被操作,可单片机串口寄存器已经收到数据,并且已经产生了串口中断。
当运行完SM0=0;SM1=1这两条指令后,串口方式才被设置为工作方式1,这时才终止串口接收数据。
修改方法:
先设置串口模式,再允许串口接收,这样就可以避开串口方式0接收数据。
SM0=0;
SM1=1;
REN=1;
ES是中断允许位。如果你ES=0的话
TI 和RI为1,都不会去执行串口中断函数。
TI是发送标志位。发送完成,该位置1,他跟ES没关系。
RI是接收标志位,接收完成,该位置1,也跟 ES没直接关系。
一般来说,ES就是当有TI或RI事件发生时,是否跳出当前所在执行的函数到中断函数里去处理。
REN:允许接收位。
REN用于控制数据接收的允许和禁止,REN=1时,允许接收,REN=0时,禁止接收。
EA (IE.7):
EA=0时,所有中断禁止(即不产生中断);EA=1时,各中断的产生由个别的允许位决定
ES (IE.4):
串行口中断充许(ES=1充许,ES=0禁止)
不是执行REN激活的串口中断4,而是ES =1打开的串口中断4
REN是和中断无关的参数,只是控制串口接收的数据进入到BUFFER中,并不产生数据中断
最后来看看位于IE寄存器中的ES位,如表12.4所示。
表12.4 中断允许寄存器IE
IE D7 D6 D5 D4 D3 D2 D1 D0EA - ET2 ES ET1 EX1 ET0 EX0
S是串行口中断允许位,位于地址为0XA8的中断允许寄存器IE中的第4位。
ES位用来控制单片机串行口的使能。当ES = 0时,不允许串口中断,当ES = 1时,则允许串口产生中断。
串口的中断同时还受到单片机的总中断控制位EA的控制。当EA=0时,单片机屏蔽所有的中断请求,只有当EA=1,且ES=1时才允许产生串口中断。