C51 UART 串口通信

发布者:Bby1978最新更新时间:2018-12-19 来源: eefocus关键字:C51  UART  串口通信 手机看文章 扫描二维码
随时随地手机看文章

这里写图片描述

SBUF 寄存器:它是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据,可通过指令对SBUF 的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。从而控制外部两条独立的收发信号线RXD(P3.0)、TXD(P3.1),同时发送、接收数据,实现全双工。 

  串行口控制寄存器SCON(见表1) 。 

表1 SCON寄存器 

表1 SCON寄存器 

  表中各位(从左至右为从高位到低位)含义如下。 

  SM0 和SM1 :串行口工作方式控制位,其定义如表2 所示。 

表2 串行口工作方式控制位 

表2 串行口工作方式控制位 

  其中,fOSC 为单片机的时钟频率;波特率指串行口每秒钟发送(或接收)的位数。 

  SM2 :多机通信控制位。 该仅用于方式2 和方式3 的多机通信。其中发送机SM2 = 1(需要程序控制设置)。接收机的串行口工作于方式2 或3,SM2=1 时,只有当接收到第9 位数据(RB8)为1 时,才把接收到的前8 位数据送入SBUF,且置位RI 发出中断申请引发串行接收中断,否则会将接受到的数据放弃。当SM2=0 时,就不管第位数据是0 还是1,都将数据送入SBUF,并置位RI 发出中断申请。工作于方式0 时,SM2 必须为0。 

  REN :串行接收允许位:REN =0 时,禁止接收;REN =1 时,允许接收。 

  TB8 :在方式2、3 中,TB8 是发送机要发送的第9 位数据。在多机通信中它代表传输的地址或数据,TB8=0 为数据,TB8=1 时为地址。 

  RB8 :在方式2、3 中,RB8 是接收机接收到的第9 位数据,该数据正好来自发送机的TB8,从而识别接收到的数据特征。 

  TI :串行口发送中断请求标志。当CPU 发送完一串行数据后,此时SBUF 寄存器为空,硬件使TI 置1,请求中断。CPU 响应中断后,由软件对TI 清零。 

  RI :串行口接收中断请求标志。当串行口接收完一帧串行数据时,此时SBUF 寄存器为满,硬件使RI 置1,请求中断。CPU 响应中断后,用软件对RI 清零。 

  电源控制寄存器PCON(见表3) 。 

表3 PCON寄存器 

表3 PCON寄存器 

  表中各位(从左至右为从高位到低位)含义如下。 

  SMOD :波特率加倍位。SMOD=1,当串行口工作于方式1、2、3 时,波特率加倍。SMOD=0,波特率不变。 

  GF1、GF0 :通用标志位。 

  PD(PCON.1) :掉电方式位。当PD=1 时,进入掉电方式。 

  IDL(PCON.0) :待机方式位。当IDL=1 时,进入待机方式。 

  另外与串行口相关的寄存器有前面文章叙述的定时器相关寄存器和中断寄存器。定时器寄存器用来设定波特率。中断允许寄存器IE 中的ES 位也用来作为串行I/O 中断允许位。当ES = 1,允许 串行I/O 中断;当ES = 0,禁止串行I/O 中断。中断优先级寄存器IP的PS 位则用作串行I/O 中断优先级控制位。当PS=1,设定为高优先级;当PS =0,设定为低优先级。 

  波特率计算:在了解了串行口相关的寄存器之后,我们可得出其通信波特率的一些结论: 

  ① 方式0 和方式2 的波特率是固定的。 

  在方式0 中, 波特率为时钟频率的1/12, 即fOSC/12,固定不变。 

  在方式2 中,波特率取决于PCON 中的SMOD 值,即波特率为: 

这里写图片描述 

  当SMOD=0 时,波特率为fosc/64 ;当SMOD=1 时,波特率为fosc/32。 

  ② 方式1 和方式3 的波特率可变,由定时器1 的溢出率决定。 

 

