实验八 RS232串口通信实验(接收与发送)

一、实验目的

1.熟悉实验软件和硬件,进行正确的接线;
2.通过实验了解串口的基本原理及使用,理解并掌握对串口进行初始化;
3.使用串口调试助手做为上位机来做收发试验;
4.利用串口调试助手中字符串输入进行数据发送,接受窗口显示收到的数据。

二、实验软硬件

1.Keil uVision4
2.PZISP自动下载软件
3.HC6800S开发板

三、实验原理

串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。

跳线帽位置选择
需要注意的是波特率的概念——这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。

串口原理图

四、软件流程图

RS232串口通信实验软件流程图

五、实验代码

1.#include<reg51.h>2.3.void main()4.{5.SCON=0X50; //设置为工作方式16.TMOD=0X20;//设置计数器工作方式27.PCON=0X80;//波特率加倍8.TH1=0XF3;//计数器初始值设置,波特率是4800的9.TL1=0XF3;10.ES=1; //打开接收中断11.EA=1; //打开总中断12.TR1=1;13.while(1){}14.}15.16.void Usart() interrupt 417.{18.unsigned char receiveData;19.receiveData=SBUF;//出去接收到的数据20.RI = 0; //清除接收中断标志位21.SBUF=receiveData; //将接收到的数据放入到发送寄存器22.while(!TI); //等待发送数据完成23.TI=0; //清除发送完成标志位24.} 

六、实验步骤

1.本实验无需连线,直接通过下载模块进行串口实验

跳线帽接线图
2.编写串口返回接收到的数据实验程序
定时器的初始化、中断的初始化。定时器工作在方式2,波特率设置为4800。在中断中读取SBUF中的数据,随后把这个数据再写入SBUF中。
3.下载串口返回接收到的数据实验程序

程序下载界面
4.调试验证实验结果
打开串口调试助手SSCOM,调整波特率4800,选择相应串口号,数据位为8,停止位为1,无校验位。然后输入字符串“Hello,World! 我爱单片机。”点击发送,串口调试助手接收数据区显示同样的字符串,表示实验成功。如果波特率不匹配则会出现乱码,也可以点击定时发送,这样屏幕就会不断地接收到相应的字符串。

七、实验思考

串口接收实验非常有趣,打开SSCOM串口调试工具,向单片机发送一条消息,然后单片机回复一条相同的消息。但如果我设置的波特率和代码里面设置的波特率不匹配,那么这项工作将无法完成。单片机将会对于我发给他的东西产生“误解”,然后发送回一个错误的回复。其实,和人之间的交流非常相像,两个人交流必须在同一个频道上,要不然只能像吵架一样“边听边骂”。
串口接收实验非常有用,之后单片机的大作业很多都用到了串口通信。这为之后的大作业打下坚实的基础。以后,在做类似的单片机应用开发,我想也离不开串口通信。因此,我觉得这次实验受益匪浅。
但是,51单片机只有一个串口,只能满足和一个单片机或者一台电脑或者一个传感器的通信。可以采用串口扩充,也可以选择串口资源丰富的Stm32单片机。