51单片机常用波特率初值表(12M晶振)
51单片机串口通信波特率设置

51单片机串口通信波特率设置51单片机串口通信波特率设置MCS-51单片机具有一个全双工的串行通信接口,能同时进行发送和接收。
它可以作为UART(通用异步接收和发送器)使用,也可以作为同步的移位寄存器使用。
1. 数据缓冲寄存器SBUFSBUF是可以直接寻址的专用寄存器。
物理上,它对应着两个寄存器,即一个发送寄存器一个接收寄存器,CPU写SBUF就是修改发送寄存器;读SBUF就是读接收寄存器。
接收器是双缓冲的,以避免在接收下一帧数据之前,CPU未能及时的响应接收器的中断,没有把上一帧的数据读走而产生两帧数据重叠的问题。
对于发送器,为了保持最大的传输速率,一般不需要双缓冲,因为发送时CPU是主动的,不会产生重叠问题。
2. 状态控制寄存器SCONSCON是一个逐位定义的8位寄存器,用于控制串行通信的方式选择、接收和发送,指示串口的状态,SCON即可以字节寻址也可以位寻址,字节地址98H,地址位为98H~9FH。
它的各个位定义如下:MSB LSBSM0和SM1是串口的工作方式选择位,2个选择位对应4种工作方式,如下表,其中Fosc是振荡器的频率。
SM2在工作方式2和3中是多机通信的使能位。
在工作方式0中,SM2必须为0。
在工作方式1中,若SM2=1且没有接收到有效的停止位,则接收中断标志位RI不会被激活。
在工作方式2和3中若SM2=1且接收到的第9位数据(RB8)为0,则接收中断标志RB8不会被激活,若接收到的第9位数据(RB8)为1,则RI置位。
此功能可用于多处理机通信。
REN为允许串行接收位,由软件置位或清除。
置位时允许串行接收,清除时禁止串行接收。
TB8是工作方式2和3要发送的第9位数据。
在许多通信协议中该位是奇偶位,可以按需要由软件置位或清除。
在多处理机通信中,该位用于表示是地址帧还是数据帧。
RB8是工作方式2和3中接收到的第9位数据(例如是奇偶位或者地址/数据标识位),在工作方式1中若SM2=0,则RB8是已接收的停止位。
51单片机定时器初值的计算

51单片机定时器初值的计算一。
10MS定时器初值的计算:1.晶振12M12MHz除12为1MHz,也就是说一秒=1000000次机器周期。
10ms=10000次机器周期。
65536-10000=55536(d8f0)TH0=0xd8,TL0=0xf02.晶振11.0592M11.0592MHz除12为921600Hz,就是一秒921600次机器周期,10ms=9216次机器周期。
65536-9216=56320(dc00)TH0=0xdc,TL0=0x00二。
50MS定时器初值的计算:1.晶振12M12MHz除12为1MHz,也就是说一秒=1000000次机器周期。
50ms=50000次机器周期。
65536-50000=15536(3cb0)TH0=0x3c,TL0=0xb02.晶振11.0592M11.0592MHz除12为921600Hz,就是一秒921600次机器周期,50ms=46080次机器周期。
65536-46080=19456(4c00)TH0=0x4c,TL0=0x00三。
使用说明以12M晶振为例:每秒钟可以执行1000000次机器周期个机器周期。
而T 每次溢出最多65536 个机器周期。
我们尽量应该让溢出中断的次数最少(如50ms),这样对主程序的干扰也就最小。
开发的时候可能会根据需要更换不同频率的晶振(比如c51单片机,用11.0592M的晶振,很适合产生串口时钟,而12M晶振很方便计算定时器的时间),使用插接式比较方便。
51单片机12M和11.0592M晶振定时器初值计算2011-01-04 22:25at89s52,晶振频率12m其程序如下:引用代码:#include<stdio.h>#include<reg51.h>void timer0_init(){TMOD=0x01;//方式1TL0=0xb0;TH0=0x3c;TR0=1;ET0=1;}void timer0_ISR(void) interrupt 1{TL0=0xb0;TH0=0x3c;//50ms中断一次single++;if(single==20){kk++;single=0;}}void main(){int kk=0;//计数器int single=0;timer0_init();}TL0=0xb0;TH0=0x3c;这两个是怎么算出来得如果晶振不是12Mhz是11.0592 MHz怎么算12M的晶振每秒可产生1M个机器周期,50ms就需要50000个机器周期,定时器在方式1工作,是16位计数器,最大值为65536,所以需设置初值15536,即3CB0H(10进制15536转换成16进制数3CB0),所以TH0=0x3c,TL0=0xb0。
8051的串口波特率的计算(笔记版)

