在很多应用场合下,我们都希望单片机应用系统能够与其它系统(计算机、PLC或另一个单片机应用系统)进行通信,51单片机内部集成了一个异步串行通信口(UART),应用这个UART,我们可以很方便地与一切具有UART接口的其它系统进行通信。
要在两个不同的系统中进行通信,必须保证它们具有相同的通信协议和相同的波特率,而且能够按照通信的协议发送和接收数据,为此需要设计串行通信程序。
1.51单片机的UART接口
51单片机的UART接口是一个全双工的串行接口,它能同时发送和接收数据。51单片机的UART接口有4种工作方式,需要通过对特殊功能寄存器SCON的设置来定义串行口的操作方式和控制它的某些功能。
SM0 SM1=00为移位寄存器方式(串行口工作方式0),SM0SM1=01为8位UART方式(串行口工作方式1),SM0 SM1=10为9位UART方式(串行口工作方式2),SM0SM1=11为9位UART方式(串行口工作方式3)。
不同的工作方式还具有不同的波特率,串行口以方式0工作时,波特率固定为振荡器频率的1/12。为方式2时波特率为振荡器频率的l/64或1/32。它取决于特殊功能寄存器PEON中的SMOD位的状态。如果SMOD=0(复位时SMOD=0),波特率为振荡器频率的1/64。如果SMOD=1,波特率为振荡器频率的1/32。
方式1和3的波特率由定时器1的溢出率所决定。当定时器1作波特率发生器时,波特率由下式确定:
波特率=(定时器l溢出率)/n式中:定时器1溢出率=定耐器1的溢出次数/秒,n为32或16,取决于特殊功能寄存器PCON中的SMOD位的状态,若SMOD=0,则n=32,若SMOD=1,则n=16。
对于定时器的不同工作方式,得到的波特率的范围是不一样的,这主要由定时器1的计数位数不同所决定。
2、串行通信程序的设计要素
51单片机串行通信程序的设计包括4项基本内容:
◆初始化程序
通过对特殊功能寄存器SOON和PEON的设置,来选择串行口的工作方式,设置通信的波特率。如果通信采用中断方式,则还要对中断系统进行设置。
◆发送数据的程序
51单片机串行口发送数据的条件是串行口已准备好,此时标志位TI的状态为“1”,串行口发送数据的方法很简单,只要由一条写SBUF指令(例:MOV SBUF,A)将待发数据传送到发送数据缓冲器SBUF,即启动一次发送。
◆接收数据的程序
51单片机串行口接收数据的条件是SOON中的REN为“1”,接收时,在接收控制逻辑的作用下,按确定的波特率进行移位操作。将RXD脚输入的状态逐位移入移位寄存器中,待接收完一个字节的数据后,自动将其并行地装入接收缓冲寄存器SBUF中,同时将SCON中的RI置“1”。标志位RI的状态为“1”,表明串行口已经收到一个字节的数据,此时用一条读SBUF指令(例:MOV A,SBUF)即可取得收到的数据。
◆通信控制程序
用来控制发送与接收的进行,一般将其融合在收发程序中。