51单片机串口通信的原理及使用方法(附串口收发数据例程代码)

这篇具有很好参考价值的文章主要介绍了51单片机串口通信的原理及使用方法(附串口收发数据例程代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

温馨提示:本篇文章详细介绍了串口的原理及使用方法,涉及的内容较多,但也较为全面,学者若想充分掌握串口通信的原理和具体使用方法(部分限于51单片机),请静下心来将其读完,相信一定会受益匪浅!而且对32单片机的串口学习也有非常好的辅助!

一.串行通信的原理

1.随着多微机系统的广泛应用和计算机网络技术的普及,计算机的通信功能愈来愈显得重 要。计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。
2.通信有并行通信和串行通信两种方式。在多微机系统以及现代测控系统中信息的交换多采用串行通信方式。
3.计算机通信是将计算机技术和通信技术的相结合,完成计算机与外部设备或计算机与计算机之间的信息交换。可以分为两大类:并行通信与串行通信。
4.并行通信 通常是将数据字节的各位用多条数据线同时进行传送
单片机串口收发程序,51单片机,51单片机,网络,嵌入式硬件

 并行通信控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难。 

5.串行通信是指 使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。其只需要少数几条线就可以在系统间交换信息,特别适用于计算机与计算机、计算机与外设之间的远距离通信。

单片机串口收发程序,51单片机,51单片机,网络,嵌入式硬件

单片机串口收发程序,51单片机,51单片机,网络,嵌入式硬件

6.串行通信的特点:传输线少,长距离传送时成本低,但数据的传送控制比并行通信复杂。 

串行通信又可分为异步通信同步通信

(1).异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。

(2).

单片机串口收发程序,51单片机,51单片机,网络,嵌入式硬件

 异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传送的,即字符之间不一定有“位间隔”的整数倍的关系,但同一字符内的各位之间的距离均为“位间隔”的整数倍。

异步通信是一种很常用的通信方式(效率较低)异步通信在发送字符时,发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便使接收端能够正确地将每一个字符接收下来。所传送的数据以字节为单位。每个字节前加上一位起始位,每个字节的后面加上停止位。好处:异步通信的好处是通信设备简单、便宜,但传输效率较低。

单片机串口收发程序,51单片机,51单片机,网络,嵌入式硬件

(3).同步通信

同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。此时,传输数据的位之间的距离均为“位间隔”的整数倍,同时传送的字符间不留间隙,即保持位同步关系,也保持字符同步关系。发送方对接收方的同步可以通过两种方法实现。  

单片机串口收发程序,51单片机,51单片机,网络,嵌入式硬件

 二.串行通信的传输方向

单工:单向的(或者是收或者是发)

半双工:收/发不可同时进行

全双工:收/发可同时进行

单片机串口收发程序,51单片机,51单片机,网络,嵌入式硬件

 三 .串行通信常见的错误校验

1、奇偶校验

      在发送数据时,数据位尾随的1位为奇偶校验位(10)。奇校验时,数据中“1”的个数与校验位“1”的个数之和应为奇数;偶校验时,数据中“1”的个数与校验位“1”的个数之和应为偶数。接收字符时,对“1”的个数进行校验,若发现不一致,则说明传输数据过程中出现了差错。

2、代码和校验

      代码和校验是发送方将所发数据块求和(或各字节异或),产生一个字节的校验字符(校验和)附加到数据块末尾。接收方接收数据同时对数据块(除校验字节外)求和(或各字节异或),将所得的结果与发送方的“校验和”进行比较,相符则无差错,否则即认为传送过程中出现了差错。

3、循环冗余校验

      这种校验是通过某种数学运算实现有效信息与校验位之间的循环校验,常用于对磁盘信息的传输、存储区的完整性校验等。这种校验方法纠错能力强,广泛应用于同步通信中。

四.传输速率

      比特率是每秒钟传输二进制代码的位数,单位是:位/秒(bps)。如每秒钟传送2个字符,而每个字符格式包含10位(1个起始位、1个停止位、8个数据位),这时的比特率为:

           10位×240个/秒 = 2400 bps

五.串行通信接口标准

(一)、RS-232C接口

RS-232CEIA(美国电子工业协会)1969年修订RS-232C标准。RS-232C定义了       数据终端设备(DTE)与数据通信设备(DCE)之间的物理接口标准。

1、机械特性

 RS-232C接口规定使用25针连接器,连接器的尺寸及每个插针的排列位置都有明确的           定义。(阳头)

单片机串口收发程序,51单片机,51单片机,网络,嵌入式硬件

单片机串口收发程序,51单片机,51单片机,网络,嵌入式硬件

 单片机串口收发程序,51单片机,51单片机,网络,嵌入式硬件

 六.传输距离与传输速率的关系

串行接口或终端直接传送串行信息位流的最大距离与传输速率及传输线的电气特性有关。当传输线使用每0.3m(约1英尺)有50PF电容的非平衡屏蔽双绞线时,传输距离随传输速率的增加而减小。当比特率超过1000 bps 时,最大传输距离迅速下降,如9600 bps 时最大距离下降到只有76m(约250英尺)。

七.采用RS-232C接口存在的问题

1、传输距离短,传输速率低

     RS-232C总线标准受电容允许值的约束,使用时传输距离一般不要超过15米(线路条件好时也不超过几十米)。最高传送速率为20Kbps。

2、有电平偏移

     RS-232C总线标准要求收发双方共地。通信距离较大时,收发双方的地电位差别较大,在信号地上将有比较大的地电流并产生压降。

3、抗干扰能力差

      RS-232C在电平转换时采用单端输入输出,在传输过程中当干扰和噪声混在正常的信号中。为了提高信噪比,RS-232C总线标准不得不采用比较大的电压摆幅。

八.串行接口的结构

单片机串口收发程序,51单片机,51单片机,网络,嵌入式硬件

 有两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H

在逻辑上,SBUF只有一个,它既表示发送寄存器,又表示接收寄存器,具有同一个单元地址99H。但在物理结构上,则有两个完全独立的SBUF,一个是发送缓冲寄存器SBUF,另一个是接收缓冲寄存器SBUF。如果CPU写SBUF,数据就会被送入发送寄存器准备发送;如果CPU读SBUF,则读入的数据一定来自接收缓冲器。即CPU对SBUF的读写,实际上是分别访问上述两个不同的寄存器。 a = SBUF; SBUF = a;


九.串口使用的方法

需对相关寄存器进行配置,设定其工作模式

1.设置T1的工作方式(编程TMOD寄存器);
2.计算T1的初值,装载TH1、TL1;
3.启动T1(编程TCON中的TR1位);
4.确定串行口控制(编程SCON寄存器);

5.如需串行口在中断方式工作时,要进行中断设置编程IE寄存器。

与串行通信相关的寄存器:

单片机串口收发程序,51单片机,51单片机,网络,嵌入式硬件

 串行口控制寄存器SCON(可位寻址)

单片机串口收发程序,51单片机,51单片机,网络,嵌入式硬件

单片机串口收发程序,51单片机,51单片机,网络,嵌入式硬件

单片机串口收发程序,51单片机,51单片机,网络,嵌入式硬件

T1作为波特率发生器时,最典型的用法是使T1工作在自动再装入的8位定时器方式(即方式2,且TCONTR1=1,以启动定时器)。这时溢出率取决于TH1中的计数值。

         T1 溢出率 = fosc /{12×[256 -(TH1]}

常用串口波特率:

   300600120024004800960019200   ……115200

单片机串口收发程序,51单片机,51单片机,网络,嵌入式硬件

 单片机串口收发程序,51单片机,51单片机,网络,嵌入式硬件

单片机串口收发程序,51单片机,51单片机,网络,嵌入式硬件

 单片机串口收发程序,51单片机,51单片机,网络,嵌入式硬件

 定时计数器中断相关寄存器

 单片机串口收发程序,51单片机,51单片机,网络,嵌入式硬件

 单片机同优先级中内部查询顺序

内部查询顺序: 在同时收到几个同一优先级的中断请求时,哪一个中断请求能优先得到响应,取决于内部的查询顺序。这相当于在同一优先级内,还同时存在另一辅助优先级结构,其查询顺序如下:

单片机串口收发程序,51单片机,51单片机,网络,嵌入式硬件

void UART() interrupt 4  //串口中断处理函数,加关键字interrupt和入口号

{

中断处理语句

}

/*
串口收发程序,把发送的数据接收后用P1口的LED灯以二进制的形式显示
并且蜂鸣器发出提示音,再把接收的数据加1并发出。
使用STC ISP软件界面上的串口助手,选择对应的串口号,
设置波特率为9600,选择HEX模式发送和接收
*/
#include <reg52.h>

#define uchar unsigned char
#define uint  unsigned int

sbit beep = P2^3;//蜂鸣器接口
uchar num;//发送暂存变量

void delay(uint z)
{
	uint x,y;
	for(x = z; x > 0; x--)
		for(y = 114; y > 0 ; y--);
}	
void UART_init()
{
	TMOD = 0x20;  	//T1工作模式2  8位自动重装
	TH1 = 0xfd;
	TL1 = 0xfd; 	//比特率9600
	TR1 = 1;		//启动T1定时器
	SM0 = 0;
	SM1 = 1; 		//串口工作方式1 10位异步
	REN = 1;		//串口允许接收
	EA  = 1;		//开总中断
	ES  = 1;		//串口中断打开
}
void main()
{
	UART_init(); //串口初始化
	while(1);	
}


void UART() interrupt 4
{
	if(RI)	//检测是否接收完成
	{
		num = SBUF;	  //num 取出接收缓存器的值
		P1 = SBUF;
		beep = 0;
		delay(100);
		beep = 1;//蜂鸣器发出滴提示音
		num++;//把接收的数据加1并发送
		RI = 0;
		SBUF = num;	
		while(!TI);
		TI = 0;
	}
}
#include <reg52.h>
#include <stdio.h>

#define uint unsigned int
#define uchar unsigned char

//毫秒级延时函数定义
void delay(uint z)
{
	uint x,y;
	for(x = z; x > 0; x--)
		for(y = 114; y > 0 ; y--); 		
} 

//串口初始化
void UARTInit()
{
	SM0 = 0;	SM1 = 1;//串口工作方式1,8位UART波特率可变
	TR1 = 1;//启动定时器1
	TMOD |= 0x20;//定时器1,工作模式2 8位自动重装
	TH1 = 0xfd;
	TL1 = 0xfd;//设置比特率9600
}

void main()
{
	UARTInit(); //串口初始化
	while(1)
	{
		TI = 1;
		puts("大家好!欢迎学习单片机");
		while(!TI);
		TI = 0;
		delay(1000);
	}	
}


使用printf()puts()前都应软件置位TI = 1;
printf()puts()  使用putchar函数发送字节

void putchar(uchar sbyte )
{
    while(!TI);   //等待发送完

    SBUF=sbyte;

}

所以第一次调用putchar前没TI=1 永远等待

本次分享到此结束了,其中读者应该能够感受到芯片手册、中文手册的重要性,因为很多知识都是摘抄于这些资料的,所以建议学者在学习过程中不要忽视对相关手册的学习和记录!

考虑到一些读者需要相关资料和解决一些疑问,因此我新建立了一个学习交流群,我在群文件里上传了一些资料,需要的读者可以入群下载。

群中文件资料我会时常更新,主要资料是51单片机开发、32单片机开发、编程、嵌入式学习、算法控制等。

由于群中文件还在不断更新上传,有些方面的资料还不太完善,希望大家理解。若群中涉及违规行为,欢迎举报!

单片机串口收发程序,51单片机,51单片机,网络,嵌入式硬件

单片机串口收发程序,51单片机,51单片机,网络,嵌入式硬件文章来源地址https://www.toymoban.com/news/detail-706756.html

到了这里,关于51单片机串口通信的原理及使用方法(附串口收发数据例程代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 51单片机学习--串口通信

    首先需要配置寄存器: 下面这里SCON配0x40和0x50都可以,因为暂时还不需要接受信息,所以REN置1置0都可 在main中调用SendByte函数,每按下一次复位键,接收缓冲区就会收到一个11 这就是单向发送的一个简单实例,接下来实现每隔一秒发送一个递增的数据,只需要添加一个全局变

    2024年02月14日
    浏览(38)
  • 51单片机(八)串口通信

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月05日
    浏览(43)
  • 51单片机(串口通信、蓝牙)

    串行接口简称串口,也称 串行通信接口 或串行通讯接口(通常指COM接口),是采用串行通信方 式的扩展接口。串行接口(Serial Interface)是指 数据一位一位地顺序传送。 其特点是通信线路简 单,只要一对传输线就可以实现 双向通信( 可以直接利用电话线作为传输线),从

    2024年02月15日
    浏览(33)
  • 【51单片机】串口通信&&使用串口通信控制LED灯

    🎊专栏【51单片机】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【Promise】 🥰大一同学小吉,欢迎并且感谢大家指出我的问题🥰 目录 🍔串口通信 😎代码   🍔串口初始化 ⭐分析  🏳️‍🌈确定T1的工作方式 🎈TMOD=0X20;  🏳️‍🌈确定T1的初值 🎈

    2024年02月17日
    浏览(37)
  • 【51单片机系列】proteus仿真单片机的串口通信

    本文参考:https://zhuanlan.zhihu.com/p/425809292。 在proteus之外使用串口软件和单片机通信。通过在proteus设计一个单片机接收PC发送的数据,并将接收的数据发送出去,利用软件【Configure Virtual Serial Port Driver】创建一对虚拟串口,利用软件【串口助手】向单片机发送数据。 proteus仿真

    2024年01月17日
    浏览(42)
  • 【PROTEUS-51单片机串口通信仿真】

    本次实验对51单片机的串口进行了双机通信的仿真,实现了51单片机的简单双机通信;现对本次仿真的结构及实现的功能做简要的介绍, 本次仿真主要构成:主机U1-MASTER、从机U2-SLAVE、以及LED显示部分(第一部分显示主机接收到的信息、第二部分显示从机接收到的信号); 实

    2024年01月15日
    浏览(63)
  • c51单片机串口通信(中断方式接收数据)(单片机--单片机通信)示例代码 附proteus图

         单片机一般采用中断方式接受数据,这样便于及时处理 其中发送数据段采用的是查询方式,接收端采用了中断方式, 要注意的地方有: 在中断处理函数int_0()内,处理数据前要先关闭中断,否则中断可能会不断传过来, EA=0; 然后退出中断处理函数前恢复中断处理能力:

    2024年02月13日
    浏览(45)
  • 51单片机编程应用(C语言):串口通信

    目录 通信的基本概念和种类    1.1串行通信与并行通信 ​编辑 1.2同步通信与异步通信 1.3单工,半双工,全双工   1.4通信速率  二、波特率和比特率的关系 串口通信简介: 1.接口标准 RS-232 2、D型9针接口定义 3.通信协议: 2.串口内部结构  51单片机串口相关寄存器   1.80c

    2024年02月19日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包