SCON串行使用波特率计算和设置
1. 工作模式
SCON 串行口控制寄存器 通常在芯片或设备中为了监视或控制接口状态,都会引用到接口控制寄存器。SCON就是51芯片的串行口控制寄存器。它的寻址地址是98H,是一个可以位寻址的寄存器,作用就是监视和控制51芯片串行口的工作状态。51芯片的串口可以工作在几个不同的工作模式下。具体定义如下: SM0 SM1 SM2 REN TB8 RB8 TI RI SM0、SM1为串行口工作模式设置位,这样两位可以对应进行四种模式的设置。看表8-2串行口工作模式设置。 SM0 SM1 模 式 功 能 波特率 0 0 0 同步移位寄存器 fosc/12 0 1 1 8位UART 可变 1 0 2 9位UART fosc/32或fosc/64 1 1 3 9位UART 可变 在这里只说明最常用的模式1,其它的模式也就一一略过,有兴趣的朋友可以找相关的硬件资料查看。 表中的fosc代表振荡器的频率,也就是晶振的频率。UART为(Universal Asynchronous Receiver)的英文缩写。
2. 定义详解
SM2:模式2、模式3中为多处理机通信使能位。在模式0中要求该位为0。 REM:允许串口接收位,置1允许接收,置0禁止接收。REM由软件置位或清零。如果在一个电路中接收和发送引脚P3.0,P3.1都和上位机相连,在软件上有串口中断处理程序,当要求在处理某个子程序时不允许串口被上位机来的控制字符产生中断,那么可以在这个子程序的开始处加入REM=0来禁止接收,在子程序结束处加入REM=1再次打开串口接收。
TB8:发送数据位8,在模式2和3是要发送的第9位。该位可用软件根据需要置位或清除,通常这位在通信协议中做奇偶位,
在多处理机通信中这一位则用于表示是地址帧还是数据帧。 RB8:接收数据位8,在模式2和3是已接收数据的第9位。该位可以是奇偶效验位,地址/数据标识位。在模式0中,
RB8为保留位没有被使用。在模式1中,当SM2=0,RB8是已接收数据的停止位。 TI: 发送中断标识位。在模式0,发送完第8位数据时,由硬件置位。其它模式中则是在发送停止位之初,由硬件置位。TI置位0,申请中断,CPU响应中断后在软件置位0发送一帧数据。任何模式TI必须软件置0,也就是说在数据写入到SBUF后,
硬件发送数据,中断响应(如中断打开),这时TI=1,表明发送已完成,TI不会由硬件清除,所以这时必须用软件对其清零。 RI: 接收中断标识位。在模式0,接收第8位结束时,由硬件置位。其它模式中则是在接收停止位的半中间,由硬件置位。RI=1,申请中断,要求CPU取走数据。但在模式1中,SM2=1时,当未收到有效的停止位,则不会对RI置位。同样RI
也必须要靠软件清除。常用的串口模式1是传输10个位的,1位起始位为0,8位数据位,低位在先,1位停止位为1。它
的波特率是可变的,其速率是取决于定时器1或定时器2的定时值(溢出速率)。AT89C51和AT89C2051等51系列芯
片只有两个定时器,定时器0和定时器1,而定时器2是89C52系列芯片才有的。
3. 波特率设定 波特率在使用串口做通讯时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯。
波特率:是指串行端口每秒内可以传输的波特位数。
有一些初学的朋友认为波特率是指每秒传输的字节数,如标准9600会被误认为每秒种可以传送9600个字节,而实际上它是
指每秒可以传送9600个二进位,而一个字节要8个二进位,如用串口模式1来传输那么加上起始位和停止位,每个数据字节就
要占用10个二进位,9600波特率用模式1传输时,每秒传输的字节数是:
9600÷10=960字节。
51芯片的串口工作模式:
模式0:波特率是固定的,为fosc/12,以一个12M的晶振来计算,那么它的波特率可以达到1M。
模式2:波特率是固定在fosc/64或fosc/32,具体用那一种就取决于PCON寄存器中的SMOD位,如SMOD为0,波特率为focs/64,SMOD为1,波特率为focs/32。
模式1:
模式3:波特率是可变的,取决于定时器1或2(52芯片)的溢出速率。那么我们怎么去计算这两个模式的波特率设置
时相关的寄存器的值呢?可以用以下的公式去计算:波特率=(2SMOD÷32)×定时器1溢出速率 上式中如设置了PCON寄存器中的SMOD位为1时就可以把波特率提升2倍。通常会使用定时器1工作在定时器工作模式2下,这时定时值中的TL1做为计数,TH1做为自动重装值 ,这个定时模式下,定时器溢出后,TH1的值会自动装载到TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。
在这个定时模式2下定时器1溢出速率的计算公式如下: 溢出速率=(计数速率)/(256-TH1) 上式中的“计数速率”与所使用的晶体振荡器频率有关,在51芯片中定时器启动后会在每一个机器周期使定时寄存器TH的值增加一,一个机器周期等于十二个振荡周期,所以可以得知51芯片的计数速率为晶体振荡器频率的1/12,一个12M的晶振用在51芯片上,那么51的计数速率就为1M。通常用11.0592M晶体是为了得到标准的无误差的波特率,那么为何呢?计算一下就知道了。如要得到9600的波特率,晶振为11.0592M和12M,定时器1为模式2,SMOD设为1,分别看看那所要求的TH1为何值。代入公式: 11.0592M 9600=(2÷32)×((11.0592M/12)/(256-TH1)) TH1=250 //看看是不是和上面实例中的使用的数值一样? 12M 9600=(2÷32)×((12M/12)/(256-TH1)) TH1≈249.49 上面的计算可以看出使用12M晶体的时候计算出来的TH1不为整数,而TH1的值只能取整数,这样它就会有一定的误差存在不能产生精确的9600波特率。当然一定的误差是可以在使用中被接受的,就算使用11.0592M的晶体振荡器也会因晶体本身所存在的误差使波特率产生误差,但晶体本身的误差对波特率的影响是十分之小的,可以忽略不计
SCON串行使用波特率计算和设置相关推荐
- CAN总线波特率计算及设置方法(STM32,SJA1000,LPC2292)
SJA1000 内部频率基准源F_BASE = Fclk/2,即外部晶振频率Fclk的2分频.注意任何应用中,当利用外部晶振作为基准源的时候,都是先经过2分频整形的. 1.1 位周期的组成 波特 ...
- S5PV210串口波特率计算和设置
波特率的计算和设置 (1)第一步,用PCLK_PSYS和目标波特率去计算DIV_VAL: DIV_VAL = (PCLK / (bps x 16))-1 (2)第二步,UBRDIV0寄存器中写入DIV ...
- 51单片机波特率计算工具介绍
51 芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用SCON寄存器. SM0.SM1 为串行口工作模式设置位,这样两位可以对应进行四种模式的设置.串行口工作模式设置: 51芯片的串 ...
- 51单片机串口通信,及波特率计算
文章目录 串口基本认识 RS-232-C.RS-422与RS-485 关于串口的电平 串口通信 SCON SBUF:串行数据缓冲器 PCON IE 波特率计算 什么是波特率 实例计算 常用波特率及初值 ...
- stm32CAN波特率计算小程序(QT源码)
软件:Qt Creator 开发环境:Window7 用qt做得一个计算波特率的小程序,在实际的应用中我们设置波特率的时候是通过以下参数来定的: CAN_InitStructure.CAN_SJW=C ...
- can总线隔离中继器、canbridge、CanRepeater的can波特率和滤波设置
can总线隔离中继器.canbridge.CanRepeater的can波特率和验收滤波设置.波特率支持2.5kbps~1Mbps之间任意设置,验收滤波设置支持20个组合的列表或屏蔽模式的ID过滤. ...
- 使用STM32Cube MX为STM32 CAN总线快速配置上手教程_HAL库_CAN协议_STM32_附波特率计算工具
使用STM32Cube MX为STM32 CAN总线快速上手教程_HAL库_CAN协议_STM32 前言 博主也是刚接触CAN协议的新手,如有不对的地方欢迎交流 本文旨在使用STM32Cube MX快 ...
- can总线隔离中继器、canbridge-100、CanRepeater的can波特率和滤波设置
can总线隔离中继器.canbridge.CanRepeater的can波特率和验收滤波设置.波特率支持2.5kbps~1Mbps之间任意设置,验收滤波设置支持20个组合的列表或屏蔽模式的ID过滤. ...
- LPC24xx系列CAN波特率计算
LPC24xx系列CAN波特率计算 CAN总线时序寄存器CANBTR: SAM 0:125K及以上波特率 1:100K及以下 ...
最新文章
- C++递归与非递归实现全排列
- 转帖:RIA(Rich Internet Application,富互联网应用系统)
- 一位7亿收入产品经理的五大绝招
- 链表操作---面向过程--到---面型对象---到模板类
- AAAI-2020 || 52篇深度强化学习accept论文汇总
- code删除前两个_听说用python来批量删除说说也挺快乐的呢~
- java语言中的 继承_Java语言有关继承的总结
- hadoop join之map side join
- python 生成pdf页面大小_(Python)更改使用xtopd生成的PDF文件的页面大小和格式
- opencv摄像头速度慢_c++ - 从OpenCV 3切换到OpenCV 4会导致网络摄像头以最高5帧的速度记录,而不是通常的30帧。 - SO中文参考 - www.soinside.com...
- Eclipse下Maven工程多模块继承和聚合的创建
- SAP License:再论分摊与分配(含实例)
- Spring MVC 基于Method的映射规则(注解版)
- 自定义Excel中的快捷键(Alt +1)
- 协议栈处理中的conntrack HASH查找/Bloom过滤/CACHE查找/大包与小包/分层处理风格
- docker中运行mysql5.7,使用navicat链接报错10061/10060
- 360,手机助手的功能,既然有如此二面性?
- vue 页面保存为本地图片
- 开发游戏十年,遭遇游戏开发史上最诡异事件,然而被我成功解决了!
- VMware15Pro进入MacOS10.14恢复模式(Recovery)
热门文章
- gpt分区 linux 4k对齐,磁盘对齐与4K对齐
- 添加打印机出现错误代码:0x000006d9
- 北京BGP机房的发展历程
- geotools应用-JTS生产四叉树索引和R树索引
- 指数的计算方法介绍!
- 基于SSM人才网站招聘网站求职网站就业系统兼职网站职位发布简历上传专业推荐匹配算法(idea-javaweb-javaee-j2ee-springboot)
- 高压下调节情绪抗压方案
- IDEA插件之输入法自动切换【Smart Input Source】
- SEO优化要以“大局为重”
- 伯克利分校研究生计算机排名及申请,加州大学伯克利分校排名及研究生申请条件...