如何计算8051单片机的波特率

发布者:skyhcg最新更新时间:2024-01-08 来源: elecfans关键字:单片机  波特率 手机看文章 扫描二维码
随时随地手机看文章

8051单片机使用定时器1工作在方式2的情况下作为串口波特率发生器,其波特率=(2smod/32)×(定时器T1溢出率),其中smod是PCON《7》,表示是否波特率加倍,Fsoc是系统的晶振大小。


波特率公式中:T1溢出率=溢出周期的倒数;溢出周期=(256-TH1)×12/Fosc;


最终公式:

波特率:Baud=(2smod× Fsoc)/(32 ×12×(256-TH1))

我们一般不太关注波特率的计算,而是关心选用的传输速度(波特率)去反算定时器1(自动重装模式)的初值(TH1),所以将上面的公式导一下,得到TH1的公式:

TH1=256-(Fsoc×2smod)/(12×32×Baud)

下面针对串口发送程序,水寒写下例程,供大家参考。(我使用的是STC12C5A40S2调试,原则上在STC89C5x、AT89C5x等8051核心的单片机上都能够成功,由于程序比较简单,我没有试,但应该没有问题的)


#include“Reg52.H”

请提前计算一下所选晶振能达到的最高速度,波特率不能超过最高速度

(1)波特率加倍(SMOD=1):Max_Baud=FOSC/12/16

(2)波特率不加倍(SMOD=0):Max_Baud=FOSC/12/32

例如:22.1184MHz晶振,波特率加倍时,最大波特率=22118400/12/16=115200

#defineFOSC22118400//振荡频率

#defineBAUD9600//波特率

#defineSMOD1//是否波特率加倍

#ifSMOD

#defineTC_VAL(256-FOSC/16/12/BAUD)

#else

#defineTC_VAL(256-FOSC/32/12/BAUD)

#endif

typedefunsignedcharuint8;

typedefunsignedintuint16;

codeconstcharstr1[]=“Therstringistransmittedfrom80C51!rn”;

codeconstcharstr2[]=“Author:xqlu(at)ysu.edu.cnrn”;

/***************函数声明*******************/

voidInitUART(void);

voidSendOneByte(uint8);

voidSendrStr(constuint8*ptr);

/****************主函数********************/

voidmain(void)

{

uint8i=0;

InitUART();

while(str2[i]!=‘’)

{

SendOneByte(str2[i++]);

}

SendrStr(str1);

while(1);

}

/****************中断服务函数***************/

voidUART_ISR(void)interrupt4

{

uint8RX_Data;

//只响应“接收”中断,“发送”中断来了就直接抹掉

if(RI)

{

RI=0;//串口中断标志不能自己清除,需要手动清除

RX_Data=SBUF;

SendOneByte(RX_Data);

}

else

TI=0;//串口发中断是发送完缓冲区数据之后产生

}

/****************串口初始化函数*************/

voidInitUART(void)

{

TMOD=0x20;

SCON=0x50;

TH1=TC_VAL;

TL1=TH1;

PCON=0x80;//发送速率加倍

ES=1;

EA=1;

TR1=1;

}

/**************串口发送字符函数*************/

voidSendOneByte(uint8c)

{

ES=0;//禁止发送中断

SBUF=c;

while(!TI);

TI=0;

ES=1;

}

/**************串口发送字符串函数*************/

voidSendrStr(constuint8*ptr)

{

do

{

SendOneByte(*ptr);

}while(*ptr++!=‘’);

}


关键字:单片机  波特率 引用地址:如何计算8051单片机的波特率

上一篇:如何将ADC连接到8051单片机
下一篇:C8051F310设计的UART扩展实现

推荐阅读最新更新时间:2024-11-13 19:38