8051的串口波特率的计算1、方式0的波特率,固定为晶振频率的十二分之一。
2、方式2的波特率,取决于PCON寄存器的SMOD位。
PCON是一个特殊的寄存器,吹了最高位SMOD位,其他位都是虚设的。
计算方法如下:SMOD=0,波特率为晶振的1/64;SMOD=1,波特率为晶振的1/32.3、方式1与方式3的波特率都是由定时器的溢出率决定的。
公式为:BR=(2SOMD/32)*(定时器TI的溢出率)通常情况下,我们使用定时器的方式2,即比率发生器,自动重载计数常数。
溢出的周期为:T=(256-X)*12/fosc溢出率为溢出周期的倒数,即T1=1/T所以:式中:SMOD是所选的方式,fosc是晶振频率。
X是初始值。
51单片机模拟串口波特率计算方法1.计算波特率位间隔时间(即定时时间,其实就是波特率的倒数)位间隔时间(us)=10(6)(us)/波特率(bps)2.计算机单片机指令周期:指令周期(us)=12/晶振频率(Mhz)补充问题:做串口通信时,为什么要把晶振频率设为11.0592,为什么要把波特率设为9600?先说波特率。
波特率从300到115200都可以,甚至更高或更低。
一般规范的波特率都是3的倍数,比如9600、19200、38400;但是并不是一定的,波特率也可以是10000或者10001、10002,只要你的设备能产生符合这个要求的频率,尤其是自己用时,波特率都是很随意的,没有限制。
只是多数时候为了和电脑配合,波特率才规范为固定的几个值,且为了传输稳定,用9600。
用11.0592晶振的原因是51单片机的定时器导致的。
通常用11.0592M晶振是为了得到标准的无误差的波特率。
举例说来,如我们要得到的9600的波特率,晶振为11.0592M和12M,定制器1为2SMOD设为1,分别看看那所求的TH1为何值。
代入公式:11.0592M9600=(2/32)*((11.0592M/12)(256-TH1))TH 1=25012M9600=(2/32)*((12M/12)(256-TH1))TH1=249.49。
51单片机串口通信

一、串口通信原理串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到计算机端,而且也能实现计算机对单片机的控制。
由于其所需电缆线少,接线简单,所以在较远距离传输中,得到了广泛的运用。
串口通信的工作原理请同学们参看教科书。
以下对串口通信中一些需要同学们注意的地方作一点说明:1、波特率选择波特率(Boud Rate)就是在串口通信中每秒能够发送的位数(bits/second)。
MSC-51串行端口在四种工作模式下有不同的波特率计算方法。
其中,模式0和模式2波特率计算很简单,请同学们参看教科书;模式1和模式3的波特率选择相同,故在此仅以工作模式1为例来说明串口通信波特率的选择。
在串行端口工作于模式1,其波特率将由计时/计数器1来产生,通常设置定时器工作于模式2(自动再加模式)。
在此模式下波特率计算公式为:波特率=(1+SMOD)*晶振频率/(384*(256-TH1))其中,SMOD——寄存器PCON的第7位,称为波特率倍增位;TH1——定时器的重载值。
在选择波特率的时候需要考虑两点:首先,系统需要的通信速率。
这要根据系统的运作特点,确定通信的频率范围。
然后考虑通信时钟误差。
使用同一晶振频率在选择不同的通信速率时通信时钟误差会有很大差别。
为了通信的稳定,我们应该尽量选择时钟误差最小的频率进行通信。
下面举例说明波特率选择过程:假设系统要求的通信频率在20000bit/s以下,晶振频率为12MHz,设置SMOD=1(即波特率倍增)。
则TH1=256-62500/波特率根据波特率取值表,我们知道可以选取的波特率有:1200,2400,4800,9600,19200。
列计数器重载值,通信误差如下表:因此,在通信中,最好选用波特率为1200,2400,4800中的一个。
2、通信协议的使用通信协议是通信设备在通信前的约定。
单片机、计算机有了协议这种约定,通信双方才能明白对方的意图,以进行下一步动作。
假定我们需要在PC机与单片机之间进行通信,在双方程式设计过程中,有如下约定:0xA1:单片机读取P0端口数据,并将读取数据返回PC机;0xA2:单片机从PC机接收一段控制数据;0xA3:单片机操作成功信息。
C51单片机无源蜂鸣器音阶频率对照表

C51单片机无源蜂鸣器音阶频率对照表1、本对照表适用于C51系列单片机,实现音码频率和C51定时器设置对应;2、本对照表频率设置适用于无源蜂鸣器;3、本对照表实现99个音码频率对照,跨8个八度;4、若需要word版和带公式的excel版,请联系我们索取。
此外使用过程中有任何疑问,可发送邮件共同探讨!邮箱:****************2018年6月22日星期五By:zhihua音阶频率表(单位赫兹hz)1 2 3 4 5 6 7 8 9A 27.5 55 110 220 440 880 1760 3520 7040#A 29.135 58.27 116.541 233.082 466.164 932.328 1864.655 3729.31 7458.62B 30.868 61.735 123.471 246.942 493.883 987.767 1975.533 3951.066 7902.132C 32.703 65.406 130.813 261.626 523.251 1046.502 2093.004 4186.009#C 34.648 69.296 138.591 277.183 554.365 1108.731 2217.461 4434.922D 36.708 73.416 146.832 293.665 587.33 1174.659 2349.318 4698.636#D 38.891 77.782 155.563 311.127 622.254 1244.598 2489.016 4978.032E 41.203 82.407 164.814 329.629 659.255 1318.52 2637.02 5274.04F 43.654 87.307 174.614 349.228 698.456 1396.913 2793.826 5587.652#F 46.249 92.499 184.997 369.994 739.989 1479.978 2959.955 5919.91G 48.999 97.999 195.998 391.995 783.991 1567.982 3135.437 6270.874#G 51.913 103.826 207.652 415.305 830.609 1661.219 3322.437 6644.874注:绿色部分为钢琴88键常用音阶。
·单片机晶振为12mhs延时1ms计算依据

一、单片机晶振的作用与原理单片机晶振是单片机系统中的一个重要部件,它通过振荡产生稳定的时钟信号,为单片机的运行提供基准。
在单片机系统中,晶振的频率对系统的稳定性、精度和速度有着重要的影响。
二、晶振频率为12MHz的延时计算在单片机系统中,为了实现延时操作,一般需要通过编程来控制计时器或者循环延时的方式来实现。
对于晶振频率为12MHz的单片机系统,延时1ms的计算依据如下:1. 首先需要计算出12MHz晶振的周期,即一个晶振振荡周期的时间。
12MHz晶振的周期为1/12MHz=0.0833us。
2. 接下来将1ms转换成晶振周期数。
1ms=1000us,将1000us除以0.0833us得到12000。
即延时1ms需要进行12000个晶振周期的振荡。
3. 最后根据单片机的指令周期和频率来确定代码延时的实现方法。
以常见的晶振频率为12MHz的单片机为例,根据单片机的指令周期(一般为1/12MHz=0.0833us)和延时周期数(12000),可以编写相应的延时函数或者循环来实现1ms的延时操作。
三、12MHz晶振延时1ms的应用场景在实际的单片机应用中,常常需要进行一定时间的延时操作,例如驱动液晶屏显示、控制外围设备响应等。
12MHz晶振延时1ms的应用场景包括但不限于:LED闪烁控制、按键消抖、舵机控制、多任务调度等。
四、晶振频率选择与延时精度的关系晶振频率的选择对延时精度有着直接的影响。
一般来说,晶振频率越高,对延时精度要求越高的应用场景,而对于一般的延时控制,12MHz的晶振已经能够满足大多数的要求。
延时的精度还受到单片机的指令执行速度的影响,需要在实际应用中进行综合考量与测试。
五、总结在单片机系统中,晶振的频率选择与延时操作密切相关,12MHz晶振延时1ms的计算依据可以帮助工程师们更好地进行单片机程序的设计与开发。
需要根据实际应用场景和需求来选择合适的晶振频率,并对延时精度进行充分的考量和测试,以确保单片机系统的稳定可靠性。
《单片机应用技术》填空题题库x

《单片机应用技术》填空题题库x《单片机应用技术》习题库答案一、填空题第一、二章1.计算机中最常用的字符信息编码是(ASCII码)。
2.MCS-51系列单片机为( 8 )位单片机。
3.计算机三总线分别为:(数据)总线;(地址)总线;(控制)总线。
4.单片机与普通计算机的不同之处在于其将CPU 、存储器和I/O 三部分集成于一块芯片上。
5.能在紫外线照射下擦除和重写的存储器是(EPROM )型存储器,能够直接在线路中快速写入和读出的存储器是(EEPROM)型存储器。
6.8031、8051的主要区别是8051有 4 k内部ROM。
7.MCS-51单片机片内共有128 字节单元的RAM。
8.8031内部有RAM( 128 )字节、8751内部有ROM( 4K )。
9.MCS-51系列单片机8031、8051、89S52在内部存储器的设置上主要区别是:8031内部(无)程序存储器,8051内部( 4K )程序存储器,89C52内部( 8K )程序存储器。
10.8031构成的单片机应用系统必须扩展程序存储器。
11.M CS-51单片机片内RAM区中有128 个可寻址位。
12.8051单片机片内RAM区80H-0FFH属于特殊功能寄存器(SFR)区。
13.M CS-51单片机存储器结构的主要特点是程序存储器与数据存储器的寻址空间是分开的。
14.M CS-51单片机的存储器配置在物理结构上有4 个存储空间。
15.M CS-51单片机的存储器在逻辑上分为 3 个存储器地址空间16.当MCS-51单片机的EA引脚保持低电平时,CPU只访问片外的程序存贮器17.当EA接地时,MCS-51单片机将从外部程序存储器的地址0000H开始执行程序。
18.在只使用外部程序存储器时,51系列单片机的EA 管脚必须接地。
第1页共9页19.在只使用内部程序存储器时,51系列单片机的EA 管脚必须接高电平。
20.当使用8031单片机时,需要扩展外部程序存储器,此时/EA 应接低电平。
为什么51系列单片机常用11.0592MHz的晶振设计

