双机通信系统.docx
《双机通信系统.docx》由会员分享,可在线阅读,更多相关《双机通信系统.docx(20页珍藏版)》请在冰豆网上搜索。
双机通信系统
***学校
课程设计说明书
2012/2013学年第1学期
学院:
电子与计算机科学技术学院
专业:
电子科学与技术
学生姓名:
****
学号:
*****
课程设计题目:
双机通信系统
起迄日期:
2013年*月*日~2013年*月*日
课程设计地点:
电子科学与技术专业实验室
指导教师:
****
系 主 任:
****
完成日期:
2013年*月*日
课程设计任务书
1.设计目的:
1掌握电子电路的一般设计方法和设计流程;
2学习使用PROTEL软件绘制电路原理图及印刷板图;
3掌握应用EWB对所设计的电路进行仿真,通过仿真结果验证设计的正确性。
2.设计内容和要求(包括原始数据、技术参数、条件、设计要求等):
设计一个双机通信系统,具体要求如下:
1.甲机采集数字信号通过422接口传输到乙机。
2.乙机接收甲机传来的数字信号,并用LED显示.
3.设计工作任务及工作量的要求〔包括课程设计计算说明书(论文)、图纸、实物样品等〕:
①课程设计说明书;
②电路原理图和印刷板图;
③仿真图形和仿真结果。
课程设计任务书
4.主要参考文献:
①童诗白.模拟电子技术基础.北京:
高等教育出版社,2002
②张建华.数字电子技术.北京:
机械工业出版社,2004
③陈汝全.电子技术常用器件应用手册.北京:
机械工业出版社,2005
④毕满清.电子技术实验与课程设计.北京:
机械工业出版社,2005
⑤潘永雄.电子线路CAD实用教程.西安:
西安电子科技大学出版社,2002
⑥张亚华.电子电路计算机辅助分析和辅助设计.北京:
航空工业出版社,2004
5.设计成果形式及要求:
提交内容:
课程设计说明书、电路原理图和印刷板图、仿真图形和仿真结果.
基本要求:
绘制出电路原理图和印刷板图,通过仿真验证设计正确性。
6.工作计划及进度:
2013年1月2日-—2013年1月7日:
学习PROTEL、EWB软件的使用;
2013年1月8日:
设计中期检查;
2013年1月8日——2012年1月14日:
按任务书要求进行设计和仿真;
2013年1月15日:
设计答辩,提交设计报告和考核.
系主任审查意见:
签字:
年月日
1。
1系统设计思路...。
..。
。
.。
。
.。
。
。
.。
。
...。
....。
..。
.。
.。
。
。
。
....。
。
。
。
..。
。
3
1.2系统设计原理。
..。
。
.。
.。
。
......。
。
..。
。
。
。
.。
.。
。
。
...。
。
...。
.。
.。
。
.。
。
。
。
3
1.2。
1串行通信.。
。
。
..。
。
.。
。
..。
.....。
.。
。
。
..。
。
。
。
。
。
.。
.。
。
。
..。
。
....。
3
1。
2.2基本设计原理述.。
。
..。
。
..。
..。
..。
。
。
.。
.。
.。
..。
.。
.......。
。
.。
.5
1。
3系统设计结构图.。
。
..。
.。
。
..。
.。
。
.。
。
.。
。
..。
.。
......。
。
。
。
..。
。
。
。
..。
。
.5
3。
软件系统实现.。
。
.。
。
。
..。
。
.。
。
。
。
.。
..。
.。
。
。
。
..。
..。
..。
.....。
。
....。
..。
。
。
。
7
3。
1软件实现方案分析.。
。
。
.。
.。
。
。
..。
.。
。
。
。
..。
.。
...。
。
。
。
......。
。
.。
...7
3。
1。
1串行通信分为查询方式和中断方式.。
。
.。
。
..。
。
。
。
.。
..。
.。
.。
。
.。
。
7
3。
2主程序.....。
。
.。
....。
。
。
。
.。
。
.。
。
。
...。
。
..........。
.....。
。
..。
。
...7
4总结。
..。
.。
。
。
。
。
。
。
.。
。
.。
。
.。
.。
。
.。
。
。
。
。
.。
。
。
..。
.。
。
。
......。
。
。
.....。
.。
.。
.。
11
4。
1心得体会。
.。
..。
....。
。
..。
。
。
.。
..。
。
。
。
.。
....。
.。
...。
。
。
.。
...。
。
。
..。
。
11
5附录。
。
。
。
。
。
。
。
。
...。
.。
。
。
..。
。
..。
。
。
。
.。
。
..。
..。
..。
。
...。
.。
.。
..。
.。
.。
。
.....12
5.1PROTEL软件绘制电路原理图及印刷板图...。
.。
..。
。
.。
。
。
.。
...。
..。
.。
13
5.2Proteus仿真图。
。
。
。
。
..。
。
...。
...。
.。
。
.......。
.。
。
.。
。
。
。
。
。
.。
。
.。
.。
。
14
引言
【摘要】串行通信是单片机的一个重要应用。
本设计就是利用单片机来完成一个系统,实现双片单片机串行通信.随着计算机技术的快速发展和广泛应用,从智能家用电器到工业上的控制系统都采用了上位机与下位机基于串行通信的主从工作方式,这样就充分利用了微机分析处理能力强、速度快的特点及下位机(单片机)面向控制、使用灵活方便的优势。
由于87C51系列单片机具有性能稳定、工作可靠、价格低廉等可特点,因此其应用相当广泛。
87C51单片机中有异步通信串行接口,能方便的构成双机,多机通信接口。
随着测量向自动化,智能化,网络化方向的发展.利用多机通信构成的分布式系统逐渐普及.本实验就点对点的双机通信进行训练.学习串口的工作方式,初始化编程,和单片机与单片机点对点通信的编程方法以及硬件电路的设计方法。
在此基础上可以进一步提高,实现多机通信以及单片机与PC机的通信。
【关键字】双机通信从机应答单片机
1.系统整体设计
1。
1系统设计思路
该系统采用主从共两片87C51单片机来实现上位机对下位机的控制,由于是近距离的双机通信,我们采用单片机直接交叉连接的方式,上位机发送的数据由串行口TXD端输出,直接由下位机的串行口数据接收端RXD接收。
需要注意的是一定要保证主从机相同的数据传输速率,即要求设置相同的波特率.电路分为数码管显示模块,主机校验指示模块、以及单片机工作的基本复位、晶振模块。
1。
2.系统设计原理
1.2。
1串行通信
串行数据通信要解决两个关键问题,一个是数据传送,另一个是数据转换.所谓数据传送就是指数据以什么形式进行传送。
所谓数据转换就是指单片机在接收数据时,如何把接收到的串行数据转化为并行数据,单片机在发送数据时,如何把并行数据转换为串行数据进行发送。
单片机的串行通信使用的是异步串行通信,所谓异步就是指发送端和接收端使用的不是同一个时钟。
异步串行通信通常以字符(或者字节)为单位组成字符帧传送。
字符帧由发送端一帧一帧地传送,接收端通过传输线一帧一帧地接收。
而对于两个单片机之间的串行通信,由于具有相同的数据格式及电平且是短距离通信则不必要使用一些电平转化芯片(如max232等)便可直接实现串行通讯,需要注意的是两单片机硬件要共地,软件中需要设置相同波特率。
51单片机有一个全双工的异步串行通信口(UART),串行结构如下:
(1)数据缓冲器(SBUF)
接受或发送的数据都要先送到SBUF缓存。
有两个,一个缓存,另一个接受,用同一直接地址99H,发送时用指令将数据送到SBUF即可启动发送;接收时用指令将SBUF中接收到的数据取出。
(2)串行控制寄存器(SCON)
SCON用于串行通信方式的选择,收发控制及状态指示,各位含义如下:
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
SM0,SM1:
串行接口工作方式选择位,这两位组合成00,01,10,11对应于工作方式0、1、2、3。
串行接口工作方式特点见下表
串行口工作方式表
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。
RB9:
在方式2或3时,RB8位接收到的第9位数据,实际为主机发送的第9位数据TB8,使从机根据这一位来判断主机发送的时呼叫地址还是要传送的数据。
TI:
发送中断标志。
发送完一帧数据后由硬件自动置位,并申请中断。
必须要软件清零后才能继续发送。
RI:
接收中断标志。
接收完一帧数据后由硬件自动置位,并申请中断。
必须要软件清零后才能继续接收。
(3)输入移位寄存器
接收的数据先串行进入输入移位寄存器,8位数据全移入后,再并行送入接收SBUF中。
(4)波特率发生器
波特率发生器用来控制串行通信的数据传输速率的,51系列单片机用定时器T1作为波特率发生器,T1设置在定时方式。
波特率时用来表示串行通信数据传输快慢程度的物理量,定义为每秒钟传送的数据位数.
(5)电源控制寄存器PCON
其最高位为SMOD。
(6)波特率计算
当定时器T1工作在定时方式的时候,定时器T1溢出率=(T1计数率)/(产生溢出所需机器周期)。
由于是定时方式,T1计数率=fORC/12.产生溢出所需机器周期数=模M-计数初值X。
1.2.2基本设计原理概述
双机通信系统通过主从单片机的串行口来实现数据的收发.主单片机通过开关电路来启动发送程序,当开关按下时向从机发送一个数据,从机通过接收中断来接收主机发送过来的数据,并通过编写好的数据代码在LED数码管上显示主机发送过来的数据。
同时从机给主机发送一个应答信号来表示已经接收到了主机发送过来的数据,在主机接收应答并校验正确,以二极管显示,这样就完成了一个数据的通信过程,等待按键按下,然后继续下一次数据的发送直到结束。
1.3系统设计结构图
图1.3—1双机通信系统结构图
2。
硬件电路设计及实现
2。
1硬件电路设计方案
从硬件电路设计的目标出发,我们尽量考虑到可靠、高效、简洁的原则,在整个系统设计过程中严格按照规范进行,做好各部分模块设计最优。
简洁是指在满足了可靠、高效的要求后,为了尽量在器件允许的范围内使电路设计导线无交叉,应使电路设计尽量简洁,尽量减少元器件使用数量,缩小电路板面积,使电路部分重量轻。
在焊接电路板时由于从机的数码管管脚排布无规律,使得导线不能直接的焊接,我们尽量合理设计元件排列和电路走线,使本系统达到设计要求。
2.2硬件电路的实现
整个双机通信系统以87C51单片机为主控制器,由数码管为核心的数据显示模块、主机校验指示模块、以及单片机最小系统构成。
2.2.1以87C51为核心的单片机最小系统
87C51单片机的最小系统采用内部时钟方式:
以XTAL1和XTAL2引脚外接晶振,构成了自激振荡器并在单片机内部产生时钟脉冲信号,然后给晶振的每个脚分别外接一个30PF的电容,以此使晶振快速起振并且达到约12MHZ的稳定频率。
而在单片机的RST脚接上按键开关以及适当的电阻、电容便构成按键与断电两用的复位电路。
具体电路如图2。
2。
1—1所示:
图2.2。
1-1单片机最小系统
2。
2。
2数码管显示模块
设计中,我们使用的是共阴的两位一体数码管并使用P0口控制数码管段选信号,P2口选取两位为位选信号控制端。
拿到数码观后,我们借助万用表进行测试,最终确定为共阴型数码管,进一步测试便得出了该数码管对应的管脚分布图。
2。
2。
3主机校验指示模块
主机接收从机应答信号进行校验,成功后点亮P1口的指示灯并保持一段时间,然后进入等待状态,当按键按下便开始下一次数据传送。
这种握手模式是单片机在串行编程中使用的提高数据传输准确性的有效方法。
3软件系统实现
3.1软件实现方案分析
3.1。
1串行通信分为查询方式和中断方式
编程中,对于从机我们拟定采用中断接收和查询发送方式,原因在于程序开销无异。
中断方式使得从机时刻处于准备接收状态,接收后判断范围,显示,再回送。
而对于主机,工作流程分析如下:
得到按键允许,开始查询发送,查询中等待应答即中断接收,中断后得到应答,使得LED指示灯闪烁,如此往复。
串行通信程序设计包括:
1)初始化程序:
对特殊功能寄存器SCON和PEON的设置,来选择串行口的工作方式,设置通信波特率。
由于设计采用了中断方式,则还要对中断系统进行设置;2)发送数据的程序:
51单片机串口发送数据的条件是串行口已准备好,此时标志位TI状态为“1”,则需将待发数据传送到发送数据缓冲期SBUF,即启动一次发送;3)接收数据的程序:
51单片机串行口接收数据的条件是SCON中的RI置“1”,表明串行口已收到一个字节数据,此时即可置位取数标志;4)通信控制程序:
用来控制发送和接收的进行。
3.2主程序
//从机
#includeh〉
#defineuintunsignedint
#defineucharunsignedchar
ucharread_flag=0,x=0;
sbitP20=P2^0;
sbitP21=P2^1;
ucharcodeCODE[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
};
/**************************************************************************
函数功能:
延时ms
**************************************************************************/
voidmDelay(uintDelayTime)
{
uchari;
for(;DelayTime>0;DelayTime-—)
for(i=0;i<120;i++);
}
/**************************************************************************
函数功能:
发送一个字节数据
**************************************************************************/
voidSendData(ucharData)
{
SBUF=Data;
while(TI==0);
TI=0;
}
/**************************************************************************
函数功能:
显示接收到的数据
**************************************************************************/
voidDisplay(ucharx)
{
P21=0;
P20=1;
P0=CODE[x];
mDelay(20);
}
/**************************************************************************
主函数
**************************************************************************/
voidmain()
{
P0=0X00;
P2=0XFF;
SCON=0x50;//SMOSM1SM2RENTB8RB8TIR,方式1,允许串行接收
TMOD=0x20;//方式2,自动重装
PCON=0x00;
TH1=0xfd;//0xfd=253波特率=32*12M/12/(256-253)
TL1=0xfd;
TI=0;
RI=0;
TR1=1;
IE=0x90;
while
(1)
{
if(read_flag)
{
read_flag=0;
mDelay(200);
SendData(x);
}
}
}
/**************************************************************************
函数功能:
中断接收,置位取数标志
**************************************************************************/
voidS_INT()interrupt4
{
if(RI)
{
RI=0;
read_flag=1;//置位取数标志
x=SBUF;
if(x>=0&&x〈=9)
Display(x);
else
P0=0x00;//共阴
}
}
//主机
#include〈reg52.h>
#defineuintunsignedint
#defineucharunsignedchar
sbitKey=P1^7;
sbitLed=P1^6;
ucharcodeCODE[]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
ucharcodetable[]={0,1,2,3,4,5,6,7,8,9};
/**************************************************************************
函数功能:
延时ms
**************************************************************************/
voidmDelay(uintDelayTime)
{
uchari;
for(;DelayTime>0;DelayTime-—)
for(i=0;i<120;i++);
}
/**************************************************************************
函数功能:
发送一个字节数据
**************************************************************************/
voidSendData(ucharData)
{
SBUF=Data;
while(TI==0);TI=0;
}
/**************************************************************************
函数
**************************************************************************/
voidmain()
{
ucharData=0,i=0;
Led=0;
P0=0x00;
SCON=0x50;//REN=1,允许串行接收
TMOD=0x20;
PCON=0x00;
TH1=0xfd;
TL1=0xfd;
IE=0x90;
TI=0;
RI=0;
TR1=1;
while
(1)
{
if(Key==0)
mDelay(500);
while(Key==1);
if(i<=16)
{Data=table[i];
i++;
SendData(Data);
}
}
}
/**************************************************************************
函数功能:
中断接收数据,指示灯闪烁
**************************************************************************/
voidS_INT()interrupt4
{
if(RI)
{
RI=0;
Led=1;
mDelay(150);
Led=0;
}
}
4.总结
本次实训增强了我查阅资料的方法技巧,更是大大的提高了我们自学的能力,同时也增强了我们的动手能力。
我很清楚这个实验的目的,表面上我们最终仅仅只是实现了设计要求的基本功能,但我觉得,这次课程设计更加深刻的意义是——从这样一个最基本,简单的实验中,从这样一个完整的过程中我了解一种系统设计的流程,甚至说是一种思路,思维。
从最初拿到题目,分析设计要求以及实现的初步思路,然后去查阅资料进行更加具体的设计,整体上比较全面的统筹设计.于是,初步规划后,我开始将系统要实现功能的各个模块单独开来用PROTEUS仿真,并最终将各个模块组合后整体调试.整个过程中我在仿真上花费了较长时间,因为知道仿真成功是实现真正硬件电路的基础,仿真是从根本上检验设计者的设计逻辑以及思路的,很好的仿真才能使得设计系统在实现要求功能的基础上更加稳定、简单,仿真中,我们仔细斟酌了电路布线的合理性。
在编写程序代码的时候,使我学习到了最大的是87S51单片机的中断程序的编写。
在编写程序的时候由于之前只是在课余学的单片机中的中断源以及中断向量,所以在实践的编写代码过程中会遇到很多不懂的问题,需要请教同学,并学会了单片机的有关中断设计的思想,由于我是制作双机通信的课程设计,所以在实验中需要用到两片单片机作为主从机来控制信号的接受与发送。
还学习到了单片机在使用中断的时候,如果有中断申请的话,硬件电路会自动把单片机里接受发送中断的TI和RI置1。
这样就表示单片机此时有外部中断的申请,必须开中断来接受发送过来的信号。
5。
附录
5.1PROTEL软件绘制电路原理图及印刷板图
图5.1—1电路原理图
图5。
1-2PCB印刷板图
5。
2Proteus仿真图
图5。
2—1双机通信系统的proteus仿真图