点对点通信是单片机串行通信中比较简单的一种。由于通信双方同为单片机,接口电平相同,硬件上只要将双方的txd与rxd互相接通就可以了,如图56所示。
图5-5 max232的引脚排列
图5-6 单片机点对点通信的硬件连接
软件方面,可以采用查询或中断两种方式进行设计。查询方式通过cpu不断扫描ti/ri状态进行发送/接收操作,中断方式则利用中断服务程序执行数据的发送和接收。一般来讲,中断方式可以有效提高cpu利用效率,适用于各种单片机系统,对大、中型控制系统尤其适合;查询方式中cpu反复扫描,占用资源较多,通常只用于功能较少、较单一的场合。下面分别举例介绍。
【例5-1】 单片机甲和单片机乙进行点对点数据通信,甲作为发送方将片内ram中30h~50h单元中的数据发送给乙方,乙方接收到上述49字节数据后,依次存入片外ram的2030h~2050h单元中。要求甲、乙双方均采用工作方式1,通信波特率为9500bit/s,累加和校验,晶体振荡频率为11.0592mhz。
解:(1)题目分析 点对点通信功能要求较少时采用查询方式或中断方式都可以实现,不管采用何种方式,程序的整体组成都大体相近,都由初始化部分、发送部分、接收部分等组成。初始化部分主要完成串口参数设置、数据入口设置等,发送部分根据ti状态逐字节发送数据信息及校验信息,接收部分则根据ri状态读取数据信息和校验信息,并根据校验结果返回接收状态。
(2)查询方式 单片机甲初始化部分的内容包括:
1)设置scon:采用工作方式1,故sm0=0,sm1=1,sm2=0;允许接收,故ren=1;其余tb8、rb8、ti、ri均为程序中使用,在初始化时无需考虑。综上,取scon=50h。
2)设置波特率:通信波特率为9500bit/s,晶体振荡频率为11.0592mhz,t1工作在工作方式2,为8位时钟,查表可取smod=0,t1初值为th1=0fdh,tl1=0fdh。
3)设置数据参数:待发送数据为30h~50h单元中的内容,可设置首地址为30h,数据长度为49。
单片机甲发送部分的内容包括:
1)发送数据:取出1字节数据放入累加器a中,然后送至sbuf,串口自行完成发送过程。
2)求累加和:将发送数据进行累加和计算。
3)完成1帧发送:读取ti值,当ti为1时将其清0,完成本次发送。
4)校验:所有数据发送完成后,计算最终累加和,并通过串口发送至单片机乙,然后等待乙机应答,若应答为“f”则重新发送所有数据,若应答为“t”则完成发送。
单片机乙初始化部分的内容包括:
1)设置scon:同单片机甲。
2)设置波特率:同单片机甲。
3)设置数据参数:接收数据存放在片外2030h~2050h单元中,可设置首地址为2030h,数据长度为49。
单片机乙接收部分的内容包括:
1)接收数据:反复读取ri值,当ri为1时将其清0,并将sbuf中的内容送至累加器a中。
2)转存:将a中数值送至相应存储单元,并进行累加和计算。
3)校验:当接收数据完成后,再进行最后的累加和接收,将接收到的累加和与自行计算得到的累加和进行对比。若二者不同,说明传输数据错误,向单片机甲返回“f”,重新接收所有数据;若二者相同,则认为接收成功,向单片机甲返回“t”,完成本次接收。(www.xing528.com)
实现上述点对点通信过程的完整程序如下:
(3)中断方式mcs-51系列单片机专门配置了一个中断源用于串行通信,采用中断方式进行串行通信可大幅提高单片机cpu的工作效率。中断方式实现串行通信通常由两大部分组成,即初始化部分和中断服务程序部分。初始化部分主要完成串口、时钟、中断等参数配置,由于是连续数据发送,初始化部分还需发送第一字节;中断服务程序是中断方式串行通信的核心,在第一字节发送完毕后ti置位,触发串行中断,执行中断服务程序,完成所有剩余数据的发送。
单片机甲初始化部分的内容包括:
1)设置scon:与查询方式相同,取scon=50h。
2)设置波特率:与查询方式相同,取smod=0,tmod=20h,th1=0fdh,tl1=0fdh。
3)设置数据参数:设置首地址为30h,数据长度为32h,程序中先判断发送个数,后发送数据,因而长度数据长度设置为32h。
4)设置中断参数:①中断优先级——因为只有串行中断,中断优先级可以忽略;②中断允许——分别设置ea=1和es=1,或直接设置中断允许寄存器ie=90h;③中断向量——在串行中断向量0023h处添加跳转指令,当中断发生时自动跳转至中断服务程序执行。
5)发送第一字节:取第一字节数据并发送,计算累加和。
单片机中断服务程序部分的内容包括:查看ti和ri标志,若为ti,继续发送数据,计算累加和,直至发送完毕;若为ri,则表明接收到对方应答信息。若应答为“f”,重新发送所有数据,若为“t”结束发送过程。
单片机乙初始化部分内容包括:
1)设置scon:同单片机甲。
2)设置波特率:同单片机甲。
3)设置数据参数:接收数据存放在片外2030h~2050h单元中,可设置首地址为2030h,数据长度为49。
4)设置中断参数:同单片机甲。
单片机乙接收部分的内容包括:接收过程与查询方式相同,只不过接收过程在中断服务程序中完成。
中断方式实现上述点对点通信过程的完整程序如下:
本程序中的发送和接收数据长度都是已知的。在实际应用中,待传送内容的长度经常是未知的,这就需要设计人员自行设置数据发送格式,常用方法如先发送数据长度再发送数据信息、以特定符号作为数据结束标志等。单片机间的点对点通信是本章最主要的内容之一,需读者在应用中反复练习才能灵活使用。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。