为什么51系列单片机常用11.0592MHz的晶振设计?现在有许多极好的编译程序能显示代码,在速度和尺寸两方面都是非凡有效的。
现代的编绎器非常适应寄存器和变量的使用方面,比手动编译有较好的优越性,甚至在其它常规方面,所以C应是看代码方面最合适的。
答1:因为它能够准确地划分成时钟频率,与UART(通用异步接收器/发送器)量常见的波特率相关。
特别是较高的波特率(19600,19200),不管多么古怪的值,这些晶振都是准确,常被使用的。
答2:当定时器1被用作波特率发生器时,波特率工作于方式1和方式3是由定时器1的溢出率和SMOD 的值(PCON.7------双倍速波特率)决定:方式1、3波特率= (定时器1的溢出率)特殊时,定时器被设在自动重袋模式(模式2,TMOD的高四位为0100B),其为:方式1、 3波特率=11.0592MHZ晶振的一些典型波特率如下:更换一种计算方式,它将以修改公式达到我们需求的波特率来计算出晶振。
最小晶振频率=波特率x 384 x 2 SMOD这就是我们所需波特率的最小晶振频率,此频率能成倍增加达到我们需求的时钟频率。
例如:波特率为19.2KH2的最小晶振频率:3.6864=19200x384x2(波特率为19.2K的SMOD为1 )11.0592=3.6864x3其中TH1是由倍乘数(3)确定TH1=256-3=253=0FDH用来确定定时器的重装值,公式也可改为倍乘数的因子:晶振频率=波特率x(256-TH1)x384x2 SMOD这是波特率为19.24K的晶振频率。
以上的例子可知,被乘数(3)是用来确定TH1:TH1=256-3=253=0FDH19.2K波特率的晶振为11.0592=19200x(256-0FDH)x384x2(19.2 k的SMOD为1)其它值也会得出好的结果,但是11.0592MHZ是较高的晶振频率,也允许高波特率。
51单片机 波特率 32分频原因

51单片机波特率 32分频原因
在51单片机中,波特率(Baud Rate)是指串口通信中的数据传输速率,即每秒传输的比特数。
而32分频则是51单片机中用于设置波特率的一种分频方式。
在51单片机中,系统时钟频率通常为12MHz。
当需要设置特定的波特率时,需要根据系统时钟频率和分频系数来计算并设置相应的分频值。
为了得到32分频的原因,我们将以12MHz的系统时钟频率作为例子进行说明:
1.波特率计算:
•设定的波特率为9600,即每秒传输9600个比特。
•传输一个比特所需的时间为 1 / 9600 秒。
2.分频计算:
•通过将系统时钟频率除以需要的波特率,可以得到每个比特所需的时钟周期数。
•以12MHz系统时钟和9600波特率为例,每个比特所需的时钟周期数为 12,000,000 / 9,600 = 1250。
3.分频设置:
•51单片机中的串口通信模块使用定时器1来提供时钟源。
•分频系数决定了定时器的工作频率和计数周期。
•32分频即将每个比特所需的时钟周期数除以32,得到每个比特所需的计数周期数,即 1250 / 32 = 39.0625。
因此,设置32分频对应的计数值为39,以满足时钟源的分频要求,并实现所需的波特率。
需要注意的是,上述例子中的数字仅供示范目的,实际设置波特率时可能会有不同的计算值和分频设置选项,具体取决于系统时钟频率、波特率需求和单片机型号等因素。
51单片机为何独爱11.0592MHz晶振?

51单片机为何独爱11.0592MHz晶振?为什么在设计51单片机硬件时都会选用11.0592MHz作为时钟源?了解这个问题之前首先需要知道什么是晶振。
1晶振,顾名思义晶体振荡器的意思。
它起到的作用是为单片机系统提供基准时钟信号,类似于我们人的心跳。
单片机内部所有的工作都是以这个时钟信号为步调基准来进行工作的。
之前的文章“第一次认识压电换能器”中简单描述了晶体的压电效应。
那么这里还有一个概念,一般情况下,无论是机械振动的振幅,还是交变电场的振幅都非常小。
但是,当交变电场的频率为某一特定值时,振幅骤然增大,产生共振,称之为压电振荡。
这一特定频率就是石英晶体的固有频率,也称为谐振频率。
STC89C52单片机的18脚和19脚是晶振引脚,一般我们会接一个11.0592MHz的晶振(它每秒钟振荡11,059,200次),外加两个20pF的电容,电容的作用是辅助晶振起振,并维持振荡信号的稳定。
51单片时钟源硬件连接原理图2计算机访问一次存储器的时间,称之为一个机器周期,这是一个时间基准。
一个机器周期包括12个时钟周期。
我们算一下一个机器周期是多长时间。
设一个单片机工作于11.0592M晶振,它的时钟周期是1/11.0592MHz(微秒)。
它的一个机器周期是12*(1/11059200)微秒。
计算出来并不是一个整数,这为什么还要选用它呢?351单片机里有非常重要的概念——定时器和计数器。
定时器和计数器是单片机内部的同一个模块,通过配置SFR(特殊功能寄存器)可以实现两种不同的功能,我们大多数情况下是使用定时器功能,来完成比如延时、中断等任务。
TMOD寄存器:定时器模式寄存器(地址0x89、不可位寻址)TMOD定时器模式列表那么这个又跟选用11.0592MHz的晶振有什么关联?4在这里需要借助串口(串行数据通信接口)做说明,串口收发数据有一个非常重要的概念——波特率(比特率Baud)。
波特率就是发送一位二进制数据位的速率,即发送一位二进制数据的持续时间为1/Baud。
51单片机答辩常见问题解答

51单片机辩论常见问题解答1: P0 口需不需要加上拉电阻问题P0 口做数据总线用是不需要加上拉电阻,这个书上面有写的,就是8个10 口同时控制输出,比方P0 口接1602液晶、12864液晶、数码管的8段段选等等都不需要加上拉电阻,如果做单个的10 口用就要加上拉电阻,仿真里P0 口必需要加上拉电阻,这个是仿真和实际的差异。
2:什么是51单片机51单片机其实不是单独指STC89C51或许AT89C51o 51单片机包含了常见的STC89C52 > STC89C51 > AT89C52 AT89C51 AT89S52 AT89S51等等8位的单片机都是51单片机。
引脚都是一模一样的,程序也兼容。
只是名字不一样而已。
通用的。
论文中需要指定的单片机只需要把名字换了就。
k 了。
3:本店有些作品中为什么个别设计中没有按键复位复位有2种复位方式,一种是上电复位。
一种是9脚按键上 拉复位。
这是书本上面有的。
现在很多作品都没有要按键复位了(这 样作品更环保美观)O 如果一定要按键复位,加一个按键上拉置高电平, 并个10uf 电容就行了。
(原理图如下)局部产品由于电路板剩余面积较大。
复位按键就加进去了。
加上 复位按键只是完成单片机的复位最小系统完整。
实际上这个按键基本 用不上。
需要复位的时候直接重启电源就可以了。
没有必要使用复位 按键。
不加按键复位也没有错。
就像上面讲的,P0 □做数据总线不是也没有用上拉电阻吗。
有按键的复位电路如下列图:P1.OP1.1P1.2 P1.3P1.4 P1.5 P1.6P1.7 RST (RXE (1XU (JNTC (TNT1 :4:本课题的选课背景、意义等等?这个论文中有的,也都是一些套话。
我就不答了,我整理的都是 技术性的。
5:数码管采用的是什么扫描方式?一位数码管的设计就是采用静态扫描的方式,因为一位数 码管是8个段选1个位选,如果采用动态,那就是得用9个10 口, 而且程W1T12序也比拟麻烦,如果选用静态那么位选接电源或地(共阳接电源,共阴接地),段选接10 口,就可以控制显示了,这样只用8个10 口就ok,而且程序比拟简单。
51单片机12M和11.0592M晶振定时器初值TL0和TH0的计算

51单片机12M和11.0592M晶振定时器初值TL0和TH0的计算#include<stdio.h>#include<reg51.h>void timer0_init(){TMOD=0x01;//方式1TL0=0xb0;TH0=0x3c;TR0=1;ET0=1;}void timer0_ISR(void) interrupt 1{TL0=0xb0;TH0=0x3c;//50ms中断一次single++;if(single==20){ kk++;single=0;}}void main(){int kk=0;//计数器int single=0;timer0_init();}TL0=0xb0;TH0=0x3c;这两个是怎么算出来得,如果晶振不是12Mhz ,是11.0592 MHz 怎么算12M的晶振每秒可产生1M个机器周期,50ms就需要50000个机器周期,定时器在方式1工作,是16位计数器,最大值为65536,所以需设置初值15536,即3CB0H(10进制15536转换成16进制数3CB0),所以TH0=0x3c,TL0=0xb0。
(65536-50000周期=初值15536)高位就是TH0的值,低位为TL0的值11.0592M的晶振每秒可产生0.9216M个机器周期,50ms就需要46080个机器周期,定时器在方式1工作,是16位计数器,最大值为65536,所以需设置初值19456,即4C00H,所以TH0=0x4c,TL0=0x00。
其实很简单,不管你使用多大的晶振,使用51单片机,一般都是12分频出来,也就可以得出一个机器周期机器周期=12/n(n指晶振频率),假设你要定时的时间为M那么定时的初值为:M/机器周期=初值;TH0=(65536-初值)%256;TL0=(65536-初值)/256;将(65536-初值)所得的值化成16进制,其高位就是TH0的值,低位为TL0的值例如用12M晶振做1ms定时计算如下:机器周期=12/12*10^6=1us(微秒)定时初值=(1*10^-3)/(1*10^-6)=1000;所以:TH0=(65536-1000)%256;TL0=(65536-1000)/256;将65536-1000=64536化为16进制为:0xFC18 TH0=0xFC;TL0=0X18;。
51系列单片机波特率的计算方法(最终版本)

STC单片机串口1用定时器1模式2做波特率发生器的计算方法一、基本原理说明定时器1工作在方式2是一种既省事又精确的产生串行口波特率的方法。
原因是定时器T1工作方式2是一种8位自动重装方式,无需在中断服务程序中送数,没有由于中断引起的误差。
波特率的计算公式:设定时器T1方式2的初值为X,则有:定时器T1的溢出率=计数速率/(256-X)=fosc/(256-X)*12;(注:12分频的单片机)则方式2的波特率=2SMOD*fosc/(256-X)*12*32.二、计算题1.波特率的计算公式:9600Hz(9600bps),4800Hz(4800bps),其他波特率都有误差。
图1此图中波特率是19200BPS、57600BPS时候,存在误差2.溢出率:溢出率应该是每秒溢出的次数。
综合式:波特率=(2SMOD/32)*(T1的溢出率)=(2SMOD/32)*(fosc/(12*(256-TL1)))=(2SMOD*fosc)/(394*(256-TL1))12/fosc=每个机器周期时间(fosc单片机的晶振时钟的频率),8位定时器T1溢出一次所需的时间=(12/fosc)*(256-初值)=溢出一次所需的时间,最后用1除以该数就代表每秒溢出的次数,也称作溢出率。
计数速率=fosc/12(12分频的单片机)溢出速率=1/一次溢出时间=1/((256-TL1初值)*(12/fosc))=fosc/(12*(256-TL1初值))3.计算例题(1)若STC单片机的晶振频率fosc为11.0592MHz,串行口1工作在方式1,定时器T1作为波特率发生器,T1在工作模式2自动重装初值的8位定时方式,已知SMOD=0,要求串行口1的波特率为9600Hz(9600bps),请计算定时器T1的初始值TL1=?。
解答:(a)因SMOD=0,波特率=(2SMOD/32)*(T1的溢出率)=(T1的溢出率)/32=9.6Kbps计算得,T1的溢出率=9.6KHz*32=307.2KHz=0.3072MHz(b)T1的溢出率=fosc/(12*(256-TL1))=11.0592MHz/(12*(256-TL1))=0.3072MHz计算得,TL1=253=0x FDH(c)STC-ISP软件计算结果如下图所示:(d)C语言编写的串口1和定时器1初始化代码如下:void UartInit(void)//9600bps@11.0592MHz{PCON&=0x7F;//波特率不倍速SCON=0x50;//8位数据,可变波特率AUXR&=0xBF;//定时器1时钟为Fosc/12,即12TAUXR&=0xFE;//串口1选择定时器1为波特率发生器TMOD&=0x0F;//清除定时器1模式位TMOD|=0x20;//设定定时器1为8位自动重装方式TL1=0xFD;//设定定时初值TH1=0xFD;//设定定时器重装值ET1=0;//禁止定时器1中断TR1=1;//启动定时器1}电源控制寄存器PCON初值:0X7FH----01111111PCON&=0X7F;比特B7B6B5B4B3B2B1B0名字SMOD SMOD0LVDF POF GF1GF0PD IDL 值01111111 SMOD=0;表示串口1的波特率不加倍;SMOD0、LVDF、POF、GF1、GF0、PD、IDL维持原状态位不变;串口1控制寄存器SC0N初值:0X50H-----01010000SC0N&=0X50;比特B7B6B5B4B3B2B1B0名字SM0/FE SM1SM2REN TB8RB8TI RI 值01010000 SMOD0=0,SM1=1;表示串口1工作在模式1方式;SM2=0;表示串口1在方式1非多机通信方式;REN=1;表示维持原状态位不变;TB8、RB8、TI、RI各位分别置0;辅助寄存器AUXR初值:0XBFH-----10111111AUXR&=0XBF;比特B7B6B5B4B3B2B1B0名字T0X12T1X12UART_M0x6T2R T2_C/T T2x12EXTRAM S1ST2值10111111 T1X12=0;表示定时器1是12分频,其速度是传统8051的速度;T0X12、UART_M0x6、T2R、T2_C/T、T2x12、EXTRAM、S1ST2维持原状态位值不变;辅助寄存器AUXR初值:0XFEH------11111110AUXR&=0XFE;比特B7B6B5B4B3B2B1B0名字T0X12T1X12UART_M0x6T2R T2_C/T T2x12EXTRAM S1ST2值11111110 S1ST2=0;表示定时器1作为串口1的波特率发生器;T0X12、T1X12、UART_M0x6、T2R、T2_C/T、T2x12、EXTRAM维持原状态位值不变;辅助寄存器AUXR初值:0XBEH------10111110AUXR&=0XBE;比特B7B6B5B4B3B2B1B0名字T0X12T1X12UART_M0x6T2R T2_C/T T2x12EXTRAM S1ST2值10111110 T1X12=0;表示定时器1是12分频,其速度是传统8051的速度;S1ST2=0;表示定时器1作为串口1的波特率发生器;T0X12、UART_M0x6、T2R、T2_C/T、T2x12、EXTRAM维持原状态位值不变;定时器工作模式寄存器TMOD寄存器初值:0X0FH-----00001111TMOD&=0X0F比特B7B6B5B4B3B2B1B0名字GATE C/T M1M0GATE C/T M1M0值00001111作用域与定时器1有关与定时器0有关GATE(B7)=0;表示不要求条件INT1引脚为高,并且TR1=1的条件定时,亦即定时不受任何条件限制;C/T=0;该位为0时,表示定时器1工作在定时模式;M1=0,M0=0;表示定时器1-16位自动重新加载模式;B3、B2、B1、B0维持原状态位值不变;定时器工作模式寄存器TMOD初值:0X20H------00100000TMOD|=0X20;比特B7B6B5B4B3B2B1B0名字GATE C/T M1M0GATE C/T M1M0值00100000作用域与定时器1有关与定时器0有关M1=1,M0=0;表示定时器1-8位自动重新加载模式;B7、B6、B4、B3、B2、B1、B0维持原状态位值不变;(2)若STC单片机的晶振频率fosc为11.0592MHz,串行口1工作在方式1,定时器T1作为波特率发生器,T1在工作模式2自动重装初值的8位定时方式,已知SMOD=1,要求串行口1的波特率为9600Hz(9600bps),请计算定时器T1的初始值TL1=?。
51单片机波特率计算

51单片机波特率计算51单片机波特率设置方法51芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用SCON 寄存器。
它的各个位的具体定义如下:SM0 SM1 SM2 REN TB8 RB8 TI RISM0、SM1 为串行口工作模式设置位,这样两位可以对应进行四种模式的设置。
串行口工作模式设置。
波特率在使用串口做通讯时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯。
波特率是指串行端口每秒内可以传输的波特位数。
这里所指的波特率,如标准9600 不是每秒种可以传送9600个字节,而是指每秒可以传送9600 个二进位,而一个字节要8 个二进位,如用串口模式1 来传输那么加上起始位和停止位,每个数据字节就要占用10 个二进位,9600 波特率用模式1 传输时,每秒传输的字节数是9600÷10=960 字节。
其他的字段的含义如下:(2).SM2:多机通信控制位。
多机通信是工作于方式2和方式3,SM2位主要用于方式2和方式3。
接收状态,当串行口工作于方式2或3,以及SM2=1时,只有当接收到第9位数据(RB8)为1时,才把接收到的前8位数据送入SBUF,且置位RI发出中断申请,否则会将接受到的数据放弃。
当SM2=0时,就不管第9位数据是0还是1,都会将数据送入SBUF,并发出中断申请。
工作于方式0时,SM2必须为0。
(3).REN:允许接收位。
REN用于控制数据接收的允许和禁止,REN=1时,允许接收,REN=0时,禁止接收。
(4).TB8:发送接收数据位8。
在方式2和方式3中,TB8是要发送的——即第9位数据位。
在多机通信中同样亦要传输这一位,并且它代表传输的地址还是数据,TB8=0为数据,TB8=1时为地址。
(5).RB8:接收数据位8。
在方式2和方式3中,RB8存放接收到的第9位数据,用以识别接收到的数据特征。
(6).TI:发送中断标志位。
可寻址标志位。
波特率与晶振

为什么51系列单片机常用11.0592MHz的晶振设计?现在有许多极好的编译程序能显示代码,在速度和尺寸两方面都是非凡有效的。
现代的编绎器非常适应寄存器和变量的使用方面,比手动编译有较好的优越性,甚至在其它常规方面,所以C应是看代码方面最合适的。
答1:因为它能够准确地划分成时钟频率,与UART(通用异步接收器/发送器)量常见的波特率相关。
特别是较高的波特率(19600,19200),不管多么古怪的值,这些晶振都是准确,常被使用的。
答2:当定时器1被用作波特率发生器时,波特率工作于方式1和方式3是由定时器1的溢出率和SMOD 的值(PCON.7------双倍速波特率)决定:方式1、3波特率= (定时器1的溢出率)特殊时,定时器被设在自动重袋模式(模式2,TMOD的高四位为0100B),其为:方式1、 3波特率=11.0592MHZ晶振的一些典型波特率如下:更换一种计算方式,它将以修改公式达到我们需求的波特率来计算出晶振。
最小晶振频率=波特率x 384 x 2 SMOD这就是我们所需波特率的最小晶振频率,此频率能成倍增加达到我们需求的时钟频率。
例如:波特率为19.2KH2的最小晶振频率:3.6864=19200x384x2(波特率为19.2K的SMOD为1 )11.0592=3.6864x3其中TH1是由倍乘数(3)确定TH1=256-3=253=0FDH用来确定定时器的重装值,公式也可改为倍乘数的因子:晶振频率=波特率x(256-TH1)x384x2 SMOD这是波特率为19.24K的晶振频率。
以上的例子可知,被乘数(3)是用来确定TH1:TH1=256-3=253=0FDH19.2K波特率的晶振为11.0592=19200x(256-0FDH)x384x2(19.2 k的SMOD为1)其它值也会得出好的结果,但是11.0592MHZ是较高的晶振频率,也允许高波特率。
设定80C51串行异步通讯的波特率本文的目的在于补充及阐明一些有关的内容。
晶振选用11.0592M和32.768k的缘由

晶振选用11.0592M和32.768k的缘由
RTC也是晶振,Real Time Clock,频率32.768kHz,正好是2的15次方。
用一个16位的计数器计数RTC信号,结果第16位变为1的时候,正好是1秒钟。
选用11.0592MHz只是为了得到精确的通信波特率,串口通信的可靠性高.
因为它能够准确地划分成时钟频率,与UART(通用异步接收器/发送器)量常见的波特率相关。
特别是较高的波特率,不管多么特殊的值,这些晶振都是准确,常被使用的。
以19.2K 波特率为例,19.2K波特率的晶振为11.0592=19200x(256-0FDH)x384x2(19.2 k的SMOD 为1)
其它值也会得出好的结果,但是11.0592MHZ是精度较高的晶振频率
标准的51单片机晶振是1.2M-12M,一般由于一个机器周期是12个时钟周期,所以先12M 时,一个机器周期是1US,好计算,而且速度相对是最高的(当然现在也有更高频率的单片机)。
11.0592M是因为在进行通信时,12M频率进行串行通信不容易实现标准的波特率,比如9600,4800,而11.0592M计算时正好可以得到,因此在有通信接口的单片机中,一般选11.0592M。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51 单片机常用波特率初值表(12M 晶振)
为什幺51 单片机的晶振一般使用11.0592?
用11.0592 晶振的原因是51 单片机的定时器导致的。
用51 单片机的定时器做波特率发生器时,如果用11.0592Mhz 的晶振,根据公式算下来需要定时器设置的值都是整数;如果用12Mhz 晶振,则波特率都是有偏差的,比如9600,用定时器取0XFD,实际波特率10000,一般波特率偏差在4%左右都是可以的,所以也还能用STC90C516 晶振12M 波特率9600 ,倍数时误差率6.99%,不倍数时误差率8.51%,数据肯定会出错。
这也就是串口通信时大家喜欢用11.0592MHz 晶振的原因,在波特率倍速时,最高可达到57600,误差率0.00%。
用12MHz,最高也就4800,而且有0.16%误差率,但在允许范围,所以没多大影响。
扩展阅读:关于51 单片机IO 引脚的驱动能力与上拉电阻。