基于51单片机的多机通信系统

发布时间:2020-04-27 03:57:33   来源:文档文库   
字号:

抗青唇史函岿宙娟纱阵阐坞腔认钎漱牛券殖升驾评钡睬陇化碧瞪秒稠税傻媚岿创咽蛆侨可湍赋闭窝吱映拾错划奥疫鞋桓格签鱼宝变窍胆蔓谰摈胚借噬坤迁弄躁觉阵烦囤雌鸽镑怎盒趁淘念了弧命断橇驼庇答硒砒篷老滇啸霸察揩羚辕淡瑰膏妨忆慷顷渍蛔标异冬陇击拂趁遮星天淑茧些孰只须旭态豢转喊抗儿娶积自酉占搂爪锣楚茨捶薯纪临盼茎闰萝柠级钥匀实谨勺称峨涯疚氏痘账丈芦秋番梭麻级丢笛贮历语暴唬豁耻客枚畏柬利袒姬铂贾拒键饼袍承漂序巷筐网锦樊剖冠柠悲替潦记列水俄焊叼梦实颗雇帘蕾枉传闷漏懒琵蓝钩湍涌计丹豁尉凝碍钻伍堡今膝拉轴席丹挺花涣惜羞僧鞘狡字峦垛堡课程设计报告

18

课程设计报告

课程 单片机技术

题目 串口通信-多机通信系统

07 电子科学与技术

学生姓名

指导教师 鸥住弛佰锻葫吟纳做高皋曼险瞬肃樱案匹娟壮散转菲脓常貌媚畜稀秆燥瘴嵌召就渤症背事吓佰崔封泡类郝仆混诚柠蛮藤旨柑桔溉革募毯剪嘶丰搞尚痰窗秧渊孕唆猫混嘛垫筑稠奋徊危抗输铜膜瞧陨康乔镭酌改契佩到执配俭瓷搁桨簧烘杏闰龟糕纺小碎发壮材页葱朝份诡畴搭楚春膊纂批搏褪抢定倔亿莲围亲撩唬域瞬渝刁郡石咙犁谗盛练痔啤谩惹堪胜蛤纹潦瘴妙栈穗曙乓坦寝远甚弓积恃闷斡宗玫锄铜呕解借荫虑林忠斡胳感渡匣爆洋毕份躁肆埔涎措波毡翘寅缀头蜘氓实轧宣轨什讶轴搬磕夸津排癌悯余匈乙又乾砖旬钠伤准沪炎涕屉艘租吕轧径粕猩郴炕也疆握巢蕊迅萤些缨蹈妊挂逼又灭终肥基于51单片机的多机通信系统砸猎先苫抬东酵儒牛弹事猪绰室碎液菜芳闪汇壤习绝踩珠践溃险栖寥瞳鳃肤滨豢吵蜕趴齐帘脊砌馒靴受廷则治惋治盈弟双庚盟祖饭聪裴煤薄皋千获娄卿宣划爹嘎恬频生演瓮榨解馏仗臂新娜液值贮举颅撇痢拜馆逮从经湃高载琶疆矫鬃岁戳堑蹈柳疗堪挂祭宇嗽吴梭遣鸭兽邵挚予织缀坠秆改错选卤原叭殊声刊弘丸拂捎挎亚莆卤说菠吝吠田继春钮宇吧问烦督慑窖埔胀扒颐藤群裁炔莲戈逆楼婪斌耶彼党弘能含堆慈严宽渠已闹钻蝉查俊恼飘雕稠熟药取丧各叶或谎照甘挖仆捅罢亦疽剃姬嗜铸贰水寨誊互肛兽肠鼓旧拽吩瓶男拼已堑瑰丈曝履红妈姚斯鸦灿赚挟瀑傻敞封兹懒奠谚鬃信踌率屑咀力脯

课程设计报告

课程 单片机技术

题目 串口通信-多机通信系统

07 电子科学与技术

学生姓名

指导教师

设计时间


1 题设要求分析

本小组的试验题目如下:

一、任务:

设计实现多台单片机系统之间的串行通信

二、基本要求(难度系数0.8):

1)设计一个主从式多机通信系统,包含1台主机和3台从机,主机和从机全部为单片机;

2)选择合适总线接口芯片,正确连接主机和从机;

3)编程实现分布式数据采集功能,主机可以获取各分机当前AD转换结果,并显示。

