通常情况下,8051系列单片机外接晶振频率一般是12MHz、24MHz、48MHz如图7-6-1,为什么会这样选取呢?从前面的章节已经介绍8051系列单片机的每12个时钟周期为一个指令周期,当8051系列单片机外接12MHz晶振时,指令周期=12/12MHz=1us;若外接24MHz晶振时,指令周期=12/24MHz=0.5us;若外接48MHz晶振时,指令周期=12/48MHz=0.25us。8051系列单片机外接能够被除尽的晶振,在使用单片机内部的定时器/计数器资源时作定时器使用时能够得到精确定时应用;当使用汇编语言编程时,可以清楚知道当前每一行代码执行的时间。
8051系列单片机外接能够被除尽的晶振即12MHz、24MHz、48MHz这些晶振时,波特率的精确性就得不到保证。
假若现在单片机外接的晶振为12MHz时,以T/C2作波特率发生器,根据波特率公式:
波特率=Fosc/2x16x(65536-t)
9600=12MHz/2x16x(65536-t)
t=65496.9375
“65496.9375”不是一个整数值,是一个带有小数点的数值。对于常用的8位、9位、11位一帧的数据接收与传输,最大的允许误差分别是6.25%、5.56%、4.5%。虽然波特率允许误差,但是这样通信时便会产生积累误差,进而影响数据的正确性。唯一的解决办法就是更改单片机外接的晶振频率,更改为常用于产生精确波特率的晶振如11.0592MHz、22.1184MHz。
假若现在单片机外接的晶振为11.0592MHz时,以T/C2作波特率发生器,根据波特率公式:
波特率=Fosc/2x16x(65536-t)
9600=11.0592MHz/2x16x(65536-t)
t=65500=0xFFDC
虽然使用11.0592MHz、22.1184MHz的晶振能够产生精确的波特率,但是用于系统精确的定时服务不是十分的理想。例如单片机外接11.0592MHz晶振时,指令周期=12/11.0592MHz≈1.085us,是一个无限循环的小数。当单片机外接22.1184MHz晶振时,指令周期=12/22.1184MHz≈0.5425us,也是一个无限循环的小数。
串口工作在方式1时分别采用T/C1和T/C2产生常用波特率初值表如下。
波特率 (11.0592MHz) | 初值 | 波特率 (12MHz) | 初值 |
TH1、TL1 (SMOD=0) | TH1、TL1 (SMOD=1) | TH1、TL1 (SMOD=0) | TH1、TL1 (SMOD=1) |
1200 | 0xE7 | 0xD0 | 1200 | 0xE5 | 0xCB |
2400 | 0xF3 | 0xE7 | 2400 | 0xF2 | 0xE5 |
4800 | 0xF9 | 0xF3 | 4800 | 0xF9 | 0xF2 |
9600 | 0xFC | 0xF9 | 9600 | 0xFC | 0xF9 |
14400 | 0xFD | 0xFB | 14400 | 0xFD | 0xFB |
19200 | 0xFE | 0xFC | 19200 | 0xFE | 0xFC |
波特率 (11.0592MHz) | 初值 | 波特率 (12MHz) | 初值 |
RCAL2H | RCAL2L | RCAL2H | RCAL2L |
1200 | 0xFE | 0xE0 | 1200 | 0xFE | 0xC8 |
2400 | 0xFF | 0x70 | 2400 | 0xFF | 0x64 |
4800 | 0xFF | 0xD8 | 4800 | 0xFF | 0xB2 |
9600 | 0xFF | 0xDC | 9600 | 0xFF | 0xD9 |
14400 | 0xFF | 0xE8 | 14400 | 0xFF | 0xE6 |
19200 | 0xFF | 0xEE | 19200 | 0xFF | 0xED |
如果大家想通过设置不同的晶振获取更加多的波特率的值,可以下载工具进行计算
关键字:单片机 波特率
引用地址:
8051单片机-波特率的研究
推荐阅读最新更新时间:2024-11-12 23:17
基于单片机控制的缓降器硬件机构及控制系统设计
本文介绍了一种基于单片机控制的缓降器硬件机构及控制系统.该系统以单片机机为系统的控制核心,结合光电式传感器技术实现了下降速度的测量,从而实现了缓降器的自给供电并能平稳运行.实验证明该缓降器设计满足了应用的需要。 1.引言 现代生活使人们的生活高层化,高层建筑为人们提供方便快捷的同时也给人们的安全带来隐患.缓降器可以将处于高层建筑物上的受困人员快速解救下来.但是,现有技术中的缓降器,有的结构比较复杂,使用中需要电源。 当事故发生时,高层建筑通常都会断电,使用电源的缓降器无法运行;结构复杂的缓降器,长期放置,非常容易出现故障.还有的缓降器使用操作复杂,对于非专业人员,往往不便使用.发生险情时,尤其是老人或小孩,容易惊慌,复杂的操
[单片机]
PIC16F877单片机内部EEPROM读写实例
;P IC 16F877 单片机 内部EEPROM读写实例**************************************************************************************** ; This is a program to test the function of reading&writting for EEPROM. ; You CAN OBS erve the value of register(30H--?) buy changing VALU and WRC_ . ; Notice that:it must be { ADDR+WRC_ =0ffh } ! ;
[单片机]
怎样制作AVR单片机ISP下载线
下面介绍利用Protel99se电路绘图软件和热转印技术制作这种下载线的方法和步骤。 一、设计ISP下载线 PCB文件利用Protel99se绘带0《自带AVR单片机ISP下载线》一文中的原理图1(为方便制作,可省略该图中的VDl)。并将图中各元件按附表所述进行封装选择。 原理图绘制完毕后,依次点击原理图编辑器中的Tools(工具)/Up-date PCB(更新原理图)菜单,自动生成下载线PCB文件。在编辑下载线PCB文件时,可先按图1所示规划PCB板的大小和布局PCB板上的元件,然后让系统自动布线(为减小PCB尺寸,采用双面布线),最后对自动布线作适当调整,经过手动调整布线后的PCB板如图2所示。 二、分图层打印 P
[单片机]
中颖单片机双核(DSP和MCU)SH99F100基于工业控制中的应用
双核(DSP和MCU)-工业控制中的应用 SH99F100是一款双核(DSP和MCU)芯片,适用于工业控制场合,如电机调速、变频电源等。MCU可以用来处理开关量、输入输出以及通讯,而DSP只需专注于控制算法的运算。 DSP的架构由三个并行的计算单元(ALU,MAC,SHIFTER)、两个独立的地址发生器(DAG)和一个强大的程序序列发生器(PSQ)组成。计算单元提供了所有处理器能够提供的计算功能,包括单周期乘/累加,位操作,移位操作等。双数据地址发生器使得处理器能够在一个周期内从两个数据存储区(Data Memory和Program Memory)同时取出两个数据。程序序列发生器实现了所有指令的单周期操作,快速的中断响应以及嵌套的
[单片机]
AT89S52单片机对太阳能发电系统参数测试仪的设计
引 言 为了确保太阳能发电系统能够正常的工作,需要对太阳能发电系统的各项环境参数进行测量,从而有效地控制其运行。本文介绍了一种基于单片机的太阳能参数测试仪,提供了3种参数的测量功能和通信接口,以及2种供电方式,既可作为手持设备使用,又能安装在发电系统中,具有较高的实用价值。 1 硬件电路设计 1.1 总体结构 该测试仪以AT89S52单片机为核心,外接温湿度传感器SHTll、照度传感器TSL2561、四位共阴数码管、RS485总线通信接口以及显示切换按键。单片机上电工作后,对当前温度、湿度、光强度进行实时测量,通过按键切换将测得的3种参数通过LED数码管进行轮流显示;此外,还可以通过RS485总线与PC机进行通信,将参数值传送
[单片机]
基于MSP430单片机的无线充电器设计
引言 目前,手机、MP3和笔记本 电脑等便携式电子设备进行充电主要采用的是一端连 接交流电源,另一端连接便携式电子设备充电电池的传统充电方式。这种方式有很多不利 的地方,如频繁的插拔很容易损坏接头,也可能带来触电的危险等。因此,非接触式感应充电器在上个世纪末期诞生。凭借其携带方便、成本低、无需布线等优势迅速受到各界关注。实现无线充电,能量传输效率高,便于携带成为充电系统的研究方向之一 。本设计就是一个由能量发送单元和能量接收单元两大部分组成,利用电磁感应原理 实现电能无线传递的充电器。 1 硬件系统设计 1.1 器件选择 本无线充电系统的设计是用线圈耦合方式传递能量,使接收单元接收到足够的电能,以保证
[电源管理]
avr单片机驱动max7219的程序
#include iom16v.h #include macros.h #define uchar unsigned char #define uint unsigned int //定义输出io口 #define Y1_OUT DDRC|=BIT(5); #define Y1_H PORTC|=BIT(5); #define Y1_L PORTC&=~BIT(5); #define Y2_OUT DDRD|=BIT(6); #define Y2_H PORTD|=BIT(6); #define Y2_L PORTD&=~BIT(6); #define Y3_OUT DDRD|=BIT(7); #define Y3_H
[单片机]
89C52单片机之点阵使用
这次是要通过8*8点阵显示出万代兴三个字,这里每一个汉字的编码都需要自己手写在本子上,然后根据点阵情况写出对应的编码,是个体力活。 程序: #include reg52.h unsigned char code taba ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char code tabb ={0x81,0x41,0x21,0x1f,0x05,0x85,0xfd,0x01, 0x08,0xfc,0x03,0x04,0x1f,0x24,0x45,0xC6, 0x89,0x4a,0x2c,0x0f,0x2c,0
[单片机]