双机通信实验c语言代码,双机通信实验报告.doc

双机通信实验报告

项目五 单片机间的双机通信

班级: 学号: 姓名:

一、任务目的

通过单片机之间的双机通信设计,进一步学习定时器的功能和编程应用,理解串行通信与并行通信两种通信方式的异同,掌握串行通信的重要指标:字符帧和波特率,初步了解MCS-51系列单片机串口的使用方法。

二、设计要求

本任务是简历一个简单的单片机串行口双机通信测试系统。系统中,发射与接收各用一套AT89C51单片机电路,称为甲机和乙机。编制程序,使甲,乙双方能够进行串行通信。要求将甲机内的多个数据(例发送给乙机,并在乙机的8个数码管上显示出来。

三、系统硬件电路设计

可分为最小系统、甲机发送、乙机接收显示三个单元电路,要求画出各部分电路图,写出工作原理。

最小系统:

甲机发送:

乙机接收显示:

显示部分的:

现实中的接线和显示:

四、软件设计

甲机的程序:

#include

void main() //主函数

{unsigned char i;

unsigned char send[]={0x01,0x09,0x09,0x02,0x1,0x00,0x00,0x09}; //定义要发送的数据,数据为生日的八位数

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

TL1=0xf4;//波特率为2400b/s

TH1=0xf4;

TR1=1;

SCON=0x40; //定义串行口工作方式1

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

{SBUF=send[i]; //发送第i个数据

while(TI==0); //查询等待发送是否完成

TI=0; //发送完成,TI由软件清零

}

while(1);}

乙机的程序:

#include

code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6D,0x7D,0x07,0x7f,0x6f}; //定义0~9显示字码型

unsigned char buffer[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //定义接收数据缓冲区

void disp(void); //显示函数声明

void main() //主函数

{unsigned char i;

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

TL1=0xf4; //波特率定义

TH1=0xf4;

TR1=1;

SCON=0x40; //定义串行口工作方式1

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

{

REN=1;//允许接收

while(RI==0); //查询等待接收标志位为1,表示接收到数据

buffer[i]=SBUF; //接收数据

RI=0; //RI由软件清零

}

for(;;) disp(); //显示接收数据

}

void disp()

{unsigned char i,j;

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

{ P2=i;

P0=(tab[buffer[i]]);//送显示字码型,buffer[i]作为数组分量的下标

for(j=100;j>5;j--);//显示延时

}}

五、系统调试

画proteus图,了解单片机最小系统,选用的元件有AT89C51,

编写程序。

编译程序并导入画好的proteus中,查看情况,调试。

在调试过程中,乙机上不能显后来请教了同学知道是程序出了问题,改好程序示出来了。

六、心得体会

经过这次练习,我对单片机的应用有了更深的认识了,知道了串行通信和并行通信之间的差别,也知道了串行通信分为单工、半双工和全双工三种制式。而我们这个实验中用的就是全双工的制式。我还学会了怎么设置波特率,也初步了解了串行口的工作方式。这次实验,对我了解单片机的功能有很大的帮助。

5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值