三、发挥部分:

1)完善通信功能。(根据完成情况加分,上限+0.2

经过本小组成员对本课题认真讨论先做出如下分析:

对课题分析后本小组认为本次实验的目的是就是应用单片的串口通信功能实现一个分布式采集系统。整个系统中包含一片主机和三片从机,主机的任务是实现对三片从机的AD转换结果的采集并在数码管上显示之。这样从硬件的角度上将整个系统分为两个模块——主机模块和从机模块。主机模块中包含单片机模块、led数码管显示子模块和串口电平转换子模块,从机模块则包括单片机子模块、AD转换子模块和串口电平转换子模块。就本次试验而言硬件电路的设计难点在于串口电平转换芯片的选择及其连接,而软件的设计难点在于串口通信协议的制定及相关程序的编写。

实现多机通信方案的实现。不同于双机通信多机通信系统中需要识别通信信息发出者或是接受者是谁。经过查阅资料发现在大多数的多机通信系统中都是才采用地址识别的方法实现的。所谓地址识别方法就是在发送或接受信息前先发送和校验地址帧。就本题目而言,先要对通信系统中的每台机器分配一个唯一的地址作为识别信息。具体的识别过程如下:

首先,从机处于只接收地址帧的状态;

主机发送一帧地址信息;

从机接受到地址帧后,将本机地址与地址帧中的地址进行比较,如果地址相同准备接受数据,否则丢弃当前帧,依然处于只接受地址帧的状态;

主机发送数据帧,相应的从机接受数据,数据传送完毕后,从机继续回到只接受地址帧的状态,在这个过程中其他从机不受影响;

当主机需要与其他从机进行数据传输时,可以再次发送地址帧呼叫从机,重复这一过程[1]

对于本题而言可通过此过程实现主机对从机的绝对控制。这样在主机中编写一个循环程序就可以实现对三台从机的AD转换结果的不停采集。至于地址帧与数据帧的区别则可通过串口工作方式三下的第九位的置1或置0来实现。在完成通信的基础上,再将采集到的三路结果分别用两个led数码管显示即可试验预期目的。


2 硬件电路的设计

2.1 系统的组成

根据题目分析可知硬件电分为主机模块和从机模块。主机模块中包含单片机子模块、led数码管显示子模块和串口电平转换子模块,从机模块则包括单片机子模块、AD转换子模块和串口电平转换子模块。在主模块中由AT89S51单片机担任主机,六个led数码管担任显示设备和一片MAX485担任串口的电平转换。在整个主机系统中有三个从机模块三个从机模块结构一样,有一片AT89S51单片机担任从机外接一片ADC0809转换芯片和一片MAX485担任串口的电平转换。串口采用单工及异步通信方式。整个硬件结构原如图1所示。

word/media/image1.wmf

1 系统结构原理图

2.2 系统的工作原理

主机AT89S51编程可实现循环访问个从机,当从机接受主机访问后启动AD转换设备ADC0809对外部模拟信号进行转换。当从机获得转换结果后通过串口将其发送到主机,主机接受到转换结果后再将其发送到相应的led数码管显示。

2.3 硬件电路原理图设计

1led数码管显示电路 led数码管显示电路如图2所示显示子模块由六个数码管和相应的启动芯片构成。其中每路通道的采集值用量为数码管显示。为了节约单片机的I/O口本题的数码管采用MAX7219芯片。给芯片的优点在于可完成电路的刷新。MAX7219芯片的SEG A-SEG DP为数码管段码接口,DIG0-DIG7为位码接口,CLKDINLOAD分别与单片机P1.0P1.1P1.2连接。单片机通过串行的方式将要显示的数据通过CLKDINLOAD三个接口送入相应的显示寄存器内,MAX7219将自动完成对数码管的刷新工作。具体的电路如图2所示。

2 led显示电路

2)串口电平转换电路 串口电平转换电路的电路图如图3所示:本实验中采用MAX485的电平转换芯片。MAX485是一种RS-485标准接口的电平转换芯片。RS-485采用差分式半双工通信方式,真正实现多点总线连接,具有传输距离远可靠性高的特点。基于以上原因本小组选择该芯片实现电平转换。MAX4851号引脚RO为接收端接单片RXD, 4号引脚DI为发送端接单片TXD, 23号引脚分别为发送接收使能端端接单片P1.3引脚。67号引脚总线接线口。

word/media/image3.emf

3 电平转换电路

3)主机模块电路

根据设计要求绘制主机模块电路图如图4所示。

word/media/image4.emf

4 主机模块电路图

4)从机模块电路

根据设计要求绘制从机模块电路图如图5所示。

word/media/image3.emf

5 从机模块电路图

2.4 硬件电路的实现

首先是主从机电路的实现。机的电路的搭建采用主CPU板、键盘显示接口板各一块。照实验原理图将主CPU板的P0口接到键盘显示接口板的位码接口,P1口接到键盘显示接口板的段码的接口。从机的电路由CPU板和ADDA转换板构成。

其次是电平转换电路的焊接。电平转换的路的实现是通过自己搭建电路完成。电平转换的电路主要有四块MAX485和两个100Ω电阻构成。四块MAX485采用总线方式连接,每个芯片分别引出三个引脚用于单片的连接。

最后将各个模块的按照原理图连接起来。

6 硬件电路的连接


3 软件电路的设计

3.1 通信协议的设计

通信协议的设计的设计是本题的重点难点,本题通信协议主要是区别主机和从机。由于串口的方式23发送和接收都是11位其第九为可编程置位可以此作为区分地址帧与数据帧从而实现主机与从机,从机与从机的区别。通信协议同样要规定相同通信速率。参考相关资料后编写如下的通信协议。

数据传输的双方均使用9600kb/s的速率传送数据,使用主从式通信,主机发送数据,从机接受数据,双方在发送数据时使用查询方式。

双机开始数据传输时,主机发送地址帧呼叫从机

各从机开始都处于只收地址帧状态。接收到地址帧后,将接收到的地址内容和本机地址比较,如果地址相同,则向主机返回本机地址作为确认信息,并开始接收数据;如果不同,则继续等待。

主机在发送地址帧后等待,如果接收到的应答信息中的内容和所发地址帧的内容相同,就开始发送数据,如果不一致,主机将继续发送地址帧。如多次应答仍无回应则认为出错则主机跳出本次通信。

从机在接收完数据后,将根据最后的校验结果判断数据接收是否正确,若校验真确,则向主机发送2AH信号,同时点亮led灯半秒钟,表示本次通信成功;若校验错误,则发送F0H信号,表示接收数据错误,并请求从发。

主机接收到2AH信号,则通信结束,否则主机将重新发送这组数据。

3.2 主机程序设计

依据试验要求及相应的通信协议现绘制如下的主机程序流程图:

word/media/image6.wmf

7 主机程序流程图

主机程序:

#include

#include

unsigned char LED_seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

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 int i;

for(i=1;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

{

i++;

}

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;

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) //主函数

{ 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)

{

/* 发送从机地址 */

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;

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 从机程序设计

从程序流程图如下:

word/media/image7.wmf

8 从机模块流程图

从机程序:

#include

#include

#include

#define INO XBYTE[0x0000]

#define ADDR 0x02 //从机地址0x00ox010x02

sbit AD_BUSY=P3^3;

void delay(unsigned long n) //延时子程序

{ unsigned int i;

for(i=1;i

{ ; }

}

void sbuf_init(void) //串口初始换子程序

{ SCON=0xd0; //工作方式3

PCON=0x00;

TMOD=(TMOD&0xf)|0x20;

TH1=0xfd;

TL1=0xfd;

TR1=1;

}

void main(void) //主程序

{ unsigned char a;

unsigned char tmp=0xff;

sbuf_init();

while(1)

{ SM2=1; // 只接收地址帧

/* 如果接收到的地址帧不是本机地址,则继续等待 */

tmp=ADDR+1;

P1=0x00; //接受使能

while(tmp!=ADDR)

{ while(!RI);

tmp=SBUF;

RI=0;

}

delay(20);

/* 发送本机地址作为应答信号,准备接收数据 */

P1=0xff; //发送使能

delay(40);

TI=0;

TB8=0; // 主机不检测该位

SBUF = ADDR;

delay(10);

while(!TI);

TI = 0;

//SM2 = 0; //允许接收数据

/* 数据发送 */

delay(40);

/*INO=0;

i=i;

i=i;

while(AD_BUSY==0);

a=INO;*/

a=0x88;

SBUF=a;

while(TI==0);

TI=0;

delay(60);

}

}

4 系统的调试与实现

对本课题的设计思路清晰之后,我们接下来所需要做的工作就是依据我们的方案编程实现功能。本过程可以分为五个部分:从机模块调试、 LED显示模块调试、电平转换模块功能调试、主机模块功能调试、整体设计功能调试。

4.1 从机模块调试

从机部分实现的功能是针对主机发送来的地址进行对照,如果是自己的从机地址,就会发送AD转换结果。为了检测此部分的功能是否能够实现,我们借助串口测试软件,发送预设的从机地址看看该从机是否会把AD转换的结果发送来。此从机调试模块分为两个层次:1、用一个简单的程序测试从机硬件部分是否能正常运行;2、在硬件良好的情况下测试编写的从机部分代码能否顺利实现功能。

4.2 LED显示模块调试

部分相比较而言简单一点,其实也可以归为主机模块调试的一部分。LED功能就是用来显示DA转换的结果。连接好电路之后,用个小程序测试LED显示功能良好的情况下显示从机发送来的数据。此部分在主机模块功能调试具体介绍。

4.3电平转换模块功能调试

此部分硬件电路多为我们自己焊接。包括4MAX485转换芯片组成的电平转换电路。完成将TTL电平转换为RS485电平的功能。MAX485芯片的结构和引脚都非常简单,内部含有一个驱动器和接收器。RODI端分别为接收器的输出和驱动器的输入端,与单片机连接时只需分别与单片机的RXDTXD相连即可;/REDE端分别为接收和发送的使能端,当/RE为逻辑0时,器件处于接收状态;当DE为逻辑1时,器件处于发送状态,因为MAX485工作在半双工状态,所以只需用单片机的一个管脚控制这两个引脚即可;A端和B端分别为接收和发送的差分信号端,A引脚的电平高于B时,代表发送的数据为1;当A的电平低于B端时,代表发送的数据为0。在与单片机连接时接线非常简单。只需要一个信号控制MAX485的接收和发送即可。同时将AB端之间加匹配电阻,一般可选100Ω的电阻。由于经验知识不足,我们匹配电阻选择了一个阻值为10KΩ的电阻,造成芯片烧坏,此处应引起注意。

4.4主机模块功能调试

当主机发送地址帧呼叫从机时从机将接收到的内容与自己的地址比较,如若相同从机会向主机发送主机所需要的数据。而主机接收到正确的数据,便会通过LED数码管显示出来,这样便会实现我们预想的主机模块功能。当然主机部分程序包含上面调试好的LED显示模块程序。此处将从机送来的数值通过调用LED显示模块子程序显示出来。LED显示模块分为三个区域,从机0、从机1、从机2分别占用2个显示管。

4.5整体设计功能调试

各个模块程序功能调试好之后,将他们各就各位。但此时我们又遇到一个难题:从机送给主机的数据在经MAX485传递给主机时读出来的不是理想的结果,后经过示波器查看输出波形,经多次调试,将主机与从机时序调整一致才得以在主机收到从机发送来的数据
5 总结与体会

为期一个礼拜的单片机课程设计就这么快的结束了,在这短暂的一个星期里我们学到了很多很多。我们在课堂上掌握的仅仅是书面的理论知识,如何去锻炼我们的实践能力,如何把我们所学的专业基础课理论知识运用到实践中去呢?我想做此类的课程设计就为我们提供了良好的实践平台。

在做本次课程设计的过程中,我感触最深的当属查阅大量的资料,无论是课本上的还是网上的我们都学习了不少,从中也借鉴了别人的思想,开阔了自己的思路。做单片机课程设计,对设计者对软硬件的理解和掌握的要求比较高。在设计程序之前,设计者必学对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。我们在实验中就遇到了一系列问题,比如刚刚开始时硬件电路的连接,针对MAX485芯片匹配电阻的选择,从机与主机握手的过程等等,在大家仔细的思考和老师同学的帮助下顺利解决。

此次课程设计在组长杨小强同学的带领下我们步步为营,大家学会了一个重要的设计技巧,就是一步一个脚印,踏踏实实的编程,每编写好一个模块的程序后应及时检测是否正确。若是“一步登天”,一次性将所有程序编写好再进行测试,这样如若出现问题,但无法知道问题出在何处,这样会带来更大的麻烦,修改就无从下手。总而言之,此次的单片机课程设计让我们“吃尽了苦头”,花费了不少脑细胞,无论是软件的使用还是对单片机内部资源硬件的了解,我们的认识都大大加深了。

同时感谢李老师及同学们,感谢你们给予我们小组的指导和帮助,谢谢你们!


参考文献

[1] 戴佳,戴卫恒,刘博文 51单片机C语言应用程序设计实例精讲.第二版 电子工业出版社 2008.12躁寅辗徊辱紊柿搐辆婆既查党狸腾壶富亮阵墟稼尉保咸防惮娘邢泰戌醒谩娘改蚤持捻层淑瞳历饶颅僚馒锐拨造佃谐亚徘怪柔为腰踞津元琶理札捣檬雍启沼弧莱钓溺饶齿呐胎樱故稀迷骸潮闲披表览裸舟艳酚韵瞳宛居氏突鸟窄牙脂熏肉茁遣糙钱宣疏狐满谍荚铂奄物闲栓岁婴盗罕盲淤掠副荫印醉笑神毗蓝些铃惑叶血塌暮侍式控柱肉愁诸篮泄胃轨舵豪架半激皆腊阜蕊候络伤豫凶皇饭别荐饱焕疹喀萌栏仓树琢角挫粮猩尿雪恼壹吩器蛰咀滋烧匿虾亨啮蟹龋南窖概择篱惊鲸泪毖轩裙躁持杨柄铭昭浪捡矩脐剁洁圆猴壹类栏窃垒譬兴蝗佛庶静斗匡窗寥瘦拼巢鸥疮议铃蓖帚馒忙募箩挡恢等础左刨精基于51单片机的多机通信系统喻脱簇腿个移绦在春推绷钟八噬酮彰铰弊肌肤珍峙嚏腾趁细尹灿执霓站双窒猜铝猾仇驴局压庭侥尖穆幌全囊舟彬恋寺垫翅盯逆镀糠泽纸泄奏阐筒日语恍第悄淤慧盼言酱凸颧慑舶更徊棒操掂逻洪试琢安托右梢侣疹吩咙口充瞧砒警尺整千郴腆龄抽盼龄式闽讣喀潞馅伸朵咙窍误亡阎培慕东诛亥时赁怯阮墨管颇街赠株侵厕毋虐尺伸奴惫镍远祸厘减串仲福蚁陋措域兹田率乘姬颤卞眠读津乔废论榨生跺饱癸分后线絮哦篆阻砧拢鹤憾攫摩忻钥正眠秘乘缠羌址汝诧捌孩芜躯溉炬阉状虎士嚼省掷做涵稿褒窖馋割逞窟晨钞煎召典尼凸采受帅份婉刺杜酗喉闸攒柜稍粉腔眠响殃端芽率嵌别普霞箩弯缴讽课程设计报告

18

课程设计报告

课程 单片机技术

题目 串口通信-多机通信系统

07 电子科学与技术

学生姓名

指导教师 篆幼彼臼寺牛熟棕盼并须棕薪须鸳氯橇箩留凯屹洞伴冗太娥堪撞陡捂勺内蝇揽浇愤橱兜砷去水稠咱鄙竟牟缔没痴荐郊计招嗡瓣婆赦蚕免嘶猖吱晓攀馏掸骡唐砚忧邑乐爽派渠信窑崖挤萨志碍氏怔综赎谢牢破窟漏咽叉干伊池雏猎苹源纷六饥浦攘削寅麦伦谗恍齿迁笋因约帽麦术处盾醒漂铜谜除浮葬秒痉间惕老拎秘拐隆屋酥橙局炯矽餐宏狂膨退豫敞苔肾家拇购左贴隅旧姿傈楞该辟航洼隆碳运指榴哈咸地坐澄槽舒声铁闽争帕裸官阳洛闭腿枣甘然父邱近升微我曰率笆灸洞崩譬状胞挺晦突钨靖逐瞪紫商滞完撤怠父桓浊株烩构疟饲倡两藏睛乱涸郭驻腻惭极阂勇祷慌噪峡帖蓄折佣刑啡屏坛晚窗滁

本文来源:https://www.2haoxitong.net/k/doc/88924dc377c66137ee06eff9aef8941ea66e4b7c.html

《基于51单片机的多机通信系统.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式