零基础入门单片机(2)学会控制IO引脚你就入门啦
【一】单片机引脚介绍 1.电源引脚 ●VSS:接地。 ●VCC:外接5V电源。 2.外接晶振引脚 ●XTAL1:当单片机使用内部振荡电路时,接外部晶体的一端和微调电容。当单片机采用外部时钟信号时,此引脚接地。 ●XTAL2:当单片机使用内部振荡电路时,接外部晶体的一端和微调电容。当单片机采用外部时钟信号时,用来输入时钟脉冲。 3.控制引脚 ●RST/VPD:复位信号输入端,高电平有效。当此引脚保持两个机器周期的高电平时,进行复位操作。该引脚的第二功能是备用电源。 ●ALE/PROG:地址锁存允许信号端。当MCS-51单片机上电后,ALE引脚不断向外输出振荡器频率fosc 1/6的正脉冲信号。此引脚具有第二功能PROG,其作为
[单片机]
MSP430设置串口波特率的方法
给定一个BRCLK时钟源,波特率用来决定需要分频的因子N: N = fBRCLK/Baudrate 分频因子N通常是非整数值,因此至少一个分频器和一个调制阶段用来尽可能的接近N。 如果N等于或大于16,可以设置UCOS16选择oversampling baud Rate模式 注:Round():指四舍五入。 Low-Frequency Baud Rate Mode Setting 在low-frequency mode,整数部分的因子可以由预分频实现: UCBRx = INT(N) 小数部分的因子可以用下列标称公式通过调制器实现: UCBRSx = round( ( N – INT(N) ) × 8 )
[单片机]
55-基于51单片机的温度检测报警系统
具体实现功能 系统由STC89C51单片机+液晶1602显示+DS18B20温度传感器+按键模块+报警模块构成。 具体功能: (1)采用DS18B20温度传感器测温并用LCD1602显示; (2)按键为设置按键、加键和减键。可设置上下限温度报警值; (3)当温度超过设定的上或下限时,相应的指示灯亮,蜂鸣器报警; (4)温度测量范围0到99.9摄氏度,精度为0.1摄氏度。 设计背景 随着现代工农业技术的发展及人们对生活环境要求的提高,人们也迫切需要检测与了解环境温度。特别地,高温情况下极易造成火灾,例如,在机房中,电脑等设备发热快,若在短时间内机房温度升高,超出了设备正常温度,就会导致系统瘫痪或产生火灾。在这
[单片机]
55-基于51<font color='red'>单片机</font>的温度检测报警系统
下载程序到单片机
此笔记主要记录下载目标程序到单片机内的步骤。 1.安装下载软件 一般在买单片机的时候厂家会附加一张光盘,在光盘中富含一些例子,软件和视屏教程。首先,我们在安装编写单片机程序的软件(我使用的Keil uVision4,下篇介绍Keil uVision4的安装步骤和破解方法)之后,需要下载程序到单片机内时就需要安装下载软件。 首先,在光盘找找到如下软件: 双击即可进行安装。选择安装路径,然后到安装盘里打开安装程序STC_ISP_V4.85(第一次打开的时候必须要用以管理员身份运行) 此后双击打开即可。 2.打开STC_ISP_V4.85应用程序 用STC_ISP_V4.85下载*.hex文件到单片机一共分
[单片机]
下载程序到<font color='red'>单片机</font>内
PIC单片机之PWM原理
1,什么是PWM 什么是PWM,专业点说脉宽调制,通俗点说 就是不断的输出高低电平。 比如 单片机 40ms的时间 输出高电平然后60ms的时间 输出低电平接着一直不断周期性的交替输出高低电平 这就是典型的PWM波。高电平输出的时间40ms就是传说中的脉宽,40ms+60ms=100ms 便是PWM的周期。假定我们把周期定为100ms.我们可以根据我们的需要 把高电平的时间加大或者减小,比如 高电平输出时间加大为80ms.那么低电平的时间就变为20ms. 也可以 高电平输出时间减小为20ms.那么低电平的时间就变为80ms.这即是脉宽调制 调的便是这高电平的时间。 而高电平(脉宽)在周期中,所占用的时间比例 就被称为占空比。用
[单片机]
关于51单片机P0口的结构及上拉问题
1.P0作为地址数据总线时,V1和V2是一起工作的,构成推挽结构。高电平时,V1打开,V2截止;低电平时,V1截止,V2打开。这种情况下不用外接上拉电阻。而且,当V1打开,V2截止,输出高电平的时候,因为内部电源直接通过V1输出到P0口线上,因此驱动能力(电流)可以很大,这就是为什么教科书上说可以"驱动8个TTL负载"的原因。 2.P0作为一般端口时,V1就永远的截止,V2根据输出数据0导通和1截止,导通时拉地,当然是输出低电平;截止时,PO口就没有输出了,(注意,这种情况就是所谓的高阻浮空状态),如果加上外部上拉电阻,输出就变成了高电平1。 3.其他端口P1 P2 P3,在内部直接将P1口中的V1换成了上拉电阻,所以
[单片机]
关于51<font color='red'>单片机</font>P0口的结构及上拉问题
5-基于51单片机的仓库三路温度检测调节系统设计
具体实现功能 具体功能: 1、采用三个DS18B20温度传感器测温并用LCD1602显示三个温度值,并显示三路温度平均值; 2、按键为设置按键、加键和减键,可设置上下限温度控制范围; 3、当平均温度值超过设定的上或下限时,相应的指示灯亮,同时相应的继电器吸合,继电器可以驱动负载工作; 4、当平均温度值超过设定的上限时,继电器吸合,风扇转动表示降温; 5、当平均温度值低于设定的下限时,继电器吸合,加热膜工作表示升温。 单片机介绍 51单片是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C51为众多
[单片机]
5-基于51<font color='red'>单片机</font>的仓库三路温度检测调节系统设计
PIC单片机之I2C(从模式)
网上有许多讲解单片机 实现I2C主模式,但是从模式的很少。我现在就来讲讲PIC单片机使用MSSP模块实现I2C从模式。 有关I2C协议的具体介绍可以看 《PIC单片机之I2C(主模式)》,我们这里直接讲解实例 实例讲解:我们模仿 AT24C02 EEPROM 的协议。让一个主模式的单片机,来读取从模式单片机的数据。 下面为AT24C02的随机地址读取的协议。 第一个字节 :输入7位地址和一位的写状态位, 第二个字节:然后写入EEPROM数据地址, 第三个字节:输入7位地址和一位的读状态位, 第四~N个字节:读出的EEPROM的数据。 我们来讲解下程序的基本思路:我们使能了MSSP中断,即是I2C接收中断,当PI
[单片机]
PIC<font color='red'>单片机</font>之I2C(从模式)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习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