双机通信实验报告
项目五 单片机间的双机通信
班级: 学号: 姓名:
一、任务目的
通过单片机之间的双机通信设计,进一步学习定时器的功能和编程应用,理解串行通信与并行通信两种通信方式的异同,掌握串行通信的重要指标:字符帧和波特率,初步了解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