串口通信实验报告

  • 格式:pdf
  • 大小:313.91 KB
  • 文档页数:5

串⼝通信实验报告

⼤连理⼯⼤学实验报告

成绩:

串⼝通信实验

⼀、实验⽬的和要求了解串⼝通信的原理与机制

掌握基于8051的串⼝通信硬件电路设计⽅法

掌握8051串⼝通信程序调试⽅法

⼆、实验原理和内容

实验原理:1.串⼝通信简介

串⼝通信是指数据在⼀根数据线上按照⼆进制数的数位⼀位接⼀位的传输。其特点是通信线路简单,只要⼀对传输线就可以实现通信(如电话线),可⼤⼤地降低成本,适⽤于远距离通信。缺点是传送速度慢。2. 51单⽚机串⾏⼝简介

51单⽚机的串⾏⼝是⼀个可编程全双⼯的通信接⼝,具有UART(通⽤异步收发器)的全部功能,能同时进⾏数据的发送和接收,也可以作为同步移位寄存器使⽤。51单⽚机的串⾏⼝主要由两个独⽴的串⾏数据缓冲寄存器SBUF组成,它可以通过特殊功能寄存器SBUF对串⾏接收或串⾏发送寄存器进⾏访问,两个寄存器共⽤⼀个地址99H,但在物理上是两个独⽴的寄存器,由指令操作决定访问哪⼀个寄存器。执⾏写指令时访问串⾏发送寄存器;执⾏读指令时,访问串⾏接收寄存器。3.串⾏⼝控制寄存器SCON

串⾏⼝控制寄存器SCON⽤来设定串⾏⼝的⼯作⽅式、接收或发送控制位以及状态标志位等。

在本实验中设定SM0为0,SM1为1,采⽤串⾏⼝的⼯作⽅式1(8位异步收发,波特率可变,由定时器控制)。允许串⾏接收位REN设置为1,其它控制、标志位设置为0。(即令SCON=0X50)4.定时器/计数器模式控制寄存器TMOD

定时器/计数器模式控制寄存器TMOD是⼀个逐位定义的8位寄存器,其中低四位(即D0 ~ D3)定义定时器/计数器T0,⾼四位(即D4 ~ D7)定义定时器/计数器T1。

在本实验中使⽤定时器1,设定M1=1,M2=0,,采⽤定时器T1的⼯作⽅式2(⾃动重载8位定时器/计数器),其它控制位设置为0。并由晶振频率(11.0592MHZ)和波特率(9600)计算初始化定时器T1:TH1=TL1=0xfd。

最后通过对TR1置1启动定时器T1。5.中断允许寄存器IE

EA:中断允许总开关控制位,置1,所有中断请求开放,置0,所有中断请求禁⽌。

ES: 当前位为1表⽰允许串⾏⼝中断,当前位为0表⽰禁⽌串⾏⼝中断

6.数码管显⽰原理

⾸先利⽤了74HC595这⼀CMOS器件,通过串⾏输⼊并⾏输出的⽅法,将单⽚机中的数据传输到数码管上显⽰。并且利⽤了⽚选的⽅式,以4ms为⼀个显⽰周期,轮流显⽰四个数码管,实现视觉上看到四个数码管同时显⽰不同数字的功能。

实验内容:

本实验将采⽤Proteus仿真软件仿真单⽚机及其外围器件,通过实现向串⼝调试助⼿发送数据和接收显⽰串⼝调试助⼿发来的数据这两个过程来模拟串⼝通信。1. 利⽤VSPD软件虚拟两个COM端⼝:COM1和COM2

2. 利⽤Proteus仿真单⽚机及其外围设备并将单⽚机和COM1相连

3. 串⼝调试助⼿连接COM2端⼝

4. 利⽤Keil软件编程控制单⽚机实现串⼝通信

三、主要设备与开发环境1.笔记本电脑

2.Keil开发系统

3.Proteus仿真系统

4.串⼝调试助⼿V2.2

5.虚拟串⼝VSPD软件

四、实验步骤与操作⽅法1. 在Proteus仿真系统中搭载电路

(1)选取AT89C52芯⽚,搭载晶振电路与复位电路。

(2)将晶振电路中的晶振改为11.0592MHZ,同时也将AT89C52中的晶振改为11.0592MHZ。

(3)选取COMPIM,配置串⼝,将AT89C52上的P3.0和P3.1与COMPIM上的RXD,TXD相连接。

(4)把COMPIM的物理端⼝设置为COM1,物理波特率设置为9600,物理数据位数设为8位,物理奇偶校验位设置为NONE,下⾯的虚拟波特率、虚拟数据位数和虚拟奇偶校验位与相应物理参数相同。

(4)选取7SEG-MPX4-CC数码显⽰管,74HC595串并转换芯⽚,搭载数码管显⽰电路,和74HC595串并转化电路。2. 在Keil开发系统中建⽴⼯程,编写相关代码

(1)编写相关代码

(2)将Keil和Proteus进⾏联调连接3. 建⽴虚拟串⼝,并通过串⼝调试助⼿调试,验证实验效果(1)通过VSPD创建两个可以相互通信的虚拟串⼝,如COM1和COM2。点击添加端⼝按钮后,可以看到左边栏中的虚拟端⼝处看到你新创建的两个虚拟端⼝。

(2)打开串⼝调试助⼿V2.2,对其进⾏配置,将串⼝改为COM2端⼝,波特率设为960,校验位选择NONE,数据位为8位,停⽌位为1位。

(3)编译Keil中的代码,⽆误后,点击start。

(4)在Proteus中点击play,可以在串⼝调试助⼿接受信息的窗⼝中观察到发送的信息

(5)在串⼝调试助⼿中,在发送信息框中输⼊4位数字,点击‘⼿动发送’按钮,可以在Proteus中看到数码显⽰管上显⽰出发送的数字。

五、实验结果1.AT89C52通过串⼝发送给PC的所有五位同学的信息

2.PC通过串⼝发送给AT89C52的四位数字,并在数码管上显⽰3.PC通过串⼝继续发送给AT89C52的相应信息,并在数码管上显⽰

六、核⼼代码及分析1.初始化函数

Init函数主要实现串⾏⼝通信的初始化操作:

void init()

{

SCON=0X50; //设置串⾏⼝为⼯作⽅式1,将串⾏接收位REN置1

TMOD=0x20; //设置定时器1为⼯作⽅式2

TH1=0xfd;

TL1=0xfd; //根据波特率初始化定时器1

TR1=1; //启动定时器1计数

TI=0;

RI=0; //将发送和接受中断标志位清0

}

2.PC端发送信息给AT89C52

在PC端准备好将要发送的字符串后,通过对字符串从头到尾的遍历,逐个字节发送到AT89C52的接收寄存器SBUF上,根据TI是否产⽣⾼电平后判断是否完成当前字节的发送,最后单独发送’\0’字符,即可完成PC通过串⼝发送信息给A T89C52的操作。下⾯是相关代码:void send_information()

{

char a;

char* A = "Hello";//这⾥将个⼈信息⽤hello代替

a = *A;//⼀旦串⼝初始好,直接将数据给sbuf就可以⾃动发送数据

//发送完成后会将TI置1

while (a != '\0')//连续发送每个字符

{

SBUF = a; //SBUF⼀次只缓⼀个字节

while (TI == 0);//等待发送该字节完成,完成发送后⾃动TI变1,跳出循环继续发送

TI = 0;

A++;

a = *A;

}

a = '\0'; //发送最后⼀个终⽌字符

SBUF = a;

while (TI == 0);

TI = 0;

}

3.AT89C52处理串⼝中断并接收信息,显⽰信息

⼀旦单⽚机接收中断标志位RI被置1且单⽚机处于指令周期中的中断周期,单⽚机就会跳转到中断服务函数去处理中断。通过检测RI产⽣的⾼电平,将SBUF中的信息逐个字节取出,依次存放⾄Message数组中。四个字节的数据存放完成后,通过ser_inout(table[Message[0]-'0'])将数字字符对应的显⽰在数码管上。下⾯是相关代码:

void Deal_interrupt() interrupt 4 //

{

uchar temp;

if(RI==1)//说明中断使能,有信息需要中断处理接收

{

RI=0;

temp=SBUF;//将信息哪出,每次拿⼀个字节

Message[(number++)%4]=temp; //循环的将4个数字字符放在tt数组中,通过number对4取模达到连续发送,储存的功能

}

}

七、讨论、建议、质疑

慕课教学⽅式采⽤⽹上授课的⽅法,显得⾮常的新颖独特。它能够给我们带来丰富多彩的授课⽅式,也能基于⼤数据分析技术改善教学质量。但是慕课在确保授课的有效性和平时成绩考核⽅⾯仍然存在⼀些问题。⼀⽅⾯,它能实时监督学习进度,防⽌传统授课⽅式期末考试前突击学习的学习⽅式。可另⼀⽅⾯,也容易造成线上视频、作业的得分⽔分过⾼的弊端。这就导致了在慕课教学模式下,

学⽣们要取得⾼分需要付出和传统教学模式更多的努⼒,但要保持不挂科,就⽐传统教学模式要简单的多。

因此建议⽼师能够对评分体制做⼀些相应的调整改⾰,使得慕课课堂可以更好的融⼊到更多的学习中。