双机通信课程设计.docx
- 文档编号:8388506
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:11
- 大小:91.45KB
双机通信课程设计.docx
《双机通信课程设计.docx》由会员分享,可在线阅读,更多相关《双机通信课程设计.docx(11页珍藏版)》请在冰豆网上搜索。
双机通信课程设计
西安邮电大学
单片机课程设计报告书
题目:
双机通信系统
一、系统整体设计
1.系统设计思路
双机通信的实质就是解决两单片机串行通信问题。
针对于89C52单片机全双工异步串行通信口,我们采用单片机直接交叉互连的串行通信方式。
考虑到设计应用于短距离传输、两单片机具有相同的数据格式及电平且为使设计简单,我们最终决定采用方式二单片机直接交叉连接的串行通信方式,上位机发送的数据由串行口TXD端输出,直接由下位机的串行口数据接收端RXD接收。
需要注意的是一定要保证主从机相同的数据传输速率,即要求设置相同的波特率。
电路分为数码管显示模块,以及单片机工作的基本复位、晶振模块。
2.系统设计原理
(1)串行通信
串行数据通信要解决两个关键问题,一个是数据传送,另一个是数据转换。
所谓数据传送就是指数据以什么形式进行传送。
所谓数据转换就是指单片机在接收数据时,如何把接收到的串行数据转化为并行数据,单片机在发送数据时,如何把并行数据转换为串行数据进行发送。
单片机的串行通信使用的是异步串行通信,所谓异步就是指发送端和接收端使用的不是同一个时钟。
异步串行通信通常以字符(或者字节)为单位组成字符帧传送。
字符帧由发送端一帧一帧地传送,接收端通过传输线一帧一帧地接收。
而对于两个单片机之间的串行通信,由于具有相同的数据格式及电平且是短距离通信则不必要使用一些电平转化芯片(如max232等)便可直接实现串行通讯,需要注意的是两单片机硬件要共地,软件中需要设置相同波特率。
STC89C52单片机有一个全双工的异步串行通信口,串行结构如下:
①数据缓冲器(SBUF)
接受或发送的数据都要先送到SBUF缓存。
有两个,一个缓存,另一个接受,用同一直接地址99H,发送时用指令将数据送到SBUF即可启动发送;接收时用指令将SBUF中接收到的数据取出。
②串行控制寄存器(SCON)
SCON用于串行通信方式的选择,收发控制及状态指示,各位含义如下:
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
SM0,SM1:
串行接口工作方式选择位,这两位组合成00,01,10,11对应于工作方式0、1、2、3。
串行接口工作方式特点见下表1.
表1串行口工作方式表
SM0
SM1
工作方式
功能
波特率
0
0
0
8位同步移位寄存器(用于I/O扩展)
fORC/12
0
1
1
10位异步串行通信(UART)
可变(T1溢出率*2SMOD/32)
1
0
2
11位异步串行通信(UART)
fORC/64或fORC/32
1
1
3
11位异步串行通信(UART)
可变(T1溢出率*2SMOD/32)
SM2:
多机通信控制位。
REN:
接收允许控制位。
软件置1允许接收;软件置0禁止接收。
TB8:
方式2或3时,TB8为要发送的第9位数据,根据需要由软件置1或清0。
RB8:
在方式2或3时,RB8位接收到的第9位数据,实际为主机发送的第9位数据TB8,使从机根据这一位来判断主机发送的时呼叫地址还是要传送的数据。
TI:
发送中断标志。
发送完一帧数据后由硬件自动置位,并申请中断。
必须要软件清零后才能继续发送。
RI:
接收中断标志。
接收完一帧数据后由硬件自动置位,并申请中断。
必须要软件清零后才能继续接收。
③输入移位寄存器
接收的数据先串行进入输入移位寄存器,8位数据全移入后,再并行送入接收SBUF中。
④波特率发生器
波特率发生器用来控制串行通信的数据传输速率的,51系列单片机用定时器T1作为波特率发生器,T1设置在定时方式。
波特率时用来表示串行通信数据传输快慢程度的物理量,定义为每秒钟传送的数据位数。
⑤电源控制寄存器PCON
其最高位为SMOD:
波特率倍增位,在串行口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍,复位时,SMOD=0。
⑥波特率计算
当定时器T1工作在定时方式的时候,定时器T1溢出率=(T1计数率)/(产生溢出所需机器周期)。
由于是定时方式,T1计数率=fORC/12。
产生溢出所需机器周期数=模M-计数初值X。
(2)基本设计原理概述
双机通信系统通过主从单片机的串行口来实现数据的收发。
主单片机通过开关电路来启动发送程序,当开关按下时向从机发送一个数据,从机通过接收中断来接收主机发送过来的数据,并通过编写好的数据代码在LED数码管上显示主机发送过来的数据。
同时从机给主机发送一个应答信号来表示已经接收到了主机发送过来的数据,在主机接收应答并校验正确,以二极管显示,这样就完成了一个数据的通信过程,等待按键按下,然后继续下一次数据的发送直到结束。
3.系统设计结构图
图1双机通信系统结构图
二、设计要求及任务
◆按键触发主机向从机发送数据。
◆从机以中断方式实时接收数据。
◆从机将接受到的数据显示并回送应答信息给主机。
◆主机查询回送信息并校验以判断是否继续发送。
◆制作硬件电路,并调试,最后实现双机通信系统功能。
三、硬件电路设计及实现
1.硬件电路设计方案
从硬件电路设计的目标出发,我们尽量考虑到可靠、高效、简洁的原则,在整个系统设计过程中严格按照规范进行,做好各部分模块设计最优。
简洁是指在满足了可靠、高效的要求后,为了尽量在器件允许的范围内使电路设计导线无交叉,应使电路设计尽量简洁,尽量减少元器件使用数量,缩小电路板面积,使电路部分重量轻。
在焊接电路板时由于从机的数码管管脚排布无规律,使得导线不能直接的焊接,我们尽量合理设计元件排列和电路走线,使本系统达到设计要求。
2.硬件电路的实现
整个双机通信系统以STC89C52单片机为主控制器,由数码管为核心的数据显示模块、以及单片机最小系统构成。
3.以89C52为核心的单片机最小系统
89C52单片机的最小系统采用内部时钟方式:
以XTAL1和XTAL2引脚外接晶振,构成了自激振荡器并在单片机内部产生时钟脉冲信号,然后给晶振的每个脚分别外接一个30PF的电容,以此使晶振快速起振并且达到约12MHZ的稳定频率。
而在单片机的RST脚接上按键开关以及适当的电阻、电容便构成按键与断电两用的复位电路。
具体电路如图3.2.1-1所示:
图2单片机最小系统
4.数码管显示模块
设计中,我们使用的是共阳的两位一体数码管并使用P2口控制数码管段选信号,P1口选取两位为位选信号控制端。
拿到数码管后,我们借助万用表进行测试,最终确定为共阳型数码管,进一步测试便得出了该数码管对应的管脚分布图。
5.设计实物图
最终实物如下图3所示。
图3双机通信系统设计实物图
四、软件系统实现
1.Proteus仿真图
图4双机通信系统的proteus仿真图
2.软件实现方案分析
串行通信分为查询方式和中断方式。
编程中,对于从机我们拟定采用中断接收和查询发送方式,原因在于程序开销无异。
中断方式使得从机时刻处于准备接收状态,接收后判断范围,显示,再回送。
而对于主机,工作流程分析如下:
得到按键允许,开始查询发送,查询中等待应答即中断接收,中断后得到应答,使得LED指示灯闪烁,如此往复。
在主机编程中,我们增加了置位取数标志的编程思路,即通过查询取数标志实现在主函数回送应答并执行相应服务程序,如此一来,很好的避免了中断程序的冗长,提高了程序实现的效率。
串行通信程序设计包括:
1)初始化程序:
对特殊功能寄存器SCON和PCON的设置,来选择串行口的工作方式,设置通信波特率。
由于设计采用了中断方式,则还要对中断系统进行设置;2)发送数据的程序:
51单片机串口发送数据的条件是串行口已准备好,此时标志位TI状态为“1”,则需将待发数据传送到发送数据缓冲区SBUF,即启动一次发送;3)接收数据的程序:
51单片机串行口接收数据的条件是SCON中的RI置“1”,表明串行口已收到一个字节数据,此时即可置位取数标志;4)通信控制程序:
用来控制发送和接收的进行。
3.主程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitDIG1=P1^0;//位选信号控制
sbitDIG2=P1^1;
sbitLED=P1^3;//LED控制端
ucharch,i=0;
uintr,k;
ucharge,sh;
ucharconstNUM[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
voiddelay_ms(ucharms);
voidinitModule(void);
voidsendOneChar(ucharch);
voidsendOneChar(ucharch)
{
ES=0;
SBUF=ch;
while(!
TI);//判断发送中断位TI是否为1
TI=0;
ES=1;
}
voidinitModule()
{
TMOD=0x20;//定义定时器T1工作方式2
TH1=0xfd;//波特率9600b/s
TL1=0xfd;
SCON=0x50;//串口工作方式1,允许串口接收位REN=1
DIG1=0;//赋初值
DIG2=0;
LED=1;
}
voiddelay_ms(ucharms)//定义延时程序
{
uchari,j;
for(i=0;i { for(j=0;j<200;j++); for(j=0;j<102;j++); } } voidmain() { initModule(); EX0=1; IT0=1; ES=1; EA=1; TR1=1; P2=NUM[0]; while (1) {} } voidbutton()interrupt0//发送程序 { ucharnum=0; delay_ms(20); if(INT0==0) delay_ms(14); if(INT0==0) { LED=0; delay_ms(400); LED=1; i++; } sh=i/10; ge=i%10; while(num<15)//数码管显示 { for(r=5;r>0;r--) { DIG1=1; P2=NUM[sh]; delay_ms(5); DIG1=0; DIG2=1; P2=NUM[ge]; delay_ms(5); DIG2=0; } num++; } sendOneChar(i); } voidread()interrupt4//接收程序 { ucharnum=0; RI=0; LED=0; delay_ms(400); LED=1; sh=SBUF/10; ge=SBUF%10; while(num<15) { for(k=5;k>0;k--) { DIG1=1; P2=NUM[sh]; delay_ms(5); DIG1=0; DIG2=1; P2=NUM[ge]; delay_ms(5); DIG2=0; //k--; } num++; } } 五、总结 1.电路改进 为了保证数码管显示亮度,我们可以考虑增加必要的数码管驱动电路。 假如不驱动的话,单片机的单低电平仍然可以控制数码管的亮灭,但这时的数码的亮度会比较暗,并且扫描频率很高,仍然有微小的闪动现象.因为单片机的输出的电流并身就很弱。 在实际情况允许时,增加必要的电平转化芯片来连接两个单片机,则能够适应更远距离的数据通讯。 2.心得体会 本次实训增强了我查阅资料的方法技巧,更是大大的提高了我们自学的能力,同时也增强了我们的动手能力。 贺亚鹏: 我很清楚这个实验的目的,表面上我们最终仅仅只是实现了设计要求的基本功能,但我觉得,这次课程设计更加深刻的意义是——从这样一个最基本,简单的实验中,从这样一个完整的过程中我了解一种系统设计的流程,甚至说是一种思路,思维。 从最初拿到题目,分析设计要求以及实现的初步思路,然后去查阅资料进行更加具体的设计这次实验无疑要求我们团队协作,互相配合并且整体上比较全面的统筹设计。 于是,初步规划后,我们开始将系统要实现功能的各个模块单独开来用PROTEUS仿真,并最终将各个模块组合后整体调试。 整个过程中我们在仿真上花费了较长时间,因为知道仿真成功是实现真正硬件电路的基础,仿真是从根本上检验设计者的设计逻辑以及思路的,很好的仿真才能使得设计系统在实现要求功能的基础上更加稳定、简单,仿真中,我们仔细斟酌了电路布线的合理性。 在焊接过程中,由于之前的统筹布局使得我们的电路布线简洁、明了,需要注意的是,由于焊接的粗心,有些焊点需要一再解焊导致焊盘脱落,而且对于数码管管脚焊接方式也是值得进一步改进的,这便是我今后所要更加注意的,争取全心全意的焊接电路,不要因为某些粗心的原因是电路焊接发生错误,在那个下午坚持不懈的努力下我们终于完成了任务,可以说是大部分的任务都是在那个下午一气呵成的。 总的来说,在实验中,我们尽量统筹并使得团队协作发挥更大作用,第一周的周三分发元器件后,在第二天我们组便基本上完成了设计要求的基本功能,于是,我们利用剩下的时间去调试硬件以及更加深入的总结题目的意义。 最后,作为本次实验小组的组长,我对大家辛勤劳作默契配合的合作精神深感欣慰,希望以后得到好的继承与发扬! 李蕊妮: 本次课程设计我们做的是双机通信,刚开始时感觉上挺难的,因为别的课题都像是很直接的看到要做的东西,而我们的就不行。 后来经过一番了解后我才发现其实很简单的。 这次实验我们是四人一组,因为既要用到软件,又要用到硬件,所以我们就分工合作。 我和另一个同学负责硬件电路的仿真。 在仿真过程中我们刚开始想用单片机直接通信。 因为距离比较近,所以我们使用单片机进行通信。 如果距离远的话就要使用串口进行通信。 在焊接电路过程中,因为我们一直很细心,所以就没有什么问题。 通过这次课程设计让我又一次觉得团结的力量是那么的强大,合作精神是我们必不可少的。 首先我们要一起讨论怎么去设计这个双机通信,讨论怎么去实现,大概都要用什么实现;其次,我们在仿真硬件时,要告诉编程的同学我们是怎么做的,他们好根据这个来实现软件编程;最后,在调试时,我们做硬件的同学要检查电路是否哪里有问题,而软件的同学则要考虑是否是程序有问题,当我们确定是程序有问题时就一起想办法解决。 这次课程设计对我的影响不仅是现在的,还会影响我的以后,在以后的生活中我要发扬团结,互助,合作的精神。 这样才能发挥大家所有人的潜力。 大家都听过筷子的故事吧,它告诉我们团结就是力量。 好多项研究都是大家努力的结果,你听过哪项研究是一个人做的,也许有,但那毕竟是少数,我们都不是天才,合作精神对我们来说是必须的。 再说,人步、不可能脱离人群而独活,所以呢团结,互助,合作对我们都是必不可少的。 陈静茹: 本次课程设计我们组主要研究的是双机通信实验,通过与组成员之间的合作,在开始的前两天中,主要是通过查找资料,或是在图书馆里查看书籍来学习有关双机通信实验的基本要求和实验所需要的器件,以及各实验器件所实现怎样的功能。 经过了我们四个人的协商,由两个人开始编写代码,再由两个人开始设计实验电路。 在编写程序代码的时候,使我学习到了最大的是MCS51单片机的中断程序的编写。 在编写程序的时候由于之前只是在课堂上和书本上学习的有单片机中的中断源以及中断向量,所以在实践的编写代码过程中会遇到很多不懂的问题,需要自己或者与同组成员相互沟通。 并且也学会了单片机的有关中断设计的思想,由于我们是制作双机通信的课程设计,所以在实验中需要用到两片单片机作为主从机来控制信号的接受与发送。 还学习到了单片机在使用中断的时候,如果有中断申请的话,硬件电路会自动把单片机里接受发送中断的TI和RI置1.这样就表示单片机此时有外部中断的申请,必须开中断来接受发送过来的信号。 大概两天的时间,我们就把初步的软件程序和硬件电路设计好了。 并且在PROTEUS的仿真器件中实现了硬件电路的连接,然后我们把PROTEUS的仿真硬件和51的程序下载到单片机中通过调节实验硬件和共同修改软件程序最终实现了器件的仿真。 接下来就是焊接电路的工作了,由另外的组员来实现大部分的硬件电路的焊接,从中我也学习帮忙,尽快完成我们的全部的设计内容。 在完成了所有的焊接的时候,把程序下载到单片机中后,发现了数码管显示的和预期设置的有些不同,在经过简单的修改之后,我们成功的完成了我们的实验作品。 在此次课程设计中我学习到了好多新的知识以及通过了团队小组的合作受益匪浅。 张莉: 这次课程设计的题目比较简单,我们感觉自己完成的也比较出色。 我们采用了两位动态显示的数码管,掌握了多位数码管的工作原理;我们在硬件连接完成好以后进行检测,当我们检测所有的焊点都没有问题后,让单片机发送数据。 我们既用了汇编程序控制通信,也用了C语言程序,两个都实现了实验的要求,只不过汇编程序的参数设定的不够理想,数码管在高频闪动,我们也研究过好长时间,但还是不能够达到我们的要求。 通过两个星期的学习,我们在巩固和学习硬件知识的同时,用软件控制协调硬件实现现实功能,通过硬件完成软件的功能等方面的融会贯通,取得了一定的效果。 软件编写时,对于某些指令的功能,功能模块的连接,芯片地址选择等都遇到了很大的障碍,不过我们查阅资料得到了解决,与此同时,了解了不少的问题。 例如,51系列单片机具有多级中断功能,为了不至于在保护现场或恢复现场的的同时,由于CPU响应其他中断请求,而使现场破坏,一般规定,在保护和恢复现场时,CPU不响应外界的中断请求,即关中断。 另外,设计中犯一些常识性的错误,对设计进程造成了一定的影响。 在这次设计中,我收获不少东西,也遇到了不少的问题。 首先,在完成单片机课程学习任务后,对内容的掌握不够,缺乏灵活运用的能力,对于知识的扩展也存在一定的问题,因此,初面对设计课题,无法系统地进行设计思路的拟定。 通过本次课程设计,不仅使理论知识得到了实践,有效巩固了知识。 同时对于单片机发展历史、强大功能、应用领域以及系列知识得到了大概的系统认识,同时也初步了解了一个完整的系统开发的过程,对于创造思维的培养和开发能力的锻炼,本次设计,为此提供了一个很好的平台。 参考文献 [1]《单片机原理及接口技术》 高等教育出版社 李全利迟荣强 2006年 [2]《电子技术基础模拟部分》高等教育出版社 康华光 2004年
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 双机 通信 课程设计