51单片机编程应用(C语言):串口通信

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

目录

通信的基本概念和种类

   1.1串行通信与并行通信

​编辑

1.2同步通信与异步通信

1.3单工,半双工,全双工  

1.4通信速率 

二、波特率和比特率的关系

串口通信简介:

1.接口标准

RS-232

2、D型9针接口定义

3.通信协议:

2.串口内部结构 

51单片机串口相关寄存器 

 1.80c51串行口的控制寄存器

2.串口的使用方法 

串口实验 

1.单片机向电脑发送数据。

 2.电脑通过串口控制LED(且把数据传回电脑串口显示)


通信的基本概念和种类

   1.1串行通信与并行通信

什么是数据通信:数据通信就是指单片机与单片机之间或者单片机和其他设备之间的信息交换

而数据通信又分为串行通信并行通信

1.串行通信:

  • 串行通信:一位一位的按顺序的进行发送或接收的通信方式。优点是需要的传输线少,成本低。缺点是传输的速率慢,适合远距离的数据通信。

51单片机编程应用(C语言):串口通信,51单片机编程应用,51单片机,c语言,嵌入式硬件

  • 并行通信:数据的各位同时进行发送或接收的通信方式。优点是速率高。缺点是需要的传输线多,成本高,只适合近距离的数据通信。

51单片机编程应用(C语言):串口通信,51单片机编程应用,51单片机,c语言,嵌入式硬件

1.2同步通信与异步通信

同步通信与异步通信:简单来说就是发送方和接收方按照同一个时钟节拍工作就叫同步,发送方和接收方没有统一的时钟节拍,而各自按照自己的节拍工作就叫异步。

比如  烽火台      和            狼烟

(同步)

烽火台按照规定的时间发,比如7:00发一次,7:30发一次。

看狼烟的人也按规定的时间去接收,7:00看一次有没有狼烟,7:30看一次有没有狼烟。

7;05分敌人进攻了,烽火台也不会发生狼烟。看狼烟的人也不会接收到。

(异步)

烽火台按照规定的时间发,比如7:00发一次,7:05发一次。5分钟一次发

比如7:04分敌人进攻了,烽火台要到7:05发烽火,不会7:04发烽火

看狼烟的人2分钟看一下有没有狼烟。7:04看了没有狼烟,7:06才会去看

所以看狼烟的人7:06分才接受到有敌人进攻的消息。

同步通信中,通信双方按照同一节拍工作,配合很好:一般需要发送方给接收方发送信息同时发送时钟信息。接收方根据发送方给自己的时钟信号来安排自己的节奏。下图所示,时钟就是节拍。规定好的时间,计算机乙接收了节拍,就知道多少分钟拿一次数据。

同步通信用在双方信息交换频率固定,或者经常通信时。

优点:配合十分好       劣势:多了一个通讯线,专门发时钟的。

51单片机编程应用(C语言):串口通信,51单片机编程应用,51单片机,c语言,嵌入式硬件

异步通信: 又叫异步通知,在双方通信频率不固定时适合,(有时3ms收发一次,有时3天才发一次),这样就不适合使用同步通信而适合异步通信。

因为另外一个CPU要眼盯着你发送,有时长时间一个都不发,有时发一堆,没有规律,这样就浪费了接收方自己的很多时间。比如,看狼烟的人不可能一直盯着天空看,有没有狼烟,这样浪费了他很多时间。他自己也是有活干的。

再举个例子,两个人聊天,一个人说,你陪我说句话吧,那个人说,好,结果,你看到QQ有消息,回QQ消息回了3小时,那个人眼盯着你回消息回三个小时,一直等你说那句话,这样他肯定会很生气。自己3小时啥都没干,所以这就是异步通信的好处。如果是异步通信,你就会说,兄弟,我现在有点忙,你先忙你的,等我忙忘了,再来找你。

异步通信时接收方不必一直在意接收方,发送方需要发送信息时会首先给接收方一个信息开始的起始信号,接收方接收到起始信号后。就认为后面紧跟着的是有效信息。才会开始注意接收信息,直到收到发送方发来的结束标志。

举例子,还是你跟一个人说一句话,这是你来电话了,你跟那个人说,你先忙你的,等你打完电话,这是你拍了拍他(发生起始信号),那个人就会转头,让你把那句话说完,你说,OK,没事了(发送结束标志),那个人就继续干自己的事。

 异步通信特点:  不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个字符要附加2~3位用于起止位,各帧之间还有间隔,因此传输效率不高。

51单片机编程应用(C语言):串口通信,51单片机编程应用,51单片机,c语言,嵌入式硬件

1.3单工,半双工,全双工  

单工:只能单个方向传输。(相当于广播)单工是指数据传输仅能沿一个方向,不能实现反向传输。

51单片机编程应用(C语言):串口通信,51单片机编程应用,51单片机,c语言,嵌入式硬件

 半双工(分时)(相当于对讲机)半双工是指数据传输可以沿两个方向,但是需要分时进行。

51单片机编程应用(C语言):串口通信,51单片机编程应用,51单片机,c语言,嵌入式硬件

 全双工 (可以同时)(相当于电话) 全双工是指数据可以同时进行双向传输。

51单片机编程应用(C语言):串口通信,51单片机编程应用,51单片机,c语言,嵌入式硬件

所以每一个通信方式在这三种都要进行选择,当然每一个芯片都有自己的设定方式。

1.4通信速率 

 也叫比特率:衡量通信速度的快慢。

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

10位 x 240个/秒 = 2400 bps

波特率:可以看成比特率。是每秒钟传输多少个码元,

 码元:在通信系统中,携带数据信息的信号单元称为码元,也称为符号(symbol)

比如0V,同二进制0,5V同二进制1,所以一个码元等于二进制的比特位,可以存储0或1.

此时波特率等于比特率

0V,2V,4V,6V,分别用二进制00 01 10 11 表示的话,8个比特,4个码元,所以波特率等于比特率一半。

 举例说明:日常生活中乘坐公共交通工具出行,每个人就是一个比特,公共交通工具就是码元,单位时间的发车数量就是波特率,单位时间运输的人数就是比特率 。

在串口通信中,每秒发送的比特(0或1)是波特率,每秒钟发送的bit数为比特率。 所以,通常情况下,波特率等于比特率

二、波特率和比特率的关系

51单片机编程应用(C语言):串口通信,51单片机编程应用,51单片机,c语言,嵌入式硬件

由此可以得出,假设码元状态为N,则此码元所需要的比特位数如下:

51单片机编程应用(C语言):串口通信,51单片机编程应用,51单片机,c语言,嵌入式硬件

频谱带宽:频谱带宽其实是通信信号的最高频率和最低频率的差值。信号的波特率越高,在通信信道中传输此信号时,占用的通信信道频谱宽度就越大。比如在运输系统中,车型越大,行车占用的道路宽度就越大。

受硬件芯片处理速度的限制,为提升比特率,可通过提升波特率以及单个码元比特位数,进而提升比特率。此外,通信系统还要求设备芯片波特率≥信号波特率 ,通常芯片波特率有45GB、 69GB、 96GB、 128GB。如果所设计的信号波特率大于设备芯片波特率,则说明此信号是无法实现的,因为没芯片可以支持此信号的产生。

同时根据香农定理和经验,信号所需的频谱宽度数值应大于信号波特率的1.2倍,才能保证信号可以被高质量传输。在不考虑其它影响传输的因素,我们可以根据香农定理和经验,粗略算出波特率与所需频谱带宽的关系。

在主机和从机传输信号的过程中,主机和从机需要设置相同的波特率,否则会出现数据传输乱码现象或者数据传输失败现象。

串口通信简介:

1.接口标准

什么是串口:串口,全称为串行接口(Serial Port),是一种计算机通信接口,主要用于连接计算机和其他外部设备,如键盘、鼠标、打印机等。串口通过串行通信的方式工作,这意味着数据是以位(bit)为单位依次发送的。这种通信方式的一个显著特点是可以使用简单的双绞线实现双向通信,这在成本降低方面非常有用,尤其适合于长距离通信。尽管串口的速度相对较慢,但它提供了可靠的数据传输和低成本的解决方案,因此在许多应用中仍然被广泛使用。

串口是一种接线标准,他的接口一定要一致,如下图:

51单片机编程应用(C语言):串口通信,51单片机编程应用,51单片机,c语言,嵌入式硬件

串口通信遵循特定的通信协议,这些协议定义了数据位的位数、波特率、校验位和停止位等参数。不同的串口技术,如通用异步收发器(UART)、TTL电平转换和RS-232/RS-485,虽然它们的电气特性可能有所不同,但它们都遵循相似的通信时序协议,因此都可以统称为串口。

总结来说,串口是一种使用串行通信技术的物理接口,提供了一种低成本且易于使用的数据传输方法,广泛应用于各种外设产品和数据采集系统中。

我们举个例子:

RS-232