这里写图片描述 
这里写图片描述

  从而波特率的计算公式由公式(2)所示: 

这里写图片描述

  在实际应用时,通常是先确定波特率,后根据波特率求T1 定时初值,因此式(2)又可写为: 

这里写图片描述

C51串行口有0、1、2、3四种工作方式。


方式0:8位同步移位寄存器方式 

方式1:10位通用异步通信 

方式2:11位异步通信 

方式3:可变波特率11位异步通信。


方式0:同步移位寄存器方式,波特率固定为fosc/12. 

由RXD(P3.0)引脚输入和输出数据,由TXD(P3.1)引脚输出同步移位时钟。 

发送:当执行一条写SBUF的指令(MOV SBUF ,A)时,就启动串行数据的发送。 

接收:当满足REN=1(允许接受)且接收中断标志RI=0是,就会启动一次接受过程。


方式1:10位通用异步通信 

一帧信息为10位:1位为起始位(0),8位数据位,1位停止位(1) 

TXD(P3.1)是发送端。RXD(p3.2)是接收端。 

采用T1作为串行口接收和发送的波特率发生器,数据传输波特率可调,由T1的溢出决定,可用程序设定。


TI:发送中断标志 

方式0中,在发送第8位末尾置位;其它方式中,在发送停止位开始时设置。TI=1表示发送帧结束。由硬件置位,用 

软件清零。必须清零,因为如果TI始终等于1,则表示发送帧结束,也就不会再发送帧 。(TI=1表示一直处于中断状态,也就无法发送了,所以要清零)


RI:接收中断标志 

方式0中,在接收第8位末尾置位;其他方式中,在接收停止位中间设置,RI=1表示帧接收结束。由硬件置位,用软件清除。(RI=1表示一直处于中断状态,也就无法接受了,所以要清零。)


TI和RI是同一个中断源,两者共用一个中断向量。CPU事先不知道是发送中断TI还是接收中断RI产生的中断请求,所以在全双工通信时,必须由软件来判别。


REN:允许接收位 

REN=0,禁止接收;REN=1,允许接受。软件设置。


TB8:方式2和方式3中要发送的第9位数据。在通信协议中,常规定TB8为奇偶校验位。在8051多机通信中, 

TB8用来表示主机发送的是地址还是数据:TB8=0为数据,TB8=1为地址。用软件来置位/清除。


RB8:方式2和方式3中接受到的第9位数据。 

方式1中接收到的是停止位。方式0中不使用这一位 

波特率选择


在串行通讯中,收发双方的数据传送率(波特率)要有一定的约定。在8051串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器T1的溢出率控制。


方式0 

方式0的波特率固定为主振频率的1/12。


方式2 

方式2的波特率由PCON中的选择位SMOD来决定,可由下式表示:


波特率=2的SMOD次方除以64再乘一个fosc,也就是当SMOD=1时,波特率为1/32fosc,当SMOD=0时,波特率为1/64fosc


方式1和方式3 

定时器T1作为波特率发生器,其公式如下: 

波特率=2^SMOD/32 * 定时器T1溢出率


T1溢出率= T1计数率/产生溢出所需的周期数


式中T1计数率取决于它工作在定时器状态还是计数器状态。当工作于定时器状态时,T1计数率为fosc/12;当工作于计数器状态时,T1计数率为外部输入频率,此频率应小于fosc/24。产生溢出所需周期与定时器T1的工作方式、T1的预置值有关。


定时器T1工作于方式0:溢出所需周期数=8192-x 

定时器T1工作于方式1:溢出所需周期数=65536-x


定时器T1工作于方式2:溢出所需周期数=256-x


因为方式2为自动重装入初值的8位定时器/计数器模式,所以用它来做波特率发生器最恰当。


当时钟频率选用11.0592MHZ时,取易获得标准的波特率,所以很多单片机系统选用这个看起来“怪”的晶振就是这个道理。


下表列出了定时器T1工作于方式2常用波特率及初值。


