51单片机串行口波特率计算
1.工作方式介绍:
方式 0 :这种工作方式比较特殊,与常见的微型计算机的串行口不同,它又叫同步移位寄存器输出方式。在这种方式下,数据从 RXD 端串行输出或输入,同步信号从 TXD 端输出,波特率固定不变,为振荡率的 1/12 。该方式是以 8 位数据为一帧,没有起始位和停止位,先发送或接收最低位。
常用于串行口外接移位寄存器,以扩展并行I/O口,这种方式不适用与两个MCS-51之间的串行通信。
方式1:真正用于数据的串行发送和接收。TXD引脚和RXD引脚分别用于发送和接收数据。
方式1收发1帧数据为10位,1个起始位(0),8个数据位,1个停止位(1),先发送或接收最低位。
方式 2 :串行口工作于方式2和方式3时,被定义为9位异步通信接口。每帧数据均为11位,1位起始位0,8位数据位(先低位),1位可程控为1或0的第九位数据和1位停止位1。采用这种方式可接收或发送 11 位数据,以 11 位为一帧,比方式 1 增加了一个数据位,其余相同。第 9 个数据即 D8 位具有特别的用途,可以通过软件控制它,再加特殊功能寄存器 SCON 中的 SM2 位的配合,可使 MCS-51 单片机串行口适用于多机通信。方式 2 的波特率固定,只有两种选择,为振荡率的 1/64 或 1/32 ,可由 PCON 的最高位选择。
方式 3 :方式 3 与方式 2 完全类似,唯一的区别是方式 3 的波特率是可变的。而帧格式与方式 2- 样为 11 位一帧。所以方式 3 也适合于多机通信。
SM0 SM1 方式 功 能 说 明
0 0 0 同步移位寄存器方式(用于扩展I/O口)
0 1 1 8位异步收发,波特率可变(由定时器控制)
1 0 2 9位异步收发,波特率为fosc/64或fosc/32
1 1 3 9位异步收发,波特率可变(由定时器控制)
2.计算公式总结:
方式0波特率固定为:fosc / 12
方式1波特率的计算公式为:(串行口为波特率可变的8位异步通信接口,SMOD为PCON寄存器的最高位值(0或1))
方式1波特率 =(2^SMOD / 32) * 定时器T1的溢出率
(注:当SMOD=1时,要比SMOD=0时的波特率加倍,所以也称SMOD位为波特率倍增位)
方式2的波特率由下式确定:
方式2波特率=( 2^SMOD / 64) * fosc
方式3的波特率由下式确定:
方式3波特率 = (2^SMOD / 32) * 定时器T1的溢出率
溢出速率 = 1 / 溢出时间
溢出时间(相当于定时时间)= (2^8 – TH1初值)* Tcy
机器周期Tcy = 12时钟周期 = 12*(1/fosc)
故:溢出速率 = 1 / 溢出时间 = 1 / [(256 - TH1初值)* (12 / fosc)] = fosc / [12 *(256-TH1初值)]
计数速率 = 1 / 计数时间 = 1 / (12 / fosc) = fosc / 12
故也可写成:溢出速率 = 计数速率 / (256-TH1初值) = fosc / [12 *(256-TH1初值)]
注:一般来说,定时器方式2用来确定波特率是比较理想的,它不需要中断服务程序设置初值,且算出的波特率比较准确。在用户使用的波特率不是很低的情况下,建议使用定时器T1的方式2来确定波特率。定时器方式1或方式3定时,常用T1作为波特率发生器。
而对于定时器方式0和方式1的最大特点是计数溢出后,计数器为全0。因而在循环定时或循环计数应用时就存在反复装入计数初值的问题。这不仅影响定时精度,而且也给程序设计带来麻烦。方式2就是针对此问题而设置的。定时器/计数器的方式2位自动恢复初值的(初值自动装入)8位定时器/计数器,TLX作为常数缓冲器,当TLX计数器溢出时,在置1溢出标志位TFX的同时,还自动的将THX中的初值送入至TLX,使TLX从处置开始重新计数。这种方式可以省去用户软件中重装处置的程序,简化定时器初值的计算方法,可以相当精确的确定定时时间。
而定时器方式3是为了增加1个附加的8位定时器/计数器而提供的,从而使MCS-51具有3个定时器/计数器。方式3只适用于定时器/计数器T0,定时器/计数器T1不能工作在方式3。T1处于方式3时相当于TR0=0,停止计数(此时T1可以用来做串口波特率发生器。)
51单片机串行口波特率计算相关推荐
- 51单片机串行口的使用与串行通信
51单片机串行口的使用与串行通信 串行通信: 俩个概念: RS232接口标准: 串行口的使用: 串行口的结构: 串行口相关寄存器: 串行口的工作方式: 方式0:同步移位寄存器方式 利用方式0扩展并行I ...
- 51单片机串行口程序c语言编程,单片机C语言编程串行口通讯.ppt
单片机C语言编程串行口通讯 第7章 MCS-51单片机串行口 第7章 MCS-51单片机串行口 目 录 7.1 串行通信基本知识 7.2 串行口结构及控制 7.3 串行口工作方式 7.4 串行口应用举 ...
- 51单片机串行口c语言编程,51单片机串口通信c语言编程
这只是个模板,参考一下 /*----------------------------------------------- 名称:串口通信 网站:www.doflye.net 编写:shifang 日 ...
- 单片机实验汇编案例---单片机串行口与PC机通讯实验
一.实验要求 利用8031单片机串行口,实现与PC机通讯. 本实验实现以下功能,将从实验机键盘上键入的数字,字母显示到PC机显示器上,将PC机键盘输入的字符(0-F)显示到实验机的数码管上. 二.实验 ...
- 单片机 串行口实验解数据流怎么到发光二极管来显示的
[斯鹭]徐良军利用8031单片机串行口,实现与PC机通讯.本实验实现以下功能,将从实验机键盘上键入的数字,字母显示到PC机显示器上,将PC机键盘输入的字符(0-F)显示到实验机的数码管上.二.实验目的 ...
- 串行异步通信_单片机串行口介绍
串行口是单片机与外界进行信息交换的工具,8051单片机的通信方式有两种: 并行通信:数据的各位同时发送或接收. 串行通信:数据一位一位次序发送或接收. 串行通信的方式 异步通信 用一个起始位0表示字符 ...
- C51单片机-串行口2-蓝牙模块-应用例程
一.例程简介 本例程51单片机与蓝牙模块连接,可通过蓝牙模块接收和发送字符串,从而控制测试灯的亮灭.其中使用51单片机的串行口2的工作方式1,即8位UART,波特率可变.波特率设为9600.缺省UAR ...
- (九)单片机串行口 内部结构的讲解 01
1. 基本概念 常用于数据通信的传输方式有单工.半双工.全双工和多工方式. 单工方式:数据仅按一个固定方向传送.因而这种传输方式的用途有限,常用于串行口的打印数据传输与简单系统间的数据采集. 半双工方 ...
- 串行口通信c语言代码,问一下单片机串行口通信用c语言实现的问题
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 这个是上面项目中用的子程序: /************************************************************* ...
- 51单片机串行通讯方式2
要求使用单片机的串口方式2,波特率自定,晶振频率:11.0592MHz,完成双机点对点通信. 功能要求: 1.1号单片机循环发送0-15的数据给2号单片机,同时发送奇偶校验位,然后接收2号单片机返回的 ...
最新文章
- [deviceone开发]-组件功能演示示例
- AI 医生正式上岗了?AI 医疗结合迎爆发点!
- 从0开始的Python学习001快速上手手册
- MySQL优化学习总结
- 事理图谱概念辨析及其与风险标签分类结合的应用探讨
- ai可以滚轮缩放吗_AI侵入艺术天堂!艺术也可以“量产”了吗?
- linux设置gmt时区,关于GMT UTC CST和Linux时区设置
- 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_2_函数式接口的使用...
- 嵌入式学习二:怎么学习Linux操作系统
- 从零开始学习OpenWrt完美教程
- 打开OpenProj 出现Your Java Vendor is Oracle Corporation. To run OpenProj, you need the Sun Java......
- CefSharp 中过滤图片 RequestHandler
- matlab仿真界面设计,基于MATLAB图形用户界面GUI的电路仿真实验的制作
- OMNeT 例程 Tictoc13 学习笔记
- UMail轻松搭建linux邮件服务器(一体盘安装)
- 【百问网】物联网项目学习总结
- LeetCode - 441 - 排列硬币(arranging-coins)
- Kubernetes入门一:介绍及环境准备
- blender bpy
- LPC1768 IAR环境下使用完整64K内存的方法