PC机与多台单片机串行通信 - 图文(7)

2019-02-15 23:36

武汉工程大学邮电与信息工程学院 毕业设计(论文)

图3-27 MAX3162E引脚

5最后执行菜单命令File/Save即可将新建的元件“MAX3162”保存在当前的元件○

库文件“My SchLib. SchLib”中

3.3.4串行通信原理图设计与绘制

系统结构图:

主控制pcRS232/RS485转换电路 RS485 RS485 RS485 从单片 机 从单片 机 从单片 机 1 图3-28系统结构图

2 3 系统全局图:

8051单片机串行接口是一个可编程的全双工串行通信接口。它可用作异步通信方式(UART),与串行传送信息的外部设备相连接,或用于通过标准异步通信协议进行全双工的8051多机系统也能通过同步方式,使用TTL或CMOS移位寄存器来扩充I/O口。

27

武汉工程大学邮电与信息工程学院 毕业设计(论文)

8051单片机通过管脚RXD(P3.0,串行数据接收端)和管脚TXD(P3.1,串行数据发送端)与外界通信。SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器。它们有相同名字和地址空间,但不会出现冲突,因为它们两个一个只能被CPU读出数据,一个只能被CPU写入数据

图3-29系统全局图

28

武汉工程大学邮电与信息工程学院 毕业设计(论文)

第四章 系统软件设计

4.1 系统的通信协议

在主从时多机系统中,只有一台主机,但从机可以有多台。主机发送的信息

可以传送到各个从机或指定从机,从机发送的信息只能为主机所接收,个从机之间不能直接通信。

主机发送并为从机接收的信息由两类:一类是地址,用于指示需要和主机通信的从机地址,由串行数据第9位为“1”标志;另一类是数据,由串行数据第9位为“0”标志。由于所有从机的SM2=1,故每个从机总能在RI=0时收到主机发来的地址(因为串行数据的第9位为“1”),并进入各自的中断服务程序。在中断服务程序中,每台从机把接收到的从机地址和他的本机地址(系统设计时所分配)进行比较。所有比较不相等的从机均从各自的中断服务程序中退出(SM2仍然等于1),只有比较成功的从机才是被主机寻址通信的从机。被寻址从机在程序中使SM2=0,以便接收随之而来的数据。归结起来如下: (1) 所有从机的SM2=1;以便接收主机发来的地址。

(2) 主机给从机发送地址时,第9数据上发送1,以指示从机接收这个地址。 (3) 有从机在SM2=1、RB8=1和RI=0时,接收主机发来的从机地址,进入相应中断服务程序,并和本机地址比较以确认是否为被寻从机。

(4)被寻址从机通过指令清除SM2,以正常接收数据,并向主机发回接收到的从机地址,供主机核对,未被寻址从机保持SM2=1,并退出各自中断服务程序。 (5)完成主机和被寻址从机之间的数据通信,被寻址从机在通信完成后,重新使SM2=1,并退出中断服务程序,等待下次通信。

在多机通信中,主机通常把从机地址作为8位数据发送的(第9位为1),因此,MCS-51构成的多机通信系统最多允许255台从机(地址为00H~FEH),FFH作为一条控制命令由主机发送给从机,以便使被寻址从机SM2=1。

4.2 C51编程实现PC机与单片机之间的串行通信

单片机通信程序

单片机的通信程序采用C51编程[11],通信以中断的方式进行。单片机处于从

29

武汉工程大学邮电与信息工程学院 毕业设计(论文)

机地位,每台单片机被分配一个节点地址。单片机每收到一个PC机送给本节点的命令帧,则根据命令帧中的命令代码向PC机回送一个响应帧。 其系统主程序流图如图4-1所示: 开始 单片机接收中断 初始化串口和波特率 N N Y 单片机发送中断 将接收到的数据发送回PC机 接收到PC机发送的数据? 结束 图4-1 系统主程序流图

单片机接收中断服务流程:

中段开始 接收上位机发送的地址 同本机地址相符?N 发送本机地址 N 上位机发送数据 中断返回 图4-2 系统中断服务流图

30

武汉工程大学邮电与信息工程学院 毕业设计(论文)

以下是单片机的通信程序[12][13]。

#define NODE_ADDR 1 // 定义本节点地址

#define rcv_ snd_COUNT 12 //定义接收发送缓冲区大小 unsigned char data rcv_snd_buffer[rcv_ snd_COUNT]; unsigned char data * rcv_snd_pointer; //定义接收发送指针 void main() {

SCON=0x50;TMOD=0x20;TH1=0xfd; // 初始化串口和波特率

TR1=1;ET1=0;ES=1;EA=1;

rcv_snd_pointer=rcv_snd_buffer; // 初始化接收发送指针 ? }

void comm(void) interrupt 4 using 1 // 通信中断服务函数 {

if(RI==1)

{ //接收中断 RI=0;

*rcv_snd_pointer=SBUF;

if(*rcv_snd_pointer == '*') {//接收的字符为结束字符

if((toint(rcv_snd_buffer[1])*10+toint(rcv_snd_buffer ))==NODE_ADDR

)

{//收到的命令帧是发送给本站的 ?//校验

switch(rcv_buffer)

{ //收到不同命令代码对应不同的程序段 case 'R'://位置监测

?//将回送信息填入发送缓冲区

rcv_snd_pointer=rcv_snd_buffer;

SBUF=*rcv_snd_pointer;//发送第一个字符

break;

31


PC机与多台单片机串行通信 - 图文(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:执业药师考试 - 中药化学知识点总结(生物碱以及苷类)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: