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

发布者:大头玩家最新更新时间:2022-05-09 来源: eefocus关键字:51单片机  串口通信  通信技术 手机看文章 扫描二维码
随时随地手机看文章

串口通信原理

计算机串口通信基础

随着多微机系统的广泛应用和计算机网络技术的普及,计算机的通信功能愈来愈显得重要。计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。

通信有并行通信和串行通信两种方式。在多微机系统以及现代测控系统中信息的交换多采用串行通信方式。


计算机通信

计算机通信是将计算机技术和通信技术的相结合,完成计算机与外部设备或计算机与计算机之间的信息交换 。可以分为两大类:并行通信与串行通信。


串行通信

串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送。

串行通信的特点:传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂。


并行通信

并行通信通常是将数据字节的各位用多条数据线同时进行传送 。

在这里插入图片描述

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


串行通信基本概念

异步通信

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

在这里插入图片描述

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

在这里插入图片描述

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


同步通信

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

在这里插入图片描述

外同步 和 自同


串行通信的传输方向

单工是指数据传输仅能沿一个方向,不能实现反向传输。

半双工是指数据传输可以沿两个方向,但需要分时进行。

全双工是指数据可以同时进行双向传输。

在这里插入图片描述

串行通信常见的错误校验

奇偶校验

在发送数据时,数据位尾随的1位为奇偶校验位(1或0)。奇校验时,数据

中“1”的个数与校验位“1”的个数之和应为奇数;偶校验时,数据中“1”的个数

与校验位“1”的个数之和应为偶数。接收字符时,对“1”的个数进行校验,若发

现不一致,则说明传输数据过程中出现了差错。

代码和校验

代码和校验是发送方将所发数据块求和(或各字节异或),产生一个字节

的校验字符(校验和)附加到数据块末尾。接收方接收数据同时对数据块(除

校验字节外)求和(或各字节异或),将所得的结果与发送方的“校验和”进行

比较,相符则无差错,否则即认为传送过程中出现了差错。

循环冗余校验

这种校验是通过某种数学运算实现有效信息与校验位之间的循环校验,常

用于对磁盘信息的传输、存储区的完整性校验等。这种校验方法纠错能力强,

广泛应用于同步通信中。

传输速率

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

10位×240个/秒 = 2400 bps


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

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


80C51的串行口

内部结构

在这里插入图片描述

有两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H ;接收器是双缓冲结构 ;发送缓冲器,因为发送时CPU是主动的,不会产生重叠错误。


控制寄存器

SCON 是一个特殊功能寄存器,用以设定串行口的工作方式、接收/发送控制以及设置状态标志:


在这里插入图片描述

SM0和SM1为工作方式选择位,可选择四种工作方式:

在这里插入图片描述

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,取消此中断申请。


PCON中只有一位SMOD与串行口工作有关

在这里插入图片描述

SMOD(PCON.7) 波特率倍增位。在串行口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。复位时,SMOD=0。


80C51串行口的工作方式

一、方式0

方式0时,串行口为同步移位寄存器的输入输出方式。主要用于扩展并行输入或输出口。数据由RXD(P3.0)引脚输入或输出,同步移位脉冲由TXD(P3.1)引脚输出。发送和接收均为8位数据,低位在先,高位在后。波特率固定为fosc/12。

1、方式0输出:

在这里插入图片描述

2、方式0输入

在这里插入图片描述

二,方式1

方式1是10位数据的异步通信口。TXD为数据发送引脚,RXD为数据接收引脚,传送一帧数据的格式如图所示。其中1位起始位,8位数据位,1位停止位。

在这里插入图片描述

1、方式1输出:

在这里插入图片描述

2、方式1输入:

在这里插入图片描述

用软件置REN为1时,接收器以所选择波特率的16倍速率采样RXD引脚电平,检测到RXD引脚输入电平发生负跳变时,则说明起始位有效,将其移入输入移位寄存器,并开始接收这一帧信息的其余位。接收过程中,数据从输入移位寄存器右边移入,起始位移至输入移位寄存器最左边时,控制电路进行最后一次移位。当RI=0,且SM2=0(或接收到的停止位为1)时,将接收到的9位数据的前8位数据装入接收SBUF,第9位(停止位)进入RB8,并置RI=1,向CPU请求中断。


三,方式2和方式3:

方式2或方式3时为11位数据的异步通信口。TXD为数据发送引脚,RXD为数据接收引脚 。

在这里插入图片描述

方式2和方式3时起始位1位,数据9位(含1位附加的第9位,发送时为SCON中的TB8,接收时为RB8),停止位1位,一帧数据为11位。方式2的波特率固定为晶振频率的1/64或1/32,方式3的波特率由定时器T1的溢出率决定。


方式2和方式3输出

在这里插入图片描述

发送开始时,先把起始位0输出到TXD引脚,然后发送移位寄存器的输出位(D0)到TXD引脚。每一个移位脉冲都使输出移位寄存器的各位右移一位,并由TXD引脚输出。

第一次移位时,停止位“1”移入输出移位寄存器的第9位上 ,以后每次移位,左边都移入0。当停止位移至输出位时,左边其余位全为0,检测电路检测到这一条件时,使控制电路进行最后一次移位,并置TI=1,向CPU请求中断。


方式2和方式3输入

在这里插入图片描述

接收时,数据从右边移入输入移位寄存器,在起始位0移到最左边时,控制电路进行最后一次移位。当RI=0,且SM2=0(或接收到的第9位数据为1)时,接收到的数据装入接收缓冲器SBUF和RB8(接收数据的第9位),置RI=1,向CPU请求中断。如果条件不满足,则数据丢失,且不置位RI,继续搜索RXD引脚的负跳变。


波特率的计算

在串行通信中,收发双方对发送或接收数据的速率要有约定。

通过软件可对单片机串行口编程为四种工作方式,其中方式0和

方式2的波特率是固定的,而方式1和方式3的波特率是可变的,

由定时器T1的溢出率来决定。


串行口的四种工作方式对应三种波特率。由于输入的移位时钟

的来源不同,所以,各种方式的波特率计算公式也不相同。


方式0的波特率 = fosc/12

方式2的波特率 =(2SMOD/64)· fosc

方式1的波特率 =(2SMOD/32)·(T1溢出率)

方式3的波特率 =(2SMOD/32)·(T1溢出率)

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

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

在单片机的应用中,常用的晶振频率为:12MHz和11.0592MHz。所以,选用的波特率也相对固定。常用的串行口波特率以及各参数的关系如表所示。

在这里插入图片描述

如何使用串口通信

串行口工作之前,应对其进行初始化,主要是设置产

生波特率的定时器1、串行口控制和中断控制。具体

步骤如下:


打开中断总开关EA,再打开串行通信中断

确定串行口控制(编程SCON寄存器);

确定T1的工作方式(编程TMOD寄存器);

计算T1的初值,装载TH1、TL1;

启动T1(编程TCON中的TR1位);

串口通信编程

通过串口调试助手,我们发送任意字符,计算机会接收到相应字符


#include


typedef unsigned char u8;

typedef unsigned int u16;


void serinit0()

{

   EA=1;    //打开中断总开关

   ES=1;    //打开串行通信中断开关

   SCON=0x50;  //0101 0000 工作方式01 SM2=0 REN=1 后面都置0

   PCON=0x80;  //1000 0000 波特率倍增

   TMOD=0x20;//使用T1计数器 配置定时计数器的功能 0010 0000

   TH1=0xFa; //通过波特率计算初值  波特率为9600

   TL1=0xFa;

   TR1=1;   //打开定时器开关

}


void main()

   serinit0();//初始化

   while(1);

}


void serinit() interrupt 4

    u8 receivedata;//设置接收数据的变量

receivedata=SBUF; //接收到的数据赋值给receivedata

RI=0;    //将接收中断请求标志置0复位

SBUF=receivedata; //发送接收到的数据

while(!TI);    //直到发送数据成功,中断请求标志置1,循环终止

TI=0;    //将发送中断请求标志置0复位

}

在这里插入图片描述

关键字:51单片机  串口通信  通信技术 引用地址:51单片机学习——8.3--串口通信

上一篇:51学习第二天--二、流水灯设计、蜂鸣器发声
下一篇:单片微机原理P0:80C51结构原理

推荐阅读最新更新时间:2024-11-04 10:55

C51单片机和电脑串口通信电路图与源码
C51单片机和电脑串口通信电路图与源码 51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单
[单片机]
34-基于51单片机的教室智能照明控制设计
具体实现功能 系统由STC89C52单片机+时钟芯片DS1302+液晶屏LCD1602+光敏电阻+红外对管+LED灯模块+按键模块构成。 具体功能: 1、用4个LED灯模拟教室的照明灯,人数小于10人亮一个灯,10-20人亮二个灯,20-30人亮三个灯,大于30人则全亮四个灯; 2、教室使用两个红外对管来检测是否有人进入并进行人数统计,人数可以统计到二位数99人,并实时将人数显示到液晶屏LCD上,液晶屏同时显示实时日期/时间/星期; 3、利用光敏电阻检测教室的光线强弱; 4、系统分自动/手动模式,可以通过按键切换模式,并有LED指示当前所在模式; 5、在自动模式下,可以设定定时时间段,在定时时间段内,当教室
[单片机]
34-基于<font color='red'>51单片机</font>的教室智能照明控制设计
第一课:8051单片机开发的初步认识
啰嗦了那么多,想必对新手来说还不知道单片机长什么样,下图是我们常用的单片机实物图: 图1 单片机实物与管脚图 当然光有一块单片机芯片是不能工作的,所以我们还得给它加上一些外围电路。下面介绍一个单片机的最最小系统,如下图所示: 图2 单片机的最小系统电路 由图2我们可以看出,单片机要想正常工作必须得加上复位电路与晶振电路,下面我们分别介绍这两种电路的作用。 1、复位电路 单片机的第9脚为复位引脚,英文用RESET表示;复位信号从单片机的RESET输入,当单片机刚通电时,必须要在在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。 复位电路常用的有两种形式,如
[单片机]
基于STM32神舟系列开发板的串口通信源码
#include stm32f10x.h #include stm32f10x_usart.h void RCC_Config(void); void GPIO_Config(void); void USART_Config(void); void Put_String(u8 *p); int main() { RCC_Config();//配置时钟 GPIO_Config();//配置输入输出 USART_Config();//配置发送接收 //GPIO.Pin选择待设置的 GPIO 管脚,使用操作符 | 可以一次选中多个管脚。 Put_String( 请发送数据_ ); while(1
[单片机]
串口通信之点阵左移
(*注:图中各595的pin10脚相连接后与+Vcc相连。) 驱动程序可根据本人的16*16点阵程序改编,另外还有一个本人对程序中显示数据生成函数的解释资料一并录于此处,也欢迎切磋。 语句temp=(h1 tempcol)|(h2 (8-tempcol));的设计原理: 下面我们以程序进行左移3位的运算为例解释一下语句temp=(h1 tempcol)|(h2 (8-tempcol));的设计原理;我们知道,在8位二进制数据进行运算时,若要将一个3位的二进制数据置入另一个8位二进制数据后3位的空位中,(注:这里所说的数据置入,是指当一个显示数据显示后,这个数据经左移以后变成了下一个要显示的新数据,而这个新的数据实际上就是由
[单片机]
STM32 串口通信OLED屏幕显示(IIC)心得体会
主机:单片机 从机:oled 当主机向从机写入数据时,从机需要向主机返回应答信号 每写入一个字节,则需等待应答信号:在scl和sda都为高时 当主机向从机中读取数据时,主机需要向从机给应答信号 此时,给应答信号,则表示还需要读取数据;如果给非应答信号,则表示不再读取数据 IIC模式 SDA PA1 //D1 SCL PA2 //D0 DC PA3 //地址选择 0 地址为0x78 1 地址为0x7A RES PA4 //复位引脚 CS PA5 //默认接地 电阻R3换到R1 R8短接 16(8x16)号字体 一个字符纵向占两个字节 横向占一个字节 12(6x8)号字体 一个字符纵向占1个字节 横向占6bit 主
[单片机]
51单片机实现数码管动态显示60~0
硬件电路原理图 元件清单 C语言程序 #include reg51.h unsigned char table ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管字符码 void show(unsigned char n); void delay(unsigned int k); void main() { unsigned char i; int j; while(1) { for(i=60;j=60,i 0;i--) while(j--) show(i); } } void show(unsigned char n) { P0=table ; P1
[单片机]
<font color='red'>51单片机</font>实现数码管动态显示60~0
CH375_CH376 U盘读写模块在51单片机上的应用
电路原理图如下: ch375资料手册: 本程序的接线图: 单片机源程序如下(host.c文件): /* **************************************** ** Copyright (C) W.ch 1999-2004 ** **************************************** ** USB Host File Interface for CH375 ** ** TC2.0@PC, KC7.0@MCS51 ** **************************************** */ /* CH375 主机文件系统接口 */ /* 支
[单片机]
CH375_CH376 U盘读写模块在<font color='red'>51单片机</font>上的应用
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved