很有用的
fosc/12。
当SM0=0、SM1=1时,串行口以方式1工作。方式1用于串行发送或接受数据,为10位通用异步接口。其中TXD发送数据,RXD接受数据。一帧数据包括:一个起始位,8位数据位(低位在前),1位停止位。方式1的波特率可变,其波特率为2SMOD/32*T1(或T2)的溢出速率。
当SM0=1、SM1=0时,串行口工作在方式2,为9位异步串行通信。方式2和方式1不同的是,它的数据是9位的,即它的一帧包括11位,1个开始位,9个数据位和1个停止位。其中第9位数据是可以自行编程的,可以用来做奇偶校验,也可以用来作地址数据标志位。当SM0=1、SM1=1时,串行口工作在方式3。方式3和方式2差不多,它们之间的差别在于方式2的波特率是固定的,为fsoc/32(SMOD=1)或fsoc/64(SMOD=0时);方式3的波特率是可以变化的,可以自行通过定时器T1或T2设定。
开始
串口初始化
发送数据块
将要发送数据
N
发送完毕?
发送呼叫信号00
Y
等待回答
接收回答
N
正确?
N
01?
Y
返回
Y
图1双机通信发送子程序流程图
2.2波特率的设置
根据串口通信的几种模式,当采用方式0和方式2时,波
特率只与晶振频率有关,分别为fosc/12和fosc/32(或fosc/
64)。这时的计算非常容易。如采用12MHz的晶振时,在方式0,波特率为1Mb/s,即每秒钟可以传送1M位的数据。在方式2时,当SMOD=0时,则波特率为12/64=0.1875Mb/s;当SMOD=1时,波特率增加一倍,为12/32=0.375Mb/s。
在方式1和方式3时,波特率的计算就不仅是与晶振频率和SMOD位有关,还与定时器T1(或T2)的设置有关。
3
单片机之间的通信协议
3.1
单片机双机通信协议
单片机之间的通信中最简单的一种形式就是双机通信,即
直接连接它们的串口,并且共地就可以实现,但这个方法只适用于距离很近的两机,为增加通信距离,可以用RS-422标准,为了减少干扰,可以采用光电隔离的方法。
通信的软件编程需要一系列的协议,即规定相同的波特率和晶振频率,有了这些协议,就可以通过编程实现通信了。双机通信一般有两种编程方法实现:一种是查询方法,一种是中断方法。以查询方法为例,其发送子程序的流程图如图1所示,接收子程序的流程图如图2所示。
开始
串口初始化接收数据块并缓冲
清接收缓冲
N
接收完毕?
接收呼叫信号
Y
计算检验字并比较
Y
00?
Y
N
正确?
回送00到甲机
返回F0到甲机
回送01到甲机
返回FF到甲机
返回
图2
双机通信接收子程序流程图
3.2单片机多机通信协议
目前广泛运用的各种分布式集散控制系统中,往往要使用
多个单片机作为下位机,采集信号,实行现场控制。这时往往采用一个单片机作为主机,控制整个系统的运行,而采用多个单片机作从机,完成现场信号采集与局部控制功能。
主机和从机通过总线连接。主机TXD端口可以向总线发送信号,这些信号可以被所有的从机接收;而各个从机也可以向总线发送信号,而这些信号只能被主机接收。所以各从机都可以和主机自由通信,但是从机之间的通信必须经过主机。
多机通信时,为了保证通信的可靠性,采用了寻址技术,即主机发送一个地址信息给各个从机,各从机接收到地址信息后,便与自己的地址相比较,若相同,则开始与主机通信;若不同,则不理会主机发送的数据信息,也不向总线发送信息。一轮通信完毕,若主机想换一个从机进行通信,则再次发送地址信息,对从机进行寻址。
多机通信时必须使用方式2和方式3。当使用方式2或方
2010.15
61