RS-232接口符合美国电子工业联盟(EIA)制定的串行数据通信的接口标准,全双工,其中 RS 为英文 “Recomend Standard” 的缩写,中文翻译为“推荐标准”,232为标识号。原始编号全称是EIA-RS-232(简称232,RS232)。它被广泛用于计算机串行接口外设连接,连接电缆和机械、电气特性、信号功能及传送过程,其输出的电平称为 RS232 电平。

1、RS-232电平逻辑
RS-232不同于TTL的电平逻辑,为负逻辑,最简单的RS232通信由三条数据线组成,即 TxD、RxD 和GND。负12V代表高电平,即-15V ~ -3V为逻辑1,正12V代表低电平,即+3V ~ +15V为逻辑0,电压也有标准范围。这里的电平,是TXD线(或者RXD线)相对于 GND 的电压。

2、D型9针接口定义

记住一点,这种接口的协议只有两种:RS-232和RS-485。不会是TTL电平的(除非特殊应用)。

一般用的最多的是RXD、TXD、GND,三个信号。9针如上图右所示。

引脚功能图如下:

51单片机编程应用(C语言):串口通信,51单片机编程应用,51单片机,c语言,嵌入式硬件

通常我们在串口通信只会用2 3 7脚D25模式下 

3.通信协议:

串行通信是一种概念,是指一个bit一个bit的收发数据,相对于并行通信可一次性可以同时收发n个bit而言。包括普通的串口通信,包括IIC,包括SPI等等。串口通信是一种通信手段/方式,是相对于以太网方式、红外方式、蓝牙方式、usb方式(usb广义也算串行通信)等而言,是一种比较低级的通信手段。

51单片机编程应用(C语言):串口通信,51单片机编程应用,51单片机,c语言,嵌入式硬件

了解各种通信还需要多去实验,后面我会主要介绍几种常用的通信协议。

2.串口内部结构 

51单片机编程应用(C语言):串口通信,51单片机编程应用,51单片机,c语言,嵌入式硬件

51单片机串口相关寄存器 

51单片机编程应用(C语言):串口通信,51单片机编程应用,51单片机,c语言,嵌入式硬件

51单片机编程应用(C语言):串口通信,51单片机编程应用,51单片机,c语言,嵌入式硬件

 1.80c51串行口的控制寄存器

51单片机编程应用(C语言):串口通信,51单片机编程应用,51单片机,c语言,嵌入式硬件

    △ SM2,多机通信控制位,主要用于方式2和方式3。当接收机的SM2=1时可以利用收到的RB8来控制是否激活RI(RB8=0时不激活RI,收到的信息丢弃;RB8=1时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)。当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制SM2,可以实现多机通信。 在方式0时,SM2必须是0。在方式1时,如果SM2=1,则只有接收到有效停止位时,RI才置1。

 △ REN,允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收

    △ TB8,在方式2或方式3中,是发送数据的第九位,可以用软件规定其作用。可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。在方式0和方式1中,该位未用。

 △ RB8, 在方式2或者方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位。

  △ TI,发送中断标志位。在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。在中断服务程序中,必须用软件将其清0,取消此中断申请。

  △ RI,接收中断标志位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请。

51单片机编程应用(C语言):串口通信,51单片机编程应用,51单片机,c语言,嵌入式硬件

51单片机编程应用(C语言):串口通信,51单片机编程应用,51单片机,c语言,嵌入式硬件

2.串口的使用方法 

51单片机编程应用(C语言):串口通信,51单片机编程应用,51单片机,c语言,嵌入式硬件

51单片机编程应用(C语言):串口通信,51单片机编程应用,51单片机,c语言,嵌入式硬件

51单片机编程应用(C语言):串口通信,51单片机编程应用,51单片机,c语言,嵌入式硬件 

根据自己需要按步骤来设置。 

串口实验 

发送和接收都“可以”触发中断,只是在发送的时候中断允许没有打开,所以“不会”发生中断。至于为什么发送的时候为什么不打开中断允许,看个人需要。(个人理解,错了指正)

为什么串口发电脑不要中断,串口接收电脑要中断

因为发送之后不需要单片机做什么,接受的时候需要单片机来记录下数据

4.只要RI>=1或者TI>=1就会触发串口中断。前提是程序打开了总中断和串口中断。

此时发送和接受都触发了中断,而且我们打开了中断,所以我们要区分(串口发电脑我们没有打开总的中断)

1.首先和内部结构有关,要结合串口通信内部结构来理解。

2.有数据发送过来,RI和TI会由硬件自动置1.

1.单片机向电脑发送数据。

51单片机编程应用(C语言):串口通信,51单片机编程应用,51单片机,c语言,嵌入式硬件

写在while循环外面就要按复位键,不然一直停止while循环里面

下面是代码:完成单片机每次向电脑发送递增的数据(16进制)

这里没有用中断,定时器一只是可以计数,这样有溢出来产生波特率

#include <REGX52.H>
#include "Delay.h"

unsigned char  Sec;

void UART_Init(void)		//4800bps@11.0592MHz
{
	PCON |= 0x80;		//使能波特率倍速位SMOD
	SCON = 0x40;		//8位数据,可变波特率   REN接收使能没打开
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xF4;		//设置定时初始值
	TH1 = 0xF4;		//设置定时重载值
	ET1 = 0;		//禁止定时器%d中断
	TR1 = 1;		//定时器1开始计时
}

void UART_sendByte(unsigned char Byte)
{
	SBUF=Byte;
	while(TI==0);
	TI=0;
}


void  main()
{
	UART_Init();
	//UART_sendByte(0x11);
	while (1)
    {
		UART_sendByte(Sec);
		Sec++;
		Delay(1000);
    }
}

 2.电脑通过串口控制LED(且把数据传回电脑串口显示)

用的是串口中断。无法知道电脑什么时候发送,如果电脑发送数据了,触发串口中断,在中断中处理数据

main.c

#include <REGX52.H>
#include "Delay.h"
#include "UART.h"

void  main()
{
	UART_Init();
	while (1)
    {
		
    }
}

void UART_Routine()  interrupt 4
{
	if(RI==1)
	{
		P2=~SBUF;
	    UART_sendByte(SBUF);
		RI=0;
	}
}

UART.c

#include <REGX52.H>

/**
  * @brief  串口初始化    4800bps@11.0592MHz
  * @param  无
  * @retval 无
  */
void UART_Init(void)		
{
	PCON |= 0x80;		//使能波特率倍速位SMOD
	SCON = 0x50;		//8位数据,可变波特率
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xF4;		//设置定时初始值
	TH1 = 0xF4;		//设置定时重载值
	ET1 = 0;		//禁止定时器%d中断
	TR1 = 1;		//定时器1开始计时
	EA=1;           //使用打开中断
	ES=1;           //表示使用串口中断
}
/**
  * @brief  串口发送一个字节数据
  * @param  Byte  要发送一个字节数据
  * @retval 
  */
void UART_sendByte(unsigned char Byte)
{
	SBUF=Byte;
	while(TI==0);
	TI=0;
}

 UART.h

#ifndef __UART_H__
#define __UART_H__
 
void UART_Init(void);
void UART_sendByte(unsigned char Byte);
 
#endif

波特率计算方式,hex模式和文本模式区别听P20 47分钟后面 。

 文章来源地址https://www.toymoban.com/news/detail-825160.html

到了这里,关于51单片机编程应用(C语言):串口通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 51单片机(串口通信、蓝牙)

    51单片机(串口通信、蓝牙)

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

    2024年02月15日
    浏览(12)
  • 51单片机学习--串口通信

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

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

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

    【51单片机】串口通信&&使用串口通信控制LED灯

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

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

    【51单片机系列】proteus仿真单片机的串口通信

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

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

    【PROTEUS-51单片机串口通信仿真】

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

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

    c51单片机串口通信(中断方式接收数据)(单片机--单片机通信)示例代码 附proteus图

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

    2024年02月13日
    浏览(41)
  • 51单片机:中断系统(外部中断,定时器中断,串口通信)

    51单片机:中断系统(外部中断,定时器中断,串口通信)

    目录 中断系统简介: 中断的优先级和嵌套: 8个中断请求源及其优先级: 中断的分别介绍: 1、外部中断0:INT0   2、外部中断1  3、T0和 T1:定时计数器的功能 4、串口中断(串口为什么使用定时器后面讲) 中断寄存器 (1)中断允许控制(IE) (2)中断请求标志(TCON) (

    2024年01月25日
    浏览(10)
  • 51单片机串口通信原理、相关寄存器配置与简单串口收发程序代码

    51单片机串口通信原理、相关寄存器配置与简单串口收发程序代码

    目录 1. 串口通信原理 2. 51单片机串口通信  2.1 串口简要模式图  2.2 相关寄存器 (1)PCON、SCON、SBUF (2)IE、IPH、IP (3)配置T1定时器 2.3 波特率和系统时钟和TH1和TL1计算  3.串口通信简单收发使用代码   3.1 在STC-isp使用端口助手,从单片机发送字节  3.2 通过端口助手利用主

    2024年02月05日
    浏览(15)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包