51单片机——串行通信
日期:2024-01-08 16:08:26   来源:数据采集转换类

  通信的概念较为广泛,在单片机技术中,单片机与单片机或单片机与别的设备之间的数据传输称为通信。

  根据数据传输方式的不同,可将通信分并行通信和串行通信两种。同时传输多位数据的方式称为并行通信。同时传输一位数据的方式称为串行通信。

  如图1(a)所示,在并行通信方式下,单片机中的8位数据10011101通过8条数据线同时送到外部设备中。并行通信的特点是数据传输速度快,但由于需要的传输线多,故成本高,只适合近距离的数据通信。逐位传输数据的方式称为串行通信。

  如图1(b)所示,在串行通信方式下,单片机中的8位数据10011101通过一条数据线逐位传送到外部设备中。串行通信的特点是数据传输速度慢,但由于只需要一条传输线,故成本低,适合远距离的数据通信。

  串行通信又可分为异步通信和同步通信两种。51系列单片机采用异步通信方式。

  在异步通信中,数据是一帧一帧传送的。异步通信如图2 所示,这种通信是以帧为单位做数据传输,一帧数据传送完成后,可以接着传送下一帧数据,也可以等待,等待期间为空闲位(高电平)。

  在串行异步通信时,数据是以帧为单位传送的。异步通信的帧数据格式如图3所示。从图中能够准确的看出,一帧数据由起始位、数据位、奇偶校验位和停止位组成。

  表示一帧数据的开始,起始位一定为低电平。当单片机要发送数据时,先送一个低电平(起始位)到外部设备,外部设备接收到起始信号后,马上开始接收数据。

  它是要传送的数据,紧跟在起始位后面。数据位的数据可以是5~8位,传送数据时是从低位到高位逐位进行的。

  该位用于检验传送的数据有无错误。奇偶校验是检查数据传送过程中是否发生错误的一种校验方式,分为奇校验和偶校验。奇校验是指数据位和校验位中“1”的总个数为奇数,偶校验是指数据位和校验位中“1”的总个数为偶数。以奇校验为例,若单片机传送的数据位中有偶数个“1”,为保证数据和校验位中“1”的总个数为奇数,奇偶校验位应为“1”,如果在传送过程中数据位中有数据产生错误,其中一个“1”变为“0”,那么传送到外部设备的数据位和校验位中“1”的总个数为偶数,外部设备就知道传送过来的数据发生错误,会要求重新传送数据。数据传送采用奇校验或偶校验均可,但要求发送端和接收端的校验方式一致。在帧数据中,奇偶校验位也可以不用。

  它表示一帧数据的结束。停止位可以是1位、1.5位或2位,但一定为高电平。一帧数据传送结束后,可以接着传送第二帧数据,也可以等待,等待期间数据线为高电平(空闲位)。如果要传送下一帧,只要让数据线由高电平变为低电平(下一帧起始位开始),接收器就开始接收下一帧数据。

  51 系列单片机在串行通信时,根据设置的不同,其传送的帧数据有以下四种方式:

  称为同步移位寄存器输入/输出方式,它是单片机通信中较特殊的一种方式,通常用于并行I/O接口的扩展,这样的形式中的一帧数据只有8位(无起始位、停止位)。

  在这种方式中,一帧数据中有1位起始位、8位数据位和1位停止位,共10位。

  在这种方式中,一帧数据中有1位起始位、8位数据位、1位可编程位和1位停止位,共11位。

  这种方式与方式2相同,一帧数据中有1位起始位、8位数据位、1位可编程位和1位停止位,它与方式2的区别仅在于波特率(数据传送速率)设置不同。

  在异步通信中,每一帧数据发送前要用起始位,结束时要用停止位,这样会占用一定的时间,导致数据传输速度较慢。为了更好的提高数据传输速度,在计算机与一些高速设备做数据通信时,常采用同步通信。同步通信的帧数据格式如图4所示。

  从图中能够准确的看出,同步通信的数据后面取消了停止位,前面的起始位用同步信号代替,在同步信号后面能跟很多数据,所以同步通信传输速度快。但由于在通信时要求发送端和接收端严格保持同步,这需要用复杂的电路来保证,所以单片机很少采用这种通信方式。

  串行通信根据数据的传送方向可分为三种方式:单工方式、半双工方式和全双工方式。这三种传送方式如图5所示。

  ① 单工方式。在这种方式下,数据只能向一个方向传送。单工方式如图5(a)所示,数据只能由发送端传输给接收端。

  ② 半双工方式。在这种方式下,数据可以双向传送,但同一时间内,只能向一个方向传送,只有一个方向的数据传送完成后,才能往另一个方向传送数据。半双工方式如图5(b)所示,通信的双方都有发送器和接收器,一方发送时,另一方接收,由于只有一条数据线,所以双方不能在发送的同时进行接收。

  ③ 全双工方式。在这种方式下,数据可以双向传送,通信的双方都有发送器和接收器,由于有两条数据线,所以双方在发送数据的同时可以接收数据。全双工方式如图5(c)所示。

  单片机通过串行通信口可以与别的设备进行数据通信,将数据传送给外部设备或接受外部设备传送来的数据,以此来实现更强大的功能。

  SBUF是可以直接寻址的特殊功能寄存器(SFR),它包括发送SBUF和接收SBUF,发送SBUF用来发送串行数据,接收SBUF用来接收数据,两者共用一个地址(99H)。在发送数据时,该地址指向发送SBUF;而在接收数据时,该地址指向接收SBUF。

  SCON 的功能是控制串行通信口的工作方式,并反映串行通信口的工作状态。

  T1用作波特率发生器,用来产生接收和发送数据所需的移位脉冲,移位脉冲的频率越高,接收和传送数据的速率越快。

  串行通信口有接收数据和发送数据两个工作过程,下面以图6所示的串行通信口结构为例来说明这两个工作过程。

  在接收数据时,若RXD端(与P3.2引脚共用)接收到一帧数据的起始信号(低电平),SCON寄存器马上向接收控制器发出允许接收信号,接收控制器在定时器/计数器T1产生的移位脉冲信号控制下,控制输入移位寄存器,将 RXD 端输入的数据由低到高逐位移入输入移位寄存器中,数据全部移入输入移位寄存器后,移位寄存器再将全部数据送入接收 SBUF中,同时接收控制器通过或门向CPU发出中断请求,CPU马上响应中断,将接收SBUF中的数据全部取走,从而完成了一帧数据的接收。后面各帧的数据接收过程与上述相同。

  相对于接收过程来说,串行通信口发送数据的过程较简单。当CPU要发送数据时,只要将数据直接写入发送SBUF中,就启动了发送过程。在发送控制器的控制下,发送门打开,先发送一位起始信号(低电平),然后依次由低到高逐位发送数据,数据发送完毕,最后发送一位停止位(高电平),从而结束一帧数据的发送。一帧数据发送完成后,发送控制器通过或门向CPU发出中断请求,CPU响应中断,将下一帧数据送入SBUF,开始发送下一帧数据。

  串行通信口的工作受串行控制寄存器SCON和电源控制寄存器PCON的控制。

  SCON 寄存器用来控制串行通信的工作方式及反映串行通信口的一些工作状态。SCON寄存器是一个8位寄存器,它的地址为98H,其中每位都可以位寻址。SCON寄存器各位的名称和地址如下。

  通过设置这两位的值,可以让串行通信口工作在四种不同的方式,具体见表1,这几种工作方式在后面将会详细介绍。

  当一个单片机(主机)要与其他几个单片机(从机)通信时,就要对这些位进行设置。当SM2=1时,允许多机通信;当SM2=0时,不允许多机通信。

  当REN=1时,允许串行通信口接收数据;当REN=0时,禁止串行通信口接收数据。

  该位可以用软件规定其作用,可用作奇偶校验位,或在多机通信时,用作地址帧或数据帧的标志位,在方式0和方式1中,该位不用。

  该位可以用软件规定其作用,可用作奇偶校验位,或在多机通信时,用作地址帧或数据帧的标志位,在方式1中,若SM2=0,则RB8是接收到的停止位。

  当串行通信口工作在方式0时,发送完8位数据后,该位自动置“1”(即硬件置“1”),向CPU发出中断请求,在CPU响应中断后,必须用软件清0;在其他几种工作方式中,该位在停止位开始发送前自动置“1”,向CPU发出中断请求,在CPU响应中断后,也必须用软件清0,以准备开始发送下一帧数据。

  当串行通信口工作在方式0时,接收完8位数据后,该位自动置“1”,向CPU发出接收中断请求,在CPU响应中断后,必须用软件清0;在其他几种工作方式中,该位在接收到停止位期间自动置“1”,向CPU发出中断请求,在CPU响应中断取走数据后,必须用软件对该位清0,以准备开始接收下一帧数据。在上电复位时,SCON各位均为“0”。

  PCON寄存器是一个8位寄存器,它的字节地址为87H,不可位寻址,并且只有最高位SMOD与串行通信口控制有关。PCON寄存器各位的名称和字节地址如下。

  在串行通信口工作在方式1~3时起作用。若SMOD=0,波特率不变;当SMOD=1时,波特率加倍。在上电复位时,SMOD=0。

  串行通信口有四种工作方式,工作在何种方式受SCON寄存器的控制。在串行通信时,要改变数据传送速率(波特率),可对波特率进行设置。

  方式0称为同步移位寄存器输入/输出方式,常用于扩展I/O端口。在单片机发送或接收串行数据时,通过RXD端发送数据或接收数据,而通过TXD端送出数据传输所需的移位脉冲。

  当串行通信口工作在方式0时,若要发送数据,通常在外部接8位串/并转换移位寄存器74LS164,具体连接电路如图7所示。其中RXD端用来输出串行数据,TXD端用来输出移位脉冲,P1.0端用来对74LS164进行清0。

  在单片机发送数据前,先从P1.0引脚发出一个清0信号(低电平)到74LS164的CLR引脚,对其进行清0,让D7~D0全部为“0”,然后单片机在内部执行写SBUF指令,开始从RXD端(P3.0引脚)送出8位数据,与此同时,单片机的TXD端输出移位脉冲到74LS164的CLK引脚,在移位脉冲的控制下,74LS164接收单片机RXD端送到的8位数据(先低位后高位),数据发送完毕,在74LS164的D7~D0端输出8位数据。另外,在数据发送结束后,SCON寄存器的发送中断标志位TI自动置“1”。

  当串行通信口工作在方式0时,若要接收数据,一般在外部接8位并/串转换移位寄存器74LS165,具体连接电路如图8 所示。在这种方式时,RXD端用来接收输入的串行数据,TXD端用来输出移位脉冲,P1.0端用来对74LS165的数据来进行锁存。

  在单片机接收数据前,先从 P1.0 引脚发出一个低电平信号到74LS165 的引脚,让74LS165锁存由D7~D0端输入的8位数据,然后单片机内部执行读SBUF指令,与此同时,单片机的TXD端送移位脉冲到74LS165的CLK1引脚,在移位脉冲的控制下,74LS165中的数据逐位从RXD端送入单片机,单片机接收数据完毕,SCON寄存器的接收中断标志位RI自动置“1”。

  在方式1时,串行通信口可以发送和接收每帧10位的串行数据。其中TXD端用来发送数据,RXD端用来接收数据。

  在方式1中,一帧数据中有10位,包括1位起始位(低电平)、8位数据位(低位在前)和1位停止位(高电平)。在方式1时,串行通信口又分两种工作情况:发送数据和接收数据。

  在发送数据时,若执行写SBUF指令,发送控制器在移位脉冲(由定时器/计数器T1产生的信号再经16或32分频而得到)的控制下,先从TXD端送出一个起始位(低电平),然后再逐位将8位数据从 TXD 端送出,当最后一位数据发送完成,发送控制器马上将SCON的TI位置“1”,向CPU发出中断请求,同时从TXD端输出停止位(高电平)。

  在方式1时,需要设置SCON中的REN=1,串行通信口才允许接收数据。由于不知道外部设备何时会发送数据,所以串行通信口会不断检测RXD端,当检测到RXD端有负跳变(由“1”变为“0”)时,说明外部设备发来了数据的起始位,于是启动RXD端接收,将输入的8位数据逐位移入内部的输入移位寄存器。8位数据全部进入输入移位寄存器后,如果满足RI位为“0”、SM2位为“0”(若SM2不为“0”,但接收到的数据停止位为“1”也可以)的条件,输入移位寄存器中的8位数据才可以放入SBUF,停止位的“1”才能送入SCON的RB8位中,RI位就会被置“1”,向CPU发出中断请求,让CPU取走SBUF中的数据,若条件不满足,输入移位寄存器中的数据将无法送入SBUF而丢弃,重新等待接收新的数据。

  在方式2时,串行通信口可以发送和接收每帧11位的串行数据,其中1位起始位、8位数据位、1位可编程位和1位停止位。TXD端用来发送数据,RXD端用来接收数据。

  在方式2时,发送的一帧数据有11位,其中有9位数据,第9位数据取自SCON中的TB8位。在发送数据前,先用软件设置TB8位的值,然后执行写SBUF指令(如MOV SBUF,A),发送控制器在内部移位脉冲的控制下,从TXD端送出一个起始位(低电平),然后逐位送出8位数据,再从TB8位中取出第9位并送出,当最后一位数据发送完成,发送控制器马上将SCON的TI位置“1”,向CPU发出中断请求,同时从TXD端输出停止位(高电平)。

  在方式2时,同样需设置SCON的REN=1,串行通信口才允许接收数据,然后不断检测RXD端是否有负跳变(由“1”变为“0”),若有,说明外部设备发来了数据的起始位,于是启动RXD端接收数据。当8位数据全部进入输入移位寄存器后,如果RI位为“0”、SM2位为“0”(若SM2不为“0”,但接收到的第9位数据为“1”也可以),输入移位寄存器中的8位数据才可以送入SBUF,第9位会放进SCON的RB8位,同时RI位置“1”,向CPU发出中断请求,让CPU取走SBUF中的数据,否则输入移位寄存器中的数据将无法送入SBUF而丢弃。

  当SCON中的SM0=1、SM1=1时,串行通信口工作在方式3。方式3与方式2一样,传送的一帧数据都为11位,工作原理也相同,两者的区别仅在于波特率不同,方式2的波特率固定为fosc/64或fosc/32,而方式3的波特率则可以设置。

  在串行通信中,为了能够更好的保证数据的发送和接收成功,要求发送方发送数据的速率与接收方接收数据的速率相同,而将双方的波特率设置相同就能够达到这个要求。在串行通信的四种方式中,方式0的波特率是固定的,而方式1~方式3的波特率则是可变的。波特率是数据传送的速率,它用每秒传送的二进制数的位数来表示,单位符号是bit/s。

  方式0的波特率固定为时钟振荡频率的1/12,即方式0的波特率 = fosc/12

  方式1和方式3的波特率除了与SMOD位有关,还与定时器/计数器T1的溢出率有关。方式1和方式3的波特率可用下式计算:

  T1的溢出率是指定时器/计数器T1在单位时间内计数产生的溢出次数,也即溢出脉冲的频率。

  在将定时器/计数器T0设作工作方式3时,T1可以工作在方式0、方式1或方式2三种方式下。

  如果要提高串行通信口的波特率,可让T1工作在方式2,因为该方式计数时间短,溢出脉冲频率高,并且能通过设置T1的初值来调节计数时间,从而改变T1产生的溢出脉冲的频率(又称T1的溢出率)。

  上一篇:51单片机原理及汇编教程(二)之汇编常用指令数,数据传输指令及寻址方式

  我需要设计一个夜晚蓝牙开关灯设计,采用的蓝牙芯片为JDY-30,刚开始不知道具体型号,后来连接蓝牙之后发现是JDY-30,查手册发现采用的是uart通讯,所以就进行了重新的温习。下面是uart串口通讯的笔记 使用串口通讯需要对相关寄存器进行配置 我这里需要将串口通讯工作在中断方式,那我肯定要用到中断有关的寄存器IE 还需要设置定时/计数器T1,可能有人会有疑问,为何需要用定时器呢,波特率是每秒传输二进制代码的位数,单位是 位/秒 即bps 而定时器是用来确定发送和发送执行每一位的时间的,所以要对TCON与TMOD寄存器进行配置 使用串行通讯的话还需要确定串行通信的工作方式与控制功能,这就需要对SCON与PCON寄存器

  串口通讯uart笔记 /

  单片机根据计时/计数模式的不同,来进行计算 举例:当我们最终选择模式1,16位计时计数器,16位计数器最大十进制数值为65536。来计算定时50ms所定义TH0与TL0的值 首先计算计数值: 计数值=50000us(50ms转换成微秒)*11.0592(晶振大小)/12 计算结果=46080 再计算TH0=(65536-46080)/256 TL0=(65536-46080)%256 //8位逢256进位,整除的结果为高位,取余的结果为低位

  定时时间的计算 /

  一.蜂鸣器 1.蜂鸣器基础 蜂鸣器按驱动方式分为有源蜂鸣器和无源蜂鸣器,有源蜂鸣器内部带振荡器,接入一个低电平便会响;无源蜂鸣器不带振荡器,让它响要接500HZ~4.5KHZ之间的脉冲信号来驱动才会响。很实验采用的是无源蜂鸣器。 2.电路原理图 3.实验说明 本实验通过控制蜂鸣器分别在4KHZ和1KHZ频率下发声,实验接线.程序源代码 /************************************** File Name: 蜂鸣器实验 Author: pengshp Mail: Date: 2015年 7 月 25 日 ***

  学习笔记【七】——蜂鸣器和继电器 /

  入门 - 并行I/O口扩展实例(74LS244/74LS373/4071)

  并行I/O口扩展实例 //《51单片机原理及应用(第二版)——基于Keil C与Proteus》第四章例4.4 I/O口不能完全用于输入/输出操作,当需要扩展外部存储器时,P0、P2口用作地址总线和数据总线,此时能用的I/O口就只有P1和P3口,如果再使用串行通信,I/O口就不够使用了,需要扩展I/O口 两种方式: ① 采用普通锁存器、三态门等芯片来进行简单的扩展(如74LS373或74LS244等) ② 采用可编程的I/O芯片来扩展(如8255或8155等) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

  入门 - 并行I/O口扩展实例(74LS244/74LS373/4071) /

  我用的超声波型号是US-020,四个接口的超声波用法基本相同。 一、概述 US-020超声波模块测距范围:2cm~7m 供电电压5V,静态功耗低于3mA 二、实物图 尺寸:45mm*20mm*1.6mm 三、接口 1.VCC 电源,直流5V 2.Trig 向此管脚输入10us以上高电平,可触发模块测距 3.Echo 测距结束时会输出高电平,电平时长为超声波信号往返时间之和 4.GND 接地 四、测距工作原理 只要在Trig管脚输入10us以上高电平,系统会自动发出8个40KHz的超声波脉冲,然后检验测试回波信号。检测到后通过Echo管脚输出。 计算方式:(Echo高电平时间*340m/s)/2 :利用计数器

  」收发一体超声波测距模块分析+代码 /

  O 引言 目前,市场上有多种基于IC卡设计的电子锁,大范围的应用于宾馆、公寓、仓库、学校等场所。这些场合可提供很好的直流或交流电源,电子锁的控制部分可以长时间方便地获取稳定的电源。但是,在野外环境中往往不能为控制部分方便地提供电源,需要手持部分为控制部分提供电源,执行开锁和闭锁操作,因此传统由控制部分提供电源的电子锁不能够满足野外环境的需要,例如采油井、注水站、电信通讯井等,在这一些地方,尤其是偏远的地方,往往对安全性要求比较高,提供电源又较为困难。 本文介绍了一种电子锁,电子锁系统分为控制和手持两部分。手持部分的电源采用锂电池,控制部分的工作电源由手持部分提供,数据线和电源线共用一根线,有效解决了以上问题,使用起来更便捷。 1 硬件

  的现场无电源电子密码锁设计 /

  制作超声波测距仪,是很多学生、单片机爱好者学习单片机动手实践的一个实作项目,这款超声波测距程序,针对目前较为广泛使的HC-SR04超声波模块而设计的,这款1602显示的超声波测距距源程序,单片机是51系列单片机,超声波测距模块先用的是HC-SRO4 超声波测距模块,单片机的晶振是12M,接线,当距离超出测量时,范围显示“-”,显示单位是CM。这款程序由于硬件最简单,制作时焊接工作量小,几乎是百分之百的成功,也可以用PROTEUS软件直接进行。需要超声波测距仿真配套的爱好者,可百度搜索:电子乐屋,这个网上有很多款超声波测距仿真资料。 #include ={ 012345

  1602显示的超声波测距源程序 /

  单片机型号:STC15W4K32S4 数字编码器EC11作为控制波形、频率、占空比的开关 液晶1602A作为显示信息 单片机源程序如下: Note: 2020-05-06 Update 1. Fix an error in main funciton, cause the EC11 Encoder rotate disorder. 2. Fix an error of interface display during switch frequency. 2020-05-24 Update 1. Fix precision of PWM frequency 2. Fix the

  控制信号发生器源程序(正弦波、方波) /

  ADI世健工业嘉年华——深度体验:ADI伺服电机控制方案

  解锁【W5500-EVB-Pico】,探秘以太网底层,得捷电子Follow me第4期来袭!

  【下载】LAT1317 STM32CubeProgrammer和STM32CubeIDE协同调试的方法

  【下载】LAT1334 基于MCSDK5.4.8电机库修改两电阻采样方法

  【直播】轻松使用STM32MP13x如MCU般在Cortex A 核上裸跑应用程序

  【新品】STM32H5-Arm® Cortex®-M33 内核,主频高达250MHz,提升性能与信息安全性

  【新品】STM32MP13X-支持Linux、RTOS和Bare Metal应用,新一代通用工业级MPU

  【新品】Arm® Cortex®-M33处理器内核,运行频率160 MHz,基于Armv8-M架构并带有TrustZone®

  【Matter】康普和意法半导体强强联手,让物联网设备Matter证书管理既安全又简便

  【方案】STM32WLE5 x 利尔达LoRa模组助力亚残会开幕式惊艳秀

  【新品】意法半导体发布远距离无线微控制器,提高智能计量、智能建筑和工业监控的连接能效

  从51开始,单片机玩了很久了,有51,PIC,AVR等等,早就想跟潮流玩玩ARM,但始终没开始,原因 -----不知道玩了ARM可以做什么( ...

  1简介LVGL(Light and Versatile Embedded Graphics Library)是一个免费开源的嵌入式图形库,界面美观, 内存占用低, 支持C和Pyth ...

  中断是一种机制,通过这一种机制,I O或指令可以暂停处理器的正常执行,并像具有最高优先级一样先执行自己的任务。也就是说,当外部中断发生 ...

  前言rtt 里的 usbhost 驱动有问题这是众所周知的事情了,很多人在论坛上提问,也出现了各种解决方案。这里做个汇总,同时把我最终的解决 ...

  1写在前面该教程前面讲述了许多关于CAN协议的一些概念,可能许多初学者看的云里雾里,那么本文将结合代码让大家理解之前讲述的内容。因为关 ...

  站点相关:综合资讯51单片机PIC单片机AVR单片机ARM单片机嵌入式系统汽车电子消费电子数据处理视频教程电子百科其他技术STM32MSP430单片机资源下载单片机习题与教程