51单片机晶振与波特率的关系
波特率和晶振频率的关系
波特率和晶振频率的关系波特率是指串行通信中的数据传输速率,通常用单位时间内传输的比特数来衡量。
而晶振频率是指振荡器的频率,它用来产生计算机或通信设备的时钟信号。
在通信领域中,波特率和晶振频率之间有着密切的关系,彼此相互制约。
首先,我们来了解一下波特率的概念。
波特率实际上是一个传输数据的速度单位,用波特(Baud)来表示。
波特率可以理解为单位时间内传输的信号的个数或变化的次数。
在串行通信中,每个数据位的传输都需要用一定的时间,而波特率就是单位时间内传输的比特数。
一般情况下,波特率越高,数据传输速度越快。
接下来,我们来了解一下晶振频率的概念。
晶振频率是指振荡器内的晶体振荡的频率,它可以决定计算机或通信设备的工作频率和时钟信号的产生。
晶振频率越高,时钟信号的周期越短,计算机的运行速度也就越快。
波特率和晶振频率之间的关系可以通过以下公式表示:波特率 =晶振频率 / 帧特征数。
其中,帧特征数是指在一帧数据中所包含的比特位数,它可以是一个固定的值,比如8位。
根据这个公式,我们可以得出以下结论:1. 波特率受限于晶振频率:波特率是由晶振频率决定的,晶振频率越高,可以支持的最高波特率也就越高。
因此,在设计通信设备时,需要根据需要选择合适的晶振频率来支持所需的最高波特率。
2. 波特率对通信质量影响较大:波特率的选择会直接影响到通信的稳定性和可靠性。
如果选择的波特率过高,超过了设备的承载范围,可能会导致数据传输错误或丢失;而如果波特率过低,则会导致数据传输速度慢,无法满足实时性的需求。
因此,在实际应用中,需要根据设备的性能和通信环境的要求,合理选择波特率。
3. 晶振频率对功耗和发热影响显著:晶振频率越高,设备的功耗和发热也就越大。
因此,在设计高性能、高速率的通信设备时,需要充分考虑设备的散热能力,以及对功耗的控制。
合理选择晶振频率可以在满足性能要求的同时,降低设备的功耗和发热。
总结起来,波特率和晶振频率之间的关系可以用“高晶频,高速率”的原则来概括。
单片机中晶振电路的作用
单片机中晶振电路的作用一、引言单片机是现代电子技术中最常用的控制器件之一,其内部集成了许多功能模块,如CPU、RAM、ROM等,可以实现各种不同的控制功能。
其中,晶振电路是单片机中非常重要的一个组成部分,其作用在于提供精准的时钟信号,以驱动单片机内部各个模块的运行。
二、晶振电路的基本原理晶振电路由晶体振荡器和放大器两部分组成。
晶体振荡器是由一个石英晶体和两个金属片组成的谐振回路,在外加一个恒定的直流偏置电压下,当石英晶体受到外界激励时就会产生机械振动,并将这种机械振动转换为电信号输出。
放大器则对这种微弱的电信号进行放大,并将其输出为正弦波形式。
三、晶振电路在单片机中的作用1. 提供精准时钟信号在单片机中,每个指令都需要按照特定的时序进行执行。
而这些时序都是通过内部时钟信号来控制实现的。
因此,精准可靠地提供时钟信号是单片机正常运行的关键。
晶振电路中的石英晶体具有非常高的稳定性和精度,可以提供非常准确的时钟信号,保证单片机内部各个模块的同步运行。
2. 控制CPU工作频率晶振电路中的晶体振荡器可以提供不同频率的时钟信号,通过调整外部电路元件或更换不同频率的石英晶体,可以实现对CPU工作频率的控制。
这种控制方式可以适应不同应用场合下对单片机性能和功耗等方面要求的变化。
3. 实现串口通讯在单片机中,串口通讯是一种非常重要的数据传输方式。
而串口通讯需要使用到波特率发生器来产生相应波特率下的时钟信号。
而波特率发生器就是通过将晶振电路输出的时钟信号进行分频得到所需波特率下的时钟信号。
因此,晶振电路在实现串口通讯中也起着至关重要的作用。
四、晶振电路设计注意事项1. 选择合适频率和精度在设计晶振电路时需要根据具体应用场合选择合适频率和精度的石英晶体。
一般来说,频率越高、精度越高的石英晶体价格也越贵,因此需要根据实际需求进行选择。
2. 保证电路稳定性晶振电路中的放大器需要提供足够的增益和稳定性,以保证输出正弦波形式的时钟信号。
波特率与晶振
为什么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串行异步通讯的波特率本文的目的在于补充及阐明一些有关的内容。
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系列单片机波特率的计算方法概述51系列单片机是一种常用的低功耗、高性能的8位单片机。
在串行通信中,波特率是指单位时间内传输的数据位数,是一个十分重要的参数。
计算正确的波特率可以确保数据的可靠传输和通信的稳定性。
本文将详细介绍51系列单片机波特率的计算方法,并给出实际应用中的示例。
计算机波特率的原理波特率是通过改变每个数据位的传输时间来实现的。
对于51系列单片机,它的波特率是由两个寄存器控制的,分别是TH1和TL1、这两个寄存器是16位的,它们的值决定了单片机串口的传输速度。
波特率的计算公式如下:波特率=定时器1溢出率×(TH1×256+TL1)其中,定时器1的溢出率是一个常数,取决于单片机的时钟源和预分频系数。
对于常用的外部振荡器时钟源,定时器1的溢出率可以通过以下公式计算:定时器1溢出率=(2^SMOD/32)×(12×10^6/PSM)其中,SMOD是串口模块的倍频系数,可以取1或者0。
PSM是定时器1的预分频系数,可以取1、2、4、8实际应用示例假设我们要使用一个频率为12MHz的外部振荡器作为时钟源,希望设置波特率为9600。
接下来我们按照以下步骤计算波特率:1.根据提供的时钟源频率和波特率,计算出定时器1溢出率:定时器1溢出率=(2^SMOD/32)×(12×10^6/PSM)=(2^1/32)×(12×10^6/1)2.计算TH1和TL1的值:波特率=定时器1溢出率×(TH1×256+TL1)TH1×256+TL1≈0.128由于TH1和TL1都是整数,所以需要找到一个最接近0.128的数作为TH1和TL1的值。
在这个例子中,我们可以选择TH1=0,TL1=333.设置串口的工作模式和配置寄存器:在上述计算中,我们假设SMOD=1,PSM=1、根据实际需求,可以通过修改SM0/SM1和PS0/PS1/PS2位来设置倍频系数和预分频系数。
波特率与晶振有什么关系?
波特率与晶振有什么关系?
本文主要讲了有关波特率的介绍和晶振的介绍以及波特率与晶振的关系,具体的随小编来看看吧。
波特率介绍
单片机或计算机在串口通信时的速率。
指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数,如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为240Bd,比特率为10位*240个/秒=2400bps。
又比如每秒钟传送240个二进制位,这时的波特率为240Bd,比特率也是240bps。
(但是一般调制速率大于波特率,比如曼彻斯特编码)。
波特率,可以通俗的理解为一个设备在一秒钟内发送(或接收)了多少码元的数据。
它是对符号传输速率的一种度量,1波特即指每秒传输1个码元符号(通过不同的调制方式,可以在一个码元符号上负载多个bit位信息),1比特每秒是指每秒传输1比特(bit)。
单位“波特”本身就已经是代表每秒的调制数,以“波特每秒”(Baud per second)为单位是一种常见的错误。
作用:
为了在彼此之间通讯,调制解调器必须使用相同的波特率进行操作。
如果将调制解调器的波特率设置为高于其他的调制解调器的波特率,则较快的调制解调器通常要改变其波特率以匹配速度较慢的调制解调器。
分析举例:
它是对信号传输速率的一种度量,通常以“波特”(baud)为单位。
波特率有时候会同比特率混淆,实际上后者是对信息传输速率(传信率)的度量。
波特率可以被理解为单位时间内传输码元符号的个数(传符号率),通过不同。
晶振对波特率的影响到底有多大?让你见识见识
晶振对波特率的影响到底有多大?让你见识见识片机中的晶振在整个内部电路中发挥着重要的作用,电路配合晶振的运行能够产生单片机所需的时钟频率。
可以说,一切指令都是建立在时钟频率的基础上,那么,晶振与波特率又有什么关系呢?两者之间影响到底有多大呢?在串行通信中,MCS51 串口可约定四种工作方式。
其中,方式0 和方式2 的波特率是固定的,而方式1 和方式3 的波特率是可变的,由定时器T1 的溢出率决定。
波特率是指串行端口每秒内可以传输的波特位数。
这里所指的波特率,如标准9600 不是每秒种可以传送9600 个字节,而是指每秒可以传送9600 个二进位,而一个字节要8 个二进位,如用串口模式1 来传输,那么加上起始位和停止位,每个数据字节就要占用10 个二进位,9600 波特率用模式1 传输时,每秒传输的字节数是9600÷10=960 字节。
图1 方式0 和方式2 的波特率方式0 的波特率是固定的,为fosc/12,以一个12M 的晶振来计算,那么它的波特率可以达到1M。
方式2 的波特率是固定在fosc/64 或fosc/32,具体用那一种就取决于PCON 寄存器中的SMOD 位,如SMOD 为0,波特率为focs/64,SMOD 为1,波特率为focs/32。
方式1 和方式3 的波特率模式1 和模式3 的波特率是可变的,取决于定时器1 或2(对于52 芯片)的溢出速率,就是说定时器1 每溢出一次,串口发送一次数据。
可以用以下的公式去计算:上式中如设置了PCON 寄存器中的SMOD 位为1 时就可以把波特率提升2 倍。
通常会使用定时器1 工作在定时器工作模式2 下,这时定时值中的TL1 做为计数,TH1 做为自动重装值,这个定时模式下,定时器溢出后,TH1 的值会自动装载到TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。
在这个定时模式2 下定时器1 溢出速率的计算公式如下:溢出速率=(计数速率)/(256-TH1 初值)溢出速率=fosc/[12*(256-TH1 初值)上式中的计数速率与所使用。
51单片机六个常见问题解析
51单片机六个常见问题解析一,为何51单片机爱用11.0592MHZ晶振?其一:由于它能够精确地划分红时钟频率,与UART(通用异步接纳器/发送器)量常见的波特率有关。
特别是较高的波特率(19600,19200),不论多么古怪的值,这些晶振都是精确,常被运用的。
其二:用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单片机体系PCB时,晶振为何被需求紧挨着单片机?缘由如下:晶振是经过电鼓励来发生固定频率的机械振荡,而振荡又会发生电流反应给电路,电路接到反应后进行信号扩大,再次用扩大的电信号来鼓励晶振机械振荡,晶振再将振荡发生的电流反应给电路,如此这般。
当电路中的鼓励电信号和晶振的标称频率相一起,电路就能输出信号强壮,频率安稳的正弦波。
整形电路再将正弦波成为方波送到数字电路中供其运用。
疑问在于晶振的输出才能有限,它仅仅输出以毫瓦为单位的电能量。
在IC(集成电路)内部,经过扩大器将这个信号扩大几百倍乃至上千倍才能正常运用。
晶振和IC 间通常是经过铜走线相连的,这根走线能够当作一段导线或数段导线,导线在切割磁力线的时分会发生电流,导线越长,发生的电流越强。
现实中,磁力线不常见,电磁波却处处都是,例如:无线播送发射、电视塔发射、手机通讯等等。
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:单片机操作成功信息。
(C语言版)绝密版C51单片机复习题及答案
(C 语言版)绝密版 C51 单片机复习题及答案一填空题1、计算机中最常用的字符信息编码是( ASCII 码)。
2、MCS-51 系列单片机为( 8 )位单片机。
3、若不使用 MCS-51 片内存储器引脚( /EA )必须接(地)。
4、8031 内部有 ( 128 )个 RAM; 8051 内部有 (4K ROM )和( 128 个 RAM)。
5 、堆栈的地址由 ( SP ) 内容确定,其操作规律是“(先 ) 进(后)出”。
6 、在单片机扩展时, ( P0 ) 口和 ( P2 ) 口为地址线, (P0 ) 口又分时作为数据线。
7 、在 MCS-51 单片机中,如采用 6MHZ 晶振,一个机器周期为( 2us )。
8、当 80C51 的 RST 引脚上保持 ( 2 ) 个机器周期以上的低电平时,80C51 即发生复位。
9、当 P1 口做输入口输入数据时,必须先向该端口的锁存器写入( 1 ),否则输入数据可能出错。
10、若某存储芯片地址线为 12 根,那么它的存储容量为( 4K B )。
11、程序状态寄存器 PSW 的作用是用来保存程序运行过程中的各种状态信息。
其中 CY 为 (进位) 标志,用于无符号数加 (减) 运算,当进行(位)操作时作为位累加器。
OV 为(溢出)标志,用于有符号数的加(减)运算。
12、消除键盘抖动常用两种方法,一是采用(硬件去抖电路),用基本 RS 触发器构成;二是采用(软件去抖程序),既测试有键输入时需延时 ( 约大于 10 毫秒) 后再测试是否有键输入,此方法可判断是否有键抖动。
13、若 MCS-51 单片机采用 12MHz 的晶振频率,它的机器周期为( 1us ),ALE 引脚输出正脉冲频率为(2 MHZ )。
14 、 8051 有两个 16 位可编程定时/计数器,T0 和 T1。
它们的功能可由两个控制寄存器( TCON ) 、 ( TMOD ) 的内容决定,且定时的时间或计数的次数与( TH)、 ( TL)两个寄存器的初值有关。
51单片机波特率计算
51单片机波特率计算
单片机的波特率计算通常采用以下公式:
波特率=系统频率/(16*(SPBRG+1))
其中,系统频率是单片机的主频或振荡频率,SPBRG是串口波特率发生器的寄存器。
这个公式适用于大多数单片机,但具体的值可能会有所不同。
接下来以51单片机为例,介绍波特率计算的具体步骤。
1.确定系统频率:51单片机的系统频率通常为12MHz,可以根据具体情况进行调整。
我们假设系统频率为12MHz。
2.确定波特率:根据需求,确定所需的波特率。
假设需要设置的波特率为9600。
3.代入公式并求解:将系统频率和所需的波特率代入公式中,计算出SPBRG的值:
解方程得到:
由于SPBRG的值必须是一个整数,因此需要进行四舍五入:
SPBRG=77(四舍五入)
所以,在12MHz的系统频率下,如果需要设置51单片机的波特率为9600,SPBRG的值应为77
需要注意的是,不同的单片机可能会有不同的最小波特率误差和最大波特率误差。
在实际应用中,还需要考虑到波特率误差的范围,以确保数据的可靠传输。
晶振和波特率的关系
晶振和波特率的关系1. 晶振和波特率的基本概念晶振是指晶体振荡器,是一种能够产生稳定频率的电子元件。
在计算机和通信领域,晶振被广泛应用于时钟信号的生成。
波特率是指每秒传输的比特数,也可以理解为数据传输速率。
2. 晶振与波特率的关系晶振和波特率之间存在着密切的关系。
晶振的频率决定了数据传输的速率,即波特率。
波特率的单位是bps(bit per second),表示每秒传输的比特数。
3. 波特率的计算公式波特率的计算公式为:波特率 = 晶振频率 / 分频系数其中,晶振频率是晶振的振荡频率,分频系数是通过分频器设置的参数,用于控制数据传输速率。
4. 波特率的选择在实际应用中,选择合适的波特率非常重要。
波特率过高会导致数据传输错误率增加,而波特率过低则会影响数据传输的速度。
因此,根据具体应用场景和设备性能,选择合适的波特率十分关键。
5. 晶振的选择选择合适的晶振频率也是十分重要的。
一般来说,晶振频率越高,数据传输速率就可以越快。
但是,晶振频率也会受到硬件设备的限制。
因此,在选择晶振时,需要考虑设备的性能和兼容性。
6. 晶振和波特率的匹配在实际应用中,晶振和波特率需要匹配才能正常工作。
如果晶振频率和波特率不匹配,会导致数据传输错误或无法正常传输。
因此,在设计和开发电子产品时,需要合理选择晶振和波特率,确保它们之间的匹配关系。
7. 晶振和波特率的影响因素晶振和波特率的选择受到多种因素的影响。
其中,硬件设备的性能和要求是最重要的因素之一。
此外,通信协议的要求、传输距离和噪声等因素也会对晶振和波特率的选择产生影响。
8. 晶振和波特率的应用举例晶振和波特率的关系在各个领域都有应用。
例如,晶振和波特率的选择对于串口通信非常重要。
在串口通信中,晶振频率决定了传输速率,波特率设置则控制了数据传输的稳定性。
9. 总结晶振和波特率之间存在着紧密的关系。
晶振的频率决定了数据传输的速率,即波特率。
在实际应用中,晶振和波特率需要匹配才能正常工作。
在51单片机中波特率的计算方法
在51单片机中波特率的计算方法一、传统51单片机波特率的算法传统51单片机的及其周期是晶振的1/12,一般在使用串口工作方式1使用时,波特率的计算公式:)2(12*32*2X fosc bps n SMOD -= 其中:bps----------波特率(bit/s )SMOD------波特率加倍位(PCON.7)n-------------单次收发8为数据X------------初值当设定确定波特率时,需要计算初值,换算公式为:12**32*22bps fosc X SMOD n-= 误码率计算公式:%100*1bpsbps bps WML -= 其中:WML-------误码率bps1---------实际波特率Bps----------理论波特率注意:误码率一般不要超过3%。
以下举例说明:1、传统51单片机(机器周期是晶振的1/12),外部晶振11.1592MHz ,使用串口工作方式1(异步串口通信),bps=9600bit/s 。
求定时器1工作方式2的初值?当设定SMOD=0时,根据初值计算公式:25312*9600*3210*0592.11*22608=-=X 转换成HEX (十六进制)为0xfd 。
误码率为0当设定SMOD=1时,根据初值计算公式:25012*9600*3210*0592.11*22618=-=X转换成HEX (十六进制)为0xfa 。
误码率为02、传统51单片机(机器周期是晶振的1/12),外部晶振11.1592MHz ,使用串口工作方式1(异步串口通信),bps=4800bit/s 。
求定时器1工作方式2的初值?当设定SMOD=0时,根据初值计算公式:25012*4800*3210*0592.11*22608=-=X 转换成HEX (十六进制)为0xfa 。
误码率为0当设定SMOD=1时,根据初值计算公式:24412*4800*3210*0592.11*22618=-=X 转换成HEX (十六进制)为0xf4。
22.1184MHZ晶振和11.0592MHZ晶振
0FAH
2400
0
0F4H
1200
0
0E8H
300
0
0A0H
更换一种计算方式,它将以修改公式达384 x 2 SMOD
这就是我们所需波特率的最小晶振频率,此频率能成倍增加达到我们需求的时钟频率。
为什么51系列单片机常用11.0592MHz的晶振设计?
1、因为它能够准确地划分成时钟频率,与UART(通用异步接收器/发送器)量常见的波特率相关。特别是较高的波特率(19600,19200),不管多么古怪的值,这些晶振都是准确,常被使用的。
2、当定时器1被用作波特率发生器时,波特率工作于方式1和方式3是由定时器1的溢出率和SMOD的值(PCON.7------双倍速波特率)决定:
例如:波特率为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的晶振频率。
方式1、3波特率= (定时器1的溢出率)
特殊时,定时器被设在自动重装模式(模式2,TMOD的高四位为0100B),其为:
方式1、 3波特率=
11.0592MHZ晶振的一些典型波特率如下:
波特率
SMOD
TH1
19200
1
0FDH
9600
0
0FDH
4800
以上的例子可知,被乘数(3)是用来确定TH1:
(C语言版)绝密版C51单片机复习题及答案
(C语言版)绝密版C51单片机复习题及答案一填空题1、计算机中最常用的字符信息编码是(ASCII码)。
2、MCS-51系列单片机为(8)位单片机。
3、若不使用MCS-51片内存储器引脚(/EA)必须接(地)。
4、8031内部有(128)个RAM;8051内部有(4K ROM)和(128个RAM)。
5、堆栈的地址由(SP)内容确定,其操作规律是“(先)进(后)出”。
6、在单片机扩展时,(P0)口和(P2)口为地址线,(P0)口又分时作为数据线。
7、在MCS-51单片机中,如采用6MHZ晶振,一个机器周期为(2us)。
8、当80C51的RST引脚上保持(2)个机器周期以上的低电平时,80C51即发生复位。
9、当P1口做输入口输入数据时,必须先向该端口的锁存器写入(1),否则输入数据可能出错。
10、若某存储芯片地址线为12根,那么它的存储容量为(4K B)。
11、程序状态寄存器PSW的作用是用来保存程序运行过程中的各种状态信息。
其中CY为(进位)标志,用于无符号数加(减)运算,当进行(位)操作时作为位累加器。
OV为(溢出)标志,用于有符号数的加(减)运算。
12、消除键盘抖动常用两种方法,一是采用(硬件去抖电路),用基本RS触发器构成;二是采用(软件去抖程序),既测试有键输入时需延时(约大于10毫秒)后再测试是否有键输入,此方法可判断是否有键抖动。
13、若MCS-51单片机采用12MHz的晶振频率,它的机器周期为(1us),ALE引脚输出正脉冲频率为(2MHZ)。
14、8051有两个16位可编程定时/计数器,T0和T1。
它们的功能可由两个控制寄存器(TCON)、(TMOD)的内容决定,且定时的时间或计数的次数与(TH)、(TL)两个寄存器的初值有关。
15、串行口的控制寄存器SCON中,REN的作用是(允许串行接收位)。
16、单片机内外中断源按优先级别分为高级中断和低级中断,级别的高低是由(中断优先级寄存器,)寄存器的置位状态决定的。
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。
proteus仿真51单片机串口双机通讯
51单片机的串口双机通讯一、什么是串口串口是串行发送数据的接口,是相对于并口来说的,是一个广泛的定义。
本期我们说的串口指的是指UART或是RS232。
二、什么是波特率波特率是指串行端口每秒内可以传输的波特位数。
这里所指的波特率,如标准9600不是每秒种可以传送9600个字节,而是指每秒可以传送9600个二进位。
一个字节需要8个二进位,如用串口模式1来传输,那么加上起始位和停止位,每个数据字节就要占用10个二进位。
9600bps用模式1传输时,每秒传输的字节数是9600÷10=960个字节,发送一个字节大概需要1ms时间。
三、51单片机串口相关寄存器1、SCON串口控制寄存器(1)SM0和SM1:方式选择寄存器SM0 SM1 工作方式功能波特率0 0 方式0 8位同步移位寄存器晶振频率/ 120 1 方式1 10位UART 可变1 0 方式2 11位UART 晶振频率/32或晶振频率/64 1 1 方式3 11位UART 可变多机通信是工作在方式2和方式3的,所以SM2主要用于方式2和方式3,多级通信时,SM2=1,当SM2=1时,只有当接收到的数据帧第9位(RB8)为1时,单片机才把前八位数据放入自己的SBUF中,否则,将丢弃数据帧。
当SM2=0时,不论RB8的值是什么,都会把串口收到的数据放到SBUF中。
(3)REN:允许接收位REN用于控制是否允许接收数据,REN=1时,允许接收数据,REN=0时,拒绝接收数据。
(4)TB8:要发送的第9位数据位在方式2和方式3中,TB8是要作为数据帧第9位被发送出去的,在多机通信中,可用于判断当前数据帧的数据是地址还是数据,TB8=0为数据,TB8=1为地址。
(5)RB8:接收到的第9位数据位当单片机已经接收一帧数据帧时,会把数据帧中的第9位放到RB8中。
方式0不使用RB8,在方式2和方式3中,RB8为接收到的数据帧的第9位数据位。
(6)TI:发送中断标志位方式0中,不用管他。
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单片机晶振与波特率有什么关系在串行通信中,MCS—51串口可约定四种工作方式。
其中,方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率决定。
波特率是指串行端口每秒内可以传输的波特位数。
这里所指的波特率,如标准9600不是每秒种可以传送9600个字节,而是指每秒可以传送9600个二进位,而一个字节要8个二进位,如用串口模式1来传输,那么加上起始位和停止位,每个数据字节就要占用10个二进位,9600波特率用模式1传输时,每秒传输的字节数是9600÷10=960字节。
一、方式0和方式2的波特率方式0的波特率是固定的,为fosc/12,以一个12M 的晶振来计算,那么它的波特率可以达到1M。
方式2的波特率是固定在fosc/64 或fosc/32,具体用那一种就取决于PCON 寄存器中的SMOD位,如SMOD 为0,波特率为focs/64,SMOD 为1,波特率为focs/32。
二、方式1和方式3的波特率模式1和模式3的波特率是可变的,取决于定时器1或2(对于52芯片)的溢出速率,就是说定时器1每溢出一次,串口发送一次数据。
可以用以下的公式去计算:上式中如设置了PCON寄存器中的SMOD位为1时就可以把波特率提升2倍。
通常会使用定时器1工作在定时器工作模式2下,这时定时值中的TL1做为计数,TH1做为自动重装值,这个定时模式下,定时器溢出后,TH1的值会自动装载到TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。
在这个定时模式2下定时器1溢出速率的计算公式如下:溢出速率=(计数速率)/(256-TH1初值)溢出速率=fosc/[12*(256-TH1初值)]上式中的“计数速率”与所使用的晶体振荡器频率有关,在51 芯片中定时器启动后会在每一个机器周期使定时寄存器TH的值加1,一个机器周期等于十二个振荡周期,所以可以得知51芯片的计数速率为晶体振荡器频率的1/12,一个12M 的晶振用在51芯片上,那么51的计数速率就为1M。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51 单片机晶振与波特率的关系
在串行通信中, MCS — 51 串口可约定四种工作方式。
其中,方式 0 和方式 2 的波特率是固定的,而方式 1 和方式 3 的波特率是可变的,由定时器 T1 的溢出率决定。
波特率是指串行端口每秒内可以传输的波特位数。
这里所指的波特率,如标准9600 不是每秒种可以传送 9600 个字节,而是指每秒可以传送9600 个二进位,而一个字节要 8 个二进位,如用串口模式 1 来传输,那么加上起始位和停止位,每个数据字节就要占用 10 个二进位, 9600 波特率用模式 1 传输时,每秒传输的字节数是9600 - 10=960字节。
一、方式0 和方式 2的波特率
方式0的波特率是固定的,为fosc/12 ,以一个12M的晶振来计算,那么它的波特率可以达到 1M。
方式2的波特率是固定在fosc/64或fosc/32,具体用那一种就取决于 PCON 寄存器中的 SMOD 位,如 SMOD 为 0,波特率为
focs/64,SMOD 为 1 ,波特率为 focs/32 。
二、方式 1 和方式3 的波特率
模式 1 和模式 3 的波特率是可变的,取决于定时器 1 或 2(对于 52 芯片)的溢出速率,就是说定时器 1 每溢出一次,串口
发送一次数据。
可以用以下的公式去计算:上式中如设置了 PCON 寄存器中的 SMOD 位为 1 时就可以把波特率提升 2 倍。
通常会使用定时器 1工作在定时器工作模式 2 下,这时定时值中的 TL1
做为计数, TH1 做为自动重装值,这个定时模式下,定时器溢出后, TH1 的值会自动装载到 TL1 ,再次开始计数,这样可以不用软件去干预,使得定时更准确。
在这个定时模式 2 下定时器 1 溢出速率的计算公式如下:溢出速率 =(计数速率 )/(256-TH1 初值 ) 溢出速率 =fosc/[12*(256-TH1 初值 )] 上式中的“计数速率”与所使用的晶体振荡器频率有关,在 51 芯片中定时器启动后会在每一个机器周期使定时寄存器 TH 的值加 1,一个机器周期等于十二个振荡周期,所以可以得知 51 芯片的计数速率为晶体振荡器频率的 1/12 ,一个 12M 的晶振用在 51 芯片上,那么 51 的计数速率就为 1M 。
通常用 11.0592M 晶体是为了得到标准的无误差的波特率,那么为何呢?计算一下就知道了。
如我们要得到 9600 的波特率,晶振为 11.0592M 和 12M ,定时器1 为模式 2,SMOD 设为 1 ,分别看看那所要求的 TH1 为何值。
代入公式: 11.0592M :
9600=(2 + 32) X ((11.0592M/12)/(256-TH1))
TH1=250
12M :
9600=(2 + 32) X ((12M/12)/(256-TH1))
TH1〜 249.49 上面的计算可以看出使用 12M 晶体的时候计算出来的 TH1 不为整数,而 TH1 的值只能取整数,这样它就会有一定的误差存在不能产生精确的 9600 波特率。
当然一定的误差是可以在使用中被接受的,就算使用 11.0592M 的晶体振荡器也会因晶体本身所存在的误差使波特率产生误差,但晶体本身的误差对
波特率的影响是十分之小的,可以忽略不计。