常用波特率 Fosc(MHZ) SMOD TH1初值 

19200 11.0592 1 FDH 

9600 11.0592 0 FDH 

4800 11.0592 0 FAH 

2400 11.0592 0 F4H 

1200 11.0592 0 E8H


例如9600 11.0592 0 FDH 

波特率=定时器T1溢出率


T1溢出率= T1计数率/产生溢出所需的周期数


产生溢出所需的周期数=256-FD(253)=3 

SMOD=0 11059200/12*3 *1/32=9600


波特率计算


在串行通信中,收发双方对发送或接收的数据速率要有一定的约定,我们通过软件对MCS—51串行口编程可约定四种工作方式。其中,方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率决定。 

串行口的四种工作方式对应着三种波特率。由于输人的移位时钟的来源不同,所以,各种方式的波特率计算公式也不同。


一、方式0的波特率 

方式0时,移位时钟脉冲由56(即第6个状态周期,第12个节拍)给出,即每个机器周期产生一个移位时钟,发送或接收一位数据。所以,波特率为振荡频率的十二分之一,并不受 PCON寄存器中SMOD的影响,即: 

方式0的波特率=fosc/12


关键字:C51  UART  串口通信 引用地址:C51 UART 串口通信

上一篇:C51 特殊功能寄存器SFR的名称和地址
下一篇:C51 引脚功能定义,内部框图

推荐阅读最新更新时间:2024-03-16 16:20

ARM-Linux s3c2440 之UART分析(二)
本文系itspy原创,复制/转载请尽量标明原出处http://blog.csdn.net/yyplc/article/details/7196290,谢谢! 软件篇(linux-2.6.30.4): Linux系统的串口驱动与一般字符设备并一样,它采用层次化的架构,从而看做是一个串行系统来实现。 (1) 关注UART或其他底层串行硬件特征的底层驱动程序。 (2) 和底层驱动程序接口的TTY驱动程序。 (3) 加工用于和TTY驱动程序交换数据的线路规程。 下图描述了串行系统间的层次结构关系(s3c2440串口实现例),可以概括为:用户应用层 -- 线路规划层 -- TTY层 -- 底层驱动层 -- 物理硬件层
[单片机]
ARM-Linux s3c2440 之<font color='red'>UART</font>分析(二)
51单片机的串口通信(一)
随着多微机系统的广泛应用和计算机网络技术的普及,计算机的通信功能愈来愈显得重要。计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。 通信方式 有并行通信和串行通信两种。 并行通信通常是将数据字节的各位用多条数据线同时进行传送 。 图一:并行通信 串行通信是将数据字节分成一位一位的形式在。 图二:串行同行 串行通信的传输方向 单工是指数据传输仅能沿一个方向,不能实现反向传输。 半双工是指数据传输可以沿两个方向,但需要分时进行。 全双工是指数据可以同时进行双向传输。 串行通信常见的错误校验 奇偶校验、循环冗余校验 传输速率(比特率): 比特率是每秒钟传输二进制代码的位数,
[单片机]
51单片机的<font color='red'>串口通信</font>(一)
c51单片机编程要点总结
c51单片机编程要点总结 1、头文件:#include (我用的是 STC 89C54RD+) 2、预定义:sbit LED = P1^0// 定义 P1 口的 0 位为 LED 注:“P1^0”这个写法,与 A51 不同(A51 是 P1.0),P1 是一组端口,端口号范围 0~7 注2:sbit 用于定义 SFR(特殊功能寄存器)的位变量,上例中 LED 作为“全局变量”进行定义 注3:以下写法是错误的: sbit code table = {P1^0, P1^1, P1^2, P1^3};// 想用 table 指定不同的引脚,但这么做会报错 sbit table = {P1^0, P1^1, P1^2, P1^3}
[单片机]
STC单片机11.0592晶振实现115200波特率串口通信
在8051系列单片机如:89S51、89C51 这些单片机上,用11.0592M晶振实现115200波特率通信,几乎是不可能的。 如果换了STC单片机,例如在STC12C5A60S2实现115200的高速通信就相当简单了。 因为,STC12单片机有独立的波特率发生器。 #include STC12C5A60S2.H #include stdio.h void init_uart() { PCON &= 0x7f; //波特率不倍速 SCON = 0x50; //8位数据,可变波特率 BRT = 0xFD; //设定独立波特率发生器重装值 AUXR |= 0x04; //独立波特率发生器时钟为F
[单片机]
【STM32】HAL库 STM32CubeMX教程四---UART串口通信详解
前言: 今天我们学习STM32CubeMX串口的操作,以及HAL库串口的配置,我们会详细的讲解各个模块的使用和具体功能,并且基于HAL库实现Printf函数功能重定向,UART中断接收, 本系列教程将HAL库与STM32CubeMX结合在一起讲解 ,使您可以更快速的学会各个模块的使用 所用工具 : 1、芯片: STM32F407ZET6 2、STM32CubeMx软件 3、IDE: MDK-Keil软件 4、STM32F1xx/STM32F4xxHAL库 5、 串口: 使用USART1 PA9,PA10 知识概括: 通过本篇博客您将学到: STM32CubeMX创建串口例程 HAL库UATR函数库 重定义printf
[单片机]
【STM32】HAL库 STM32CubeMX教程四---<font color='red'>UART</font><font color='red'>串口通信</font>详解
基于S3C44B0X的心电信号处理系统设计
    本文设计了一个具有数字化、信息化特征的心电信号处理系统。该系统以 32 位高速 ARM 处理器为硬件平台,以实时操作系统作为软件平台,对硬件系统的资源进行了调度和分配,达到了对心电信号进行实时处理的效果,并且实现了对心电信号的实时显示、实时存储等功能。     据统计,我国目前有县及县级以上医院1.3万家,医疗机械总数达17.5万台,加上一些专业心脏疾病治疗机构,我国目前每年心脏疾病的门诊量约在一千万人次以上。根据国家卫生部《全国卫生信息化发展规划纲要》的目标,在2010年要基本实现医院的数字化和信息化。所以未来医疗器械市场对新型医疗设备的市场空间巨大,特别是拥有数字化和信息化特征的心电信号处理系统具有广阔的应用前景和
