在具体操作串口之前需要对单片机的一些与串口有关的特别功用寄存器进行初始化设置,主要是设置发生波特率的定时器1、串行口操控和中止操控。具体步骤如下:
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
D7D6 D5 D4 D3 D2 D1 D0
EA-ET2ESET1 EX1 ET0 EX0
S是串行口中止答应位,坐落地址为0XA8的中止答应寄存器IE中的第4位。
ES位用来操控单片机串行口的使能。当ES = 0时,不答应串口中止,当ES = 1时,则答应串口发生中止。
串口的中止一起还遭到单片机的总中止操控位EA的操控。当EA=0时,单片机屏蔽一切的中止请求,只有当EA=1,且ES=1时才答应发生串口中止。