基于 单片机的多机通信系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TH1=0xfd;
TL1=0xfd;
TR1=1;
}
void flash_led(void)//led显示子程序
{
unsigned char i;
for(i=0;i<6;i++)
{
P2=LED_buf[i];
P0=LED_bit[i];
delay(200);
}
P0=0x00;
}
void main(void)//主函数
对于本题而言可通过此过程实现主机对从机的绝对控制。这样在主机中编写一个循环程序就可以实现对三台从机的AD转换结果的不停采集。至于地址帧与数据帧的区别则可通过串口工作方式三下的第九位的置1或置0来实现。在完成通信的基础上,再将采集到的三路结果分别用两个led数码管显示即可试验预期目的。
2.1 系统的组成
TI = 0;
TB8 = 1;// 发送地址帧
P1 = 0xff;//发送使能
delay(20);
SBUF = ADDR;
while(!TI);
TI = 0;
delay(20);
/* 接收从机应答 */
P1 = 0x00;//接受使能
delay(50);
while(!RI);
tmp = SBUF;
RI = 0;
对课题分析后本小组认为本次实验的目的是就是应用单片的串口通信功能实现一个分布式采集系统。整个系统中包含一片主机和三片从机,主机的任务是实现对三片从机的AD转换结果的采集并在数码管上显示之。这样从硬件的角度上将整个系统分为两个模块——主机模块和从机模块。主机模块中包含单片机模块、led数码管显示子模块和串口电平转换子模块,从机模块则包括单片机子模块、AD转换子模块和串口电平转换子模块。就本次试验而言硬件电路的设计难点在于串口电平转换芯片的选择及其连接,而软件的设计难点在于串口通信协议的制定及相关程序的编写。
{unsigned char ADDR=0x00;
unsigned char tmp;
unsigned char a=0;
unsigned char i=0;
unsigned char j=0;
sbuf_init();
while(1)
{
tmp = ADDR+1;
while(tmp!=ADDR)
{
/* 发送从机地址 */
图1系统结构原理图
2.2 系统的工作原理
主机AT89S51编程可实现循环访问个从机,当从机接受主机访问后启动AD转换设备ADC0809对外部模拟信号进行转换。当从机获得转换结果后通过串口将其发送到主机,主机接受到转换结果后再将其发送到相应的led数码管显示。
2.3 硬件电路原理图设计
(1)led数码管显示电路led数码管显示电路如图2所示显示子模块由六个数码管和相应的启动芯片构成。其中每路通道的采集值用量为数码管显示。为了节约单片机的I/O口本题的数码管采用MAX7219芯片。给芯片的优点在于可完成电路的刷新。MAX7219芯片的SEG A-SEG DP为数码管段码接口,DIG0-DIG7为位码接口,CLK、DIN、LOAD分别与单片机P1.0、P1.1、P1.2连接。单片机通过串行的方式将要显示的数据通过CLK、DIN、LOAD三个接口送入相应的显示寄存器内,MAX7219将自动完成对数码管的刷新工作。具体的电路如图2所示。
实现多机通信方案的实现。不同于双机通信多机通信系统中需要识别通信信息发出者或是接受者是谁。经过查阅资料发现在大多数的多机通信系统中都是才采用地址识别的方法实现的。所谓地址识别方法就是在发送或接受信息前先发送和校验地址帧。就本题目而言,先要对通信系统中的每台机器分配一个唯一的地址作为识别信息。具体的识别过程如下:
(1)设计一个主从式多机通信系统,包含1台主机和3台从机,主机和从机全部为单片机;
(2)选择合适总线接口芯片,正确连接主机和从机;
(3)编程实现分布式数据采集功能,主机可以获取各分机当前AD转换结果,并显示。
三、发挥部分:
(1)完善通信功能。(根据完成情况加分,上限+0.2)
经过本小组成员对本课题认真讨论先做出如下分析:
数据传输的双方均使用9600kb/s的速率传送数据,使用主从式通信,主机发送数据,从机接受数据,双方在发送数据时使用查询方式。
双机开始数据传输时,主机发送地址帧呼叫从机。
各从机开始都处于只收地址帧状态。接收到地址帧后,将接收到的地址内容和本机地址比较,如果地址相同,则向主机返回本机地址作为确认信息,并开始接收数据;如果不同,则继续等待。
{ unsigned int i;
for(i=1;i<n;i++)
{ ; }
}
void sbuf_init(void)//串口初始换子程序
{SCON=0xd0;//工作方式3
PCON=0x00;
TMOD=(TMOD&0xf)|0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
}
void main(void)//主程序
图3电平转换电路
(3)主机模块电路
根据设计要求绘制主机模块电路图如图4所示。
图4主机模块电路图
(4)从机模块电路
根据设计要求绘制从机模块电路图如图5所示。
图5从机模块电路图
2.4 硬件电路的实现
首先是主从机电路的实现。主机的电路的搭建采用主CPU板、键盘显示接口板各一块。照实验原理图将主CPU板的P0口接到键盘显示接口板的位码接口,P1口接到键盘显示接口板的段码的接口。从机的电路由CPU板和ADDA转换板构成。
课程设计报告
课程单片机技术
题目串口通信-多机通信系统
系别
年级07级专业电子科学与技术
班级学号
学生姓名
指导教师职称
设计时间
1题设要求分析1
2硬件电路的设计3
2.1系统的组成3
2.2系统的工作原理3
2.3硬件电路原理图设计4
2.4硬件电路的实现6
3软件电路的设计8
3.1通信协议的设计8
3.2主机程序设计8
根据题目分析可知硬件电分为主机模块和从机模块。主机模块中包含单片机子模块、led数码管显示子模块和串口电平转换子模块,从机模块则包括单片机子模块、AD转换子模块和串口电平转换子模块。在主模块中由AT89S51单片机担任主机,六个led数码管担任显示设备和一片MAX485担任串口的电平转换。在整个主机系统中有三个从机模块三个从机模块结构一样,有一片AT89S51单片机担任从机外接一片ADC0809转换芯片和一片MAX485担任串口的电平转换。串口采用单工及异步通信方式。整个硬件结构原如图1所示。
/* 数据发送 */
delay(40);
/*INO=0;
i=i;
i=i;
while(AD_BUSY==0);
a=INO;*/
a=0x88;
SBUF=a;
while(TI==0);
TI=0;
unsigned char LED_bit[6]={0x01,0x02,0x04,0x08,0x10,0x20};
unsigned char LED_buf[6]={0x00,0x00,0x00,0x00,0x00,0x00};
void delay(unsigned long n)//延时子程序
{
unsigned 源自文库nt i;
图2led显示电路
(2)串口电平转换电路串口电平转换电路的电路图如图3所示:本实验中采用MAX485的电平转换芯片。MAX485是一种RS-485标准接口的电平转换芯片。RS-485采用差分式半双工通信方式,真正实现多点总线连接,具有传输距离远可靠性高的特点。基于以上原因本小组选择该芯片实现电平转换。MAX485的1号引脚RO为接收端接单片RXD,4号引脚DI为发送端接单片TXD,2、3号引脚分别为发送接收使能端端接单片P1.3引脚。6、7号引脚总线接线口。
{unsigned char a;
unsigned char tmp=0xff;
sbuf_init();
while(1)
{SM2=1;// 只接收地址帧
/* 如果接收到的地址帧不是本机地址,则继续等待 */
tmp=ADDR+1;
P1=0x00;//接受使能
while(tmp!=ADDR)
{while(!RI);
}
else
{
break;
}
}
m=i/10;
n=i%10;
j=j*2;
LED_buf[j]=LED_seg[n];
LED_buf[j+1]=LED_seg[m]+0x80;
}
void sbuf_init(void)//串口初始化子程序
{
SCON=0xd0; //工作方式3
PCON=0x00;
TMOD=(TMOD&0xf)|0x20;
delay(20);
}
P1 = 0x00; //接受使能
delay(10);
while(!RI);
a = SBUF;
RI = 0;
delay(10);
j=ADDR;
i++;
ADDR++;
if (i>=3)
{
i=0;
ADDR=0x00;
}
convert(a,j);
flash_led();
}
}
3.3
从程序流程图如下:
主机在发送地址帧后等待,如果接收到的应答信息中的内容和所发地址帧的内容相同,就开始发送数据,如果不一致,主机将继续发送地址帧。如多次应答仍无回应则认为出错则主机跳出本次通信。
从机在接收完数据后,将根据最后的校验结果判断数据接收是否正确,若校验真确,则向主机发送2AH信号,同时点亮led灯半秒钟,表示本次通信成功;若校验错误,则发送F0H信号,表示接收数据错误,并请求从发。
其次是电平转换电路的焊接。电平转换的路的实现是通过自己搭建电路完成。电平转换的电路主要有四块MAX485和两个100Ω电阻构成。四块MAX485采用总线方式连接,每个芯片分别引出三个引脚用于单片的连接。
最后将各个模块的按照原理图连接起来。
图6硬件电路的连接
3 软件电路的设计
3.1 通信协议的设计
通信协议的设计的设计是本题的重点难点,本题通信协议主要是区别主机和从机。由于串口的方式2、3发送和接收都是11位其第九为可编程置位可以此作为区分地址帧与数据帧从而实现主机与从机,从机与从机的区别。通信协议同样要规定相同通信速率。参考相关资料后编写如下的通信协议。
首先,从机处于只接收地址帧的状态;
主机发送一帧地址信息;
从机接受到地址帧后,将本机地址与地址帧中的地址进行比较,如果地址相同准备接受数据,否则丢弃当前帧,依然处于只接受地址帧的状态;
主机发送数据帧,相应的从机接受数据,数据传送完毕后,从机继续回到只接受地址帧的状态,在这个过程中其他从机不受影响;
当主机需要与其他从机进行数据传输时,可以再次发送地址帧呼叫从机,重复这一过程[1]。
tmp=SBUF;
RI=0;
}
delay(20);
/* 发送本机地址作为应答信号,准备接收数据 */
P1=0xff;//发送使能
delay(40);
TI=0;
TB8=0;// 主机不检测该位
SBUF = ADDR;
delay(10);
while(!TI);
TI = 0;
//SM2 = 0;//允许接收数据
图8从机模块流程图
从机程序:
#include<reg51.h>
#include<absacc.h>
#include<stdio.h>
#define INO XBYTE[0x0000]
#define ADDR 0x02//从机地址0x00、ox01、0x02
sbit AD_BUSY=P3^3;
void delay(unsigned long n)//延时子程序
3.3从机程序设计12
4系统的调试与实现15
4.1从机模块调试15
4.2 LED显示模块调试15
4.3电平转换模块功能调试15
4.4主机模块功能调试16
4.5整体设计功能调试16
参考文献18
1 题设要求分析
本小组的试验题目如下:
一、任务:
设计实现多台单片机系统之间的串行通信
二、基本要求(难度系数0.8):
for(i=1;i<n;i++)
{ ; }
}
void convert(unsigned char a ,unsigned char j)//电压转换子程序
{
unsigned char m,n,i;
unsigned char b=0;
for(i=0;i<51;i++)
{
b=i*5;
if(b<a)
{
i++;
主机接收到2AH信号,则通信结束,否则主机将重新发送这组数据。
3.2
依据试验要求及相应的通信协议现绘制如下的主机程序流程图:
图7主机程序流程图
主机程序:
#include<stdio.h>
#include<reg51.h>
unsignedcharLED_seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
TL1=0xfd;
TR1=1;
}
void flash_led(void)//led显示子程序
{
unsigned char i;
for(i=0;i<6;i++)
{
P2=LED_buf[i];
P0=LED_bit[i];
delay(200);
}
P0=0x00;
}
void main(void)//主函数
对于本题而言可通过此过程实现主机对从机的绝对控制。这样在主机中编写一个循环程序就可以实现对三台从机的AD转换结果的不停采集。至于地址帧与数据帧的区别则可通过串口工作方式三下的第九位的置1或置0来实现。在完成通信的基础上,再将采集到的三路结果分别用两个led数码管显示即可试验预期目的。
2.1 系统的组成
TI = 0;
TB8 = 1;// 发送地址帧
P1 = 0xff;//发送使能
delay(20);
SBUF = ADDR;
while(!TI);
TI = 0;
delay(20);
/* 接收从机应答 */
P1 = 0x00;//接受使能
delay(50);
while(!RI);
tmp = SBUF;
RI = 0;
对课题分析后本小组认为本次实验的目的是就是应用单片的串口通信功能实现一个分布式采集系统。整个系统中包含一片主机和三片从机,主机的任务是实现对三片从机的AD转换结果的采集并在数码管上显示之。这样从硬件的角度上将整个系统分为两个模块——主机模块和从机模块。主机模块中包含单片机模块、led数码管显示子模块和串口电平转换子模块,从机模块则包括单片机子模块、AD转换子模块和串口电平转换子模块。就本次试验而言硬件电路的设计难点在于串口电平转换芯片的选择及其连接,而软件的设计难点在于串口通信协议的制定及相关程序的编写。
{unsigned char ADDR=0x00;
unsigned char tmp;
unsigned char a=0;
unsigned char i=0;
unsigned char j=0;
sbuf_init();
while(1)
{
tmp = ADDR+1;
while(tmp!=ADDR)
{
/* 发送从机地址 */
图1系统结构原理图
2.2 系统的工作原理
主机AT89S51编程可实现循环访问个从机,当从机接受主机访问后启动AD转换设备ADC0809对外部模拟信号进行转换。当从机获得转换结果后通过串口将其发送到主机,主机接受到转换结果后再将其发送到相应的led数码管显示。
2.3 硬件电路原理图设计
(1)led数码管显示电路led数码管显示电路如图2所示显示子模块由六个数码管和相应的启动芯片构成。其中每路通道的采集值用量为数码管显示。为了节约单片机的I/O口本题的数码管采用MAX7219芯片。给芯片的优点在于可完成电路的刷新。MAX7219芯片的SEG A-SEG DP为数码管段码接口,DIG0-DIG7为位码接口,CLK、DIN、LOAD分别与单片机P1.0、P1.1、P1.2连接。单片机通过串行的方式将要显示的数据通过CLK、DIN、LOAD三个接口送入相应的显示寄存器内,MAX7219将自动完成对数码管的刷新工作。具体的电路如图2所示。
实现多机通信方案的实现。不同于双机通信多机通信系统中需要识别通信信息发出者或是接受者是谁。经过查阅资料发现在大多数的多机通信系统中都是才采用地址识别的方法实现的。所谓地址识别方法就是在发送或接受信息前先发送和校验地址帧。就本题目而言,先要对通信系统中的每台机器分配一个唯一的地址作为识别信息。具体的识别过程如下:
(1)设计一个主从式多机通信系统,包含1台主机和3台从机,主机和从机全部为单片机;
(2)选择合适总线接口芯片,正确连接主机和从机;
(3)编程实现分布式数据采集功能,主机可以获取各分机当前AD转换结果,并显示。
三、发挥部分:
(1)完善通信功能。(根据完成情况加分,上限+0.2)
经过本小组成员对本课题认真讨论先做出如下分析:
数据传输的双方均使用9600kb/s的速率传送数据,使用主从式通信,主机发送数据,从机接受数据,双方在发送数据时使用查询方式。
双机开始数据传输时,主机发送地址帧呼叫从机。
各从机开始都处于只收地址帧状态。接收到地址帧后,将接收到的地址内容和本机地址比较,如果地址相同,则向主机返回本机地址作为确认信息,并开始接收数据;如果不同,则继续等待。
{ unsigned int i;
for(i=1;i<n;i++)
{ ; }
}
void sbuf_init(void)//串口初始换子程序
{SCON=0xd0;//工作方式3
PCON=0x00;
TMOD=(TMOD&0xf)|0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
}
void main(void)//主程序
图3电平转换电路
(3)主机模块电路
根据设计要求绘制主机模块电路图如图4所示。
图4主机模块电路图
(4)从机模块电路
根据设计要求绘制从机模块电路图如图5所示。
图5从机模块电路图
2.4 硬件电路的实现
首先是主从机电路的实现。主机的电路的搭建采用主CPU板、键盘显示接口板各一块。照实验原理图将主CPU板的P0口接到键盘显示接口板的位码接口,P1口接到键盘显示接口板的段码的接口。从机的电路由CPU板和ADDA转换板构成。
课程设计报告
课程单片机技术
题目串口通信-多机通信系统
系别
年级07级专业电子科学与技术
班级学号
学生姓名
指导教师职称
设计时间
1题设要求分析1
2硬件电路的设计3
2.1系统的组成3
2.2系统的工作原理3
2.3硬件电路原理图设计4
2.4硬件电路的实现6
3软件电路的设计8
3.1通信协议的设计8
3.2主机程序设计8
根据题目分析可知硬件电分为主机模块和从机模块。主机模块中包含单片机子模块、led数码管显示子模块和串口电平转换子模块,从机模块则包括单片机子模块、AD转换子模块和串口电平转换子模块。在主模块中由AT89S51单片机担任主机,六个led数码管担任显示设备和一片MAX485担任串口的电平转换。在整个主机系统中有三个从机模块三个从机模块结构一样,有一片AT89S51单片机担任从机外接一片ADC0809转换芯片和一片MAX485担任串口的电平转换。串口采用单工及异步通信方式。整个硬件结构原如图1所示。
/* 数据发送 */
delay(40);
/*INO=0;
i=i;
i=i;
while(AD_BUSY==0);
a=INO;*/
a=0x88;
SBUF=a;
while(TI==0);
TI=0;
unsigned char LED_bit[6]={0x01,0x02,0x04,0x08,0x10,0x20};
unsigned char LED_buf[6]={0x00,0x00,0x00,0x00,0x00,0x00};
void delay(unsigned long n)//延时子程序
{
unsigned 源自文库nt i;
图2led显示电路
(2)串口电平转换电路串口电平转换电路的电路图如图3所示:本实验中采用MAX485的电平转换芯片。MAX485是一种RS-485标准接口的电平转换芯片。RS-485采用差分式半双工通信方式,真正实现多点总线连接,具有传输距离远可靠性高的特点。基于以上原因本小组选择该芯片实现电平转换。MAX485的1号引脚RO为接收端接单片RXD,4号引脚DI为发送端接单片TXD,2、3号引脚分别为发送接收使能端端接单片P1.3引脚。6、7号引脚总线接线口。
{unsigned char a;
unsigned char tmp=0xff;
sbuf_init();
while(1)
{SM2=1;// 只接收地址帧
/* 如果接收到的地址帧不是本机地址,则继续等待 */
tmp=ADDR+1;
P1=0x00;//接受使能
while(tmp!=ADDR)
{while(!RI);
}
else
{
break;
}
}
m=i/10;
n=i%10;
j=j*2;
LED_buf[j]=LED_seg[n];
LED_buf[j+1]=LED_seg[m]+0x80;
}
void sbuf_init(void)//串口初始化子程序
{
SCON=0xd0; //工作方式3
PCON=0x00;
TMOD=(TMOD&0xf)|0x20;
delay(20);
}
P1 = 0x00; //接受使能
delay(10);
while(!RI);
a = SBUF;
RI = 0;
delay(10);
j=ADDR;
i++;
ADDR++;
if (i>=3)
{
i=0;
ADDR=0x00;
}
convert(a,j);
flash_led();
}
}
3.3
从程序流程图如下:
主机在发送地址帧后等待,如果接收到的应答信息中的内容和所发地址帧的内容相同,就开始发送数据,如果不一致,主机将继续发送地址帧。如多次应答仍无回应则认为出错则主机跳出本次通信。
从机在接收完数据后,将根据最后的校验结果判断数据接收是否正确,若校验真确,则向主机发送2AH信号,同时点亮led灯半秒钟,表示本次通信成功;若校验错误,则发送F0H信号,表示接收数据错误,并请求从发。
其次是电平转换电路的焊接。电平转换的路的实现是通过自己搭建电路完成。电平转换的电路主要有四块MAX485和两个100Ω电阻构成。四块MAX485采用总线方式连接,每个芯片分别引出三个引脚用于单片的连接。
最后将各个模块的按照原理图连接起来。
图6硬件电路的连接
3 软件电路的设计
3.1 通信协议的设计
通信协议的设计的设计是本题的重点难点,本题通信协议主要是区别主机和从机。由于串口的方式2、3发送和接收都是11位其第九为可编程置位可以此作为区分地址帧与数据帧从而实现主机与从机,从机与从机的区别。通信协议同样要规定相同通信速率。参考相关资料后编写如下的通信协议。
首先,从机处于只接收地址帧的状态;
主机发送一帧地址信息;
从机接受到地址帧后,将本机地址与地址帧中的地址进行比较,如果地址相同准备接受数据,否则丢弃当前帧,依然处于只接受地址帧的状态;
主机发送数据帧,相应的从机接受数据,数据传送完毕后,从机继续回到只接受地址帧的状态,在这个过程中其他从机不受影响;
当主机需要与其他从机进行数据传输时,可以再次发送地址帧呼叫从机,重复这一过程[1]。
tmp=SBUF;
RI=0;
}
delay(20);
/* 发送本机地址作为应答信号,准备接收数据 */
P1=0xff;//发送使能
delay(40);
TI=0;
TB8=0;// 主机不检测该位
SBUF = ADDR;
delay(10);
while(!TI);
TI = 0;
//SM2 = 0;//允许接收数据
图8从机模块流程图
从机程序:
#include<reg51.h>
#include<absacc.h>
#include<stdio.h>
#define INO XBYTE[0x0000]
#define ADDR 0x02//从机地址0x00、ox01、0x02
sbit AD_BUSY=P3^3;
void delay(unsigned long n)//延时子程序
3.3从机程序设计12
4系统的调试与实现15
4.1从机模块调试15
4.2 LED显示模块调试15
4.3电平转换模块功能调试15
4.4主机模块功能调试16
4.5整体设计功能调试16
参考文献18
1 题设要求分析
本小组的试验题目如下:
一、任务:
设计实现多台单片机系统之间的串行通信
二、基本要求(难度系数0.8):
for(i=1;i<n;i++)
{ ; }
}
void convert(unsigned char a ,unsigned char j)//电压转换子程序
{
unsigned char m,n,i;
unsigned char b=0;
for(i=0;i<51;i++)
{
b=i*5;
if(b<a)
{
i++;
主机接收到2AH信号,则通信结束,否则主机将重新发送这组数据。
3.2
依据试验要求及相应的通信协议现绘制如下的主机程序流程图:
图7主机程序流程图
主机程序:
#include<stdio.h>
#include<reg51.h>
unsignedcharLED_seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};