双机串行通信软件编程

串行口的4种工作方式中的方式0是移位寄存器工作方式 , 主要用于扩展并行I/O用 , 并不用于串行通信 。串行口的方式1~3是用于串行通信的 , 下面介绍串行口的方式1~3的双机串行通信软件编程 。应当说明的是 , 下面介绍的双机串行通信的编程实际上与各种串行标准的硬件接口电路无关 , 因为采用不同的标准串行通信接口仅仅是由双机串行通信距离、传输速率以及抗干扰性能来决定的 。
1.串行口方式1应用编程
例如:采用方式1进行双机串行通信 , 收、发双方均采用6 MHz晶振 , 波特率为2400bit/s , 一帧信息为10位 , 第0位为起始位 , 第1~8位为数据位 , 最后1位为停止位 。发送方以78H、77H单元的内容为首地址 , 以76H、75H单元内容减1为末地址的数据块通过串行口发送给接收方 。
发送方要发送的数据块的地址为2000H~201FH 。发送时先发送地址帧 , 再发送数据帧;接收方在接收时使用一个标志位来区分接收的是地址还是数据 , 然后将其分别存放到指定的单元中 。发送方可采用查询方式或中断方式发送数据 , 接收方可采用中断或查询方式接收 。下面介绍收发双方均采用中断方式的串行发送、接收程序 。
(1)甲机发送程序 。
中断方式的发送程序如下:
 
(2)乙机接收程序 。
中断方式的接收程序如下:
【双机串行通信软件编程】 
2.串行口方式2应用编程
方式2和方式1有两点不同之处 。方式2接收/发送11位信息 , 第O位为起始位 , 第1~8位为数据位 , 第9位是程控位 , 该位可由用户置TB8决定 , 第10位是停止位1 , 这是方式1和方式2的一个不同点 。另一个不同点是方式2的波特率变化范围比方式1小 , 方式2的波特率一振荡器频率/n 。
当SMOD=O时 , n=64 。
当SMOD=1时 , n=32 。
鉴于方式2的使用和方式3基本一样(只是波特率不同 , 方式3的波特率要由定时器Tl的溢出率决定) , 所以方式2的具体编程应用 , 可参照下面介绍的方式3应用编程 。
3.串行口方式3应用编程
例如:AT89S51单片机用串行通信方式3进行发送和接收的应用实例 。发送方采用查询方式发送地址帧 , 采用中断或查询方式发送数据 , 接收方采用中断或查询方式接收数据 。发送和接收双方均采用6MHz的晶振 , 波特率为4800 bit/s 。
发送方首先将存放在78H和77H单元中的地址发送给接收方 , 然后发送数据OOH~FFH , 共256个数据 。
(1)甲机发送程序 。中断方式的发送程序如下:
 
(2)乙机接收程序 。接收方把先接收到的数据送给数据指针 , 将其作为数据存放的首地址 , 然后将接下来接收到的数据存放到以先前接收的数据为首地址的单元中去 。
采用中断方式的接收程序如下:
 
一般来说 , 定时器方式2用来确定波特率是比较理想的 , 它不需要用中断服务程序设置初值 , 且算出的波特率比较准确 。在用户使用的波特率不是很低的情况下 , 建议使用定时器T1的方式2来确定波特率 。

    推荐阅读