实验五 单片机多点串行通信系统设计实验

  • 格式:docx
  • 大小:280.24 KB
  • 文档页数:15

下载文档原格式

  / 28
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五单片机多点串行通信系统设计实验

一、实验目的

1、了解单片机串口结构;

2、掌握单片机串口通信方法;

3、掌握单片机多机通信系统硬件设计与编程方法。

二、实验仪器和设备

PC系统机、Proteus软件、KeilC51软件。

三、实验要求和实验步骤

1、实验要求

利用单片机串口通信技术设计多机通信系统。系统包含一个主机和三个从机。三个从机能将温度传感器采集信息通过串口将信息传送给主机并显示。

要求给出电路原理图,编写程序,给出仿真结果。

2、实验步骤

(1)画出仿真电路图;

(2)根据控制要求,编写源程序;

程序清单:

1.主机的程序:

//********************************************

//包含文件,程序开始

//********************************************

#include

#include"LCD1602.h"

#define uchar unsigned char

#define uint unsigned int

uchar a,b,fh;

uint t,t1;

//显示数据数组

uchar displaytemp1[15]="WenDu A: ";//

uchar displaytemp2[8]="B: ";//

uchar displaytemp3[8]="C: ";//

//*********************************************

//延时函数

//*********************************************

void delays (unsigned int us)

{

while(us--);

}

//*********************************************

//********************************************

//显示内容处理函数

//********************************************

//A点温度显示

void DISPLAY1()

{

displaytemp1[8]= fh;

displaytemp1[9]= t/100+0x30;

displaytemp1[10]= (t%100)/10+0x30;

displaytemp1[11]= (t%100)%10+0x30;

displaytemp1[12]= 0xdf;

displaytemp1[13]= 0x43;

LCD_Write_String(0,0,displaytemp1); }

//B点温度显示

void DISPLAY2()

{

displaytemp2[2]= fh;

displaytemp2[3]= t/100+0x30;

displaytemp2[4]= (t%100)/10+0x30;

displaytemp2[5]= (t%100)%10+0x30;

displaytemp2[6]= 0xdf;

displaytemp2[7]= 0x43;

LCD_Write_String(0,1,displaytemp2); }

//C点温度显示

void DISPLAY3()

{

displaytemp3[2]= fh;

displaytemp3[3]= t/100+0x30;

displaytemp3[4]= (t%100)/10+0x30;

displaytemp3[5]= (t%100)%10+0x30;

displaytemp3[6]= 0xdf;

displaytemp3[7]= 0x43;

LCD_Write_String(8,1,displaytemp3);

}

//通信函数************************************* void tongxin()

{

while(TI==0); //如果TI=0,未发送完,循环等待TI=0;

while(RI==0); // 若RI为0,未接收到数据RI=0; // 接收到数据,则把RI清0 a=SBUF;

while(RI==0); // 若RI为0,未接收到数据RI=0; // 接收到数据,则把RI清0 b=SBUF;

t=b;

t<<=8;

t=t|a;

t1=t;

if(t1>0xf000)

{

fh='-';

t=~t;

t+=1;

}

else

{

fh='+';

}

t=t*0.0625;

}

//主函数

//******************************************* void main()

{

TMOD=0x20; //设置定时器T1为方式2

TH1=0xfd; //波特率9600

TL1=0xfd;

SCON=0x50; //串口初始化方式1发送,接收PCON=0x00; // SMOD=0

TR1=1; //启动T1

LCD_initial(); //初始化液晶

while(1)

{

SBUF=0x01; //1号机

tongxin();

DISPLAY1();

delays(50);

SBUF=0x02; //2号机

tongxin();

DISPLAY2();

delays(50);

SBUF=0x03; //3号机

tongxin();

DISPLAY3();

delays(50);

}

}