基于51单片机的双机串行通信.docx

上传人:b****6 文档编号:8718180 上传时间:2023-02-01 格式:DOCX 页数:9 大小:115.13KB
下载 相关 举报
基于51单片机的双机串行通信.docx_第1页
第1页 / 共9页
基于51单片机的双机串行通信.docx_第2页
第2页 / 共9页
基于51单片机的双机串行通信.docx_第3页
第3页 / 共9页
基于51单片机的双机串行通信.docx_第4页
第4页 / 共9页
基于51单片机的双机串行通信.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

基于51单片机的双机串行通信.docx

《基于51单片机的双机串行通信.docx》由会员分享,可在线阅读,更多相关《基于51单片机的双机串行通信.docx(9页珍藏版)》请在冰豆网上搜索。

基于51单片机的双机串行通信.docx

基于51单片机的双机串行通信

基于51单片机的双机串行通信

LT

图1.AT89C51(52)

(1)数据缓冲器(SBUF)

接受或发送的数据都要先送到SBUF缓存。

有两个,一个缓存,另一个接受,用同一直接地址99H,发送时用指令将数据送到SBUF即可启动发送;接收时用指令将SBUF中接收到的数据取出。

(2)串行控制寄存器(PCON)

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。

2.整体电路设计

最终设计电路如下图3所示,发送方的数据由串行口TXD段输出,经过传输线将信号传送到接收端。

信号到达接收方串行口的接收端。

接受方接收后,通过P1口在数码管上显示接收的信息。

图3.串行通信电路

 

三、软件设计

(1)串行口工作于方式1;用定时器1产生9600bit/s的波特率,工作于方式2。

(2)功能:

将本机ROM中数码表TAB[16]中的16个数发送到从机,并保存在从机内部ROM中,从机收到这16个数据后送到一个数码管循环显示。

(3)通信协议:

主机首先发送连络信号从机接收到之后返回一个连络信号表示从机已准备好接收。

四、联合调试

在protues上进行仿真实验。

首先使用KeilC将编写完成的程序编译生成HEX文件,将HEX文件烧录到两片单片机中,进行仿真实验,结果如下图所示,可以看到,接收端已将接受到的数据完整的显示了出来。

图4.仿真图

注:

1.仿真的过程中并没有体现出单片机的最小系统的组成元素:

时钟电路和复位电路,但是实际的硬件电路中这两部分是必不可少的,此外,在实际测试中,程序是事先烧进单片机里的,所以这里并没有涉及到电平转换的问题(max232芯片和串口的连接)。

2.在数码管的共阴极与地之间接三极管是为了放大数码管的驱动电流,让数码管更加清楚的显示数据。

附:

主要器件:

两个STC89C52RC晶振模块:

两个11.0592M的晶振四个30pf的电容复位模块:

两个开关两个10uf的电容两个10K的电阻两个1K的电阻显示模块:

两个单显共阴极数码管两个NPN型三极管

五、程序清单

1.A机程序

#include

#include

sbitkey=P3^6;

voidsendrecieve();

voidmain()

{

P1=0XFF;

TMOD=0x20;//定时器1工作作方式2

TH1=0XFD;

TL1=0XFD;//波特率为9600

PCON=0X00;//波特率不加倍

TR1=1;

SCON=0X50;//串口工作方式为3,即11为可变波特率,

//开启允许串口接收中断,多机通讯位SM2置1(广播),TB8置1(表示发送地址)

//开发送及接受中断

EA=1;

key=1;

sendrecieve();

}

voidsendrecieve()

{

SBUF=0X06;

while(TI!

=1);//等待数据发送完成,发送完则ti置1,否则为0

TI=0;

while

(1)

{

while(RI!

=1);//等待接收数据完成

RI=0;

P1=SBUF;//显示B发送来的数据

}

}

1.B机程序

#include

#include

voidsendrecieve();

sbitkey=P3^6;

unsignedcharcodeled[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴极,标准接法(a--hPX.0--PX.7)

unsignedinti;

delay(unsignedintz)

{

unsignedintx,y;

for(x=z;z>0;z--)

{

for(y=6000;y>0;y--);//50ms

}

}

voidmain()

{

P1=0XFF;

TMOD=0x20;//定时器1工作作方式2

TH1=0XFD;

TL1=0XFD;//波特率为9600

PCON=0X00;//波特率不加倍

TR1=1;

SCON=0X50;//串口工作方式为3,即11为可变波特率,

key=1;//开启允许串口接收中断,多机通讯位SM2置1

EA=1;

delay(20);

sendrecieve();

}

voidsendrecieve()

{

while(RI!

=1);

P1=SBUF;

RI=0;

for(i=0;i<16;i++)

{

SBUF=led[i];//向A发送信息

while(TI!

=1);//等待数据发送完成,发送完则ti置1,否则为0

TI=0;

delay(60);//3s

}

i=0;

}

六、课设中遇到的问题及解决办法:

由于这次的课设内容比较简单,所以我们在软件环节没有没遇到什么困难,在软件仿真时也很顺利,但是在最后焊接板子的时候,我们却遇到了问题:

数码管的各管脚的排列顺序不是遵循一定的规律的,所以在焊接时要特别注意布局与布线,在这个环节上我们花费了吗大半的时间。

七、心得体会:

本次课程设计我的是双机通信实验,在开始的前两天中,主要是通过查找资料,或是在图书馆里查看书籍来学习有关双机通信实验的基本要求和实验所需要的器件,以及各实验器件所实现怎样的功能。

并且也学会了单片机的有关中断设计的思想,由于制作双机通信的课程设计,所以在实验中需要用到两片单片机作为主从机来控制信号的接受与发送。

还学习到了单片机在使用中断的时候,如果有中断申请的话,硬件电路会自动把单片机里接受发送中断的TI和RI置1.这样就表示单片机此时有外部中断的申请,必须开中断来接受发送过来的信号。

大概两天的时间,我们就把初步的软件程序和硬件电路设计好了。

并且在PROTEUS的仿真器件中实现了硬件电路的连接,然后我们把PROTEUS的仿真硬件和51的程序下载到单片机中通过调节实验硬件和共同修改软件程序最终实现了器件的仿真。

接下来就是焊接电路的工作了,在完成了所有的焊接的时候,把程序下载到单片机中后,发现了数码管显示的和预期设置的有些不同,在经过简单的修改之后,我们成功的完成了我们的实验作品。

在此次课程设计中我学习到了好多新的知识,使受益匪浅。

这次课程设计所用到的知识都是在自己理解的基础之上,采用了一位动态显示的数码管,数码管的工作原理;在硬件连接完成好以后进行检测,当检测所有的焊点都没有问题后,让单片机发送数据。

用了C语言程序,实现了实验的要求。

软件编写时,对于某些指令的功能,功能模块的连接,等都到了小问题,不过我查阅资料得到了解决,与此同时,了解了不少的问题。

在这次设计中,我收获不少东西,也遇到了不少的问题。

首先,在完成单片机课程学习任务后,对内容的掌握不够,缺乏灵活运用的能力,对于知识的扩展也存在一定的问题,因此,初面对设计课题,无法系统地进行设计思路的拟定。

通过本次课程设计,不仅使理论知识得到了实践,有效巩固了知识。

同时对于单片机发展历史、强大功能、应用领域以及系列知识得到了大概的系统认识,同时也初步了解了一个完整的系统开发的过程,对于创造思维的培养和开发能力的锻炼,本次设计,为此提供了一个很好的平台。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1