[嵌入式]
第011课 Jz2400串口(UART)的使用
第001节硬件知识_UART硬件介绍 1.串口的硬件介绍 UART的全称是Universal Asynchronous Receiver and Transmitter,即异步发送和接收。 串口在嵌入式中用途非常的广泛,主要的用途有: 打印调试信息; 外接各种模块:GPS、蓝牙; 串口因为结构简单、稳定可靠,广受欢迎。 通过三根线即可,发送、接收、地线。 通过TxD- RxD把ARM开发板要发送的信息发送给PC机。 通过RxD- TxD线把PC机要发送的信息发送给ARM开发板。 最下面的地线统一参考地。 2.串口的参数 波特率:一般选波特率都会有9600,19200,115200等选项。其实意思就是每
[单片机]
第011课 Jz2400串口(<font color='red'>UART</font>)的使用
基于FPGA的UART接口开发方案
  由于FPGA的功能日益强大,开发周期短、可重复编程等优点也越来越明显,可以在FPGA芯片上集成UART功能模块,从而简化电路,缩小PCB面积,提高系统可靠性。此外,FPGA的设计具有很高的灵活性,可以方便地进行升级和移植。    设计背景   通用异步收发器(Universal Asynchronous Receiver/Transmitter,UART)可以和各种标准串行接口,如RS 232和RS 485等进行全双工异步通信,具有传输距离远、成本低、可靠性高等优点。一般UART由专用芯片如8250,16450来实现,但专用芯片引脚都较多,内含许多辅助功能,在实际使用时往往只需要用到UART的基本功能,使用专用芯片会造成资源
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved