单片机自动设置波特率编程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实现该方法的软件 源代码见本刊网络补充 版 (htt p:// www.dpj.com. cn)。
5 波特率误差分析 及实验结果
(1) 串行通信误差 要求
实践表明,当波特 率的相对误差小于 4.5% 时, 不会影响数据的正 确接收。 一般要保证传 输的可靠性, 要求误差 不大于 2.5%。
开始
清空缓冲区
4 C2+ 5 C2-
R2O 9 RXD R2I 8 XRXD T2O 7 XTXD T2I 10 TXD
J1 DB9
5 9 4 8 3 7 2 6 1
图1 硬件原理图
75 2003.6 Mi crocontrol lers & Emb edded Systems
经验交流
EXPERIENCE EXCHANGE
停止定时器T 2
设置定时初值
P3.0=0? N Y
启动定时器T 2
P3.0=1? N Y
停止定时器T2
读取计数值
返回 图3 获取8 位数据的
定时计数值
(2) 误差来源
开始
按照本文原理设置波特 率, 则误差来源有四 :
获取8位周期数
◇ 定时器 T2启动延迟和 停止点的滞后造成的 误差Δ T1;
周期数× 3 除以64
15 INT1/P3.3 ALE/PROG 33
14 INT0/P3.2
PSEN 32
RST VCC
10 RST 35 EA/VPP
RD/P3.7 19 WR/P3.6 18
C3 2.2µF
C4 2.2µF
U3
MAX232CPE
1 +
C1+
V+ 2
C5 2.2µF +
VCC
3 C1-
V- 6
C6 + 2.2µF
表 1
1 位计数 (单片机检测)
定时 时间常数 (单片机计算)
16719 6131 3066 1 53 1 764 383 191 127 95 47 31 31 15
59266 63236 64386 64961 65248 65392 65464 65488 65500 65518 65524 65524 65530
本文的波特率设置原理,既适合 12时钟的单片 机,也适合 6 时钟的单片机。软件经过修改,很容 易用于其它系列单片机中, 尤其在应用程序下载
( IA P)软 件 时 ,不
单片机实际
波特率/ bps (计算值)
PC 机与单片机实际 通信波特率误差/%
(计算)
愧为一种好的设 计思路。
110.239235 300.521729 601.043457 1202.086914 2400 4800 9600 14400 19200 38400 57600 57600 115200
选 PC 机 波特率/bps (选用)
110 300 600 1200 2400 4800 9600 14400 19200 38400 56000 57600 115200
结 语
PC 机实际 波特率/bps (计算值)
110.028656 300 600 1200 2400 4800 9600 14400 19200 38400 57600 57600 115200
16
osc
单片机 AT89C52为 12 分频指令系统,所以其机
器周期为
机器周期 = 12/ fosc
( 3)
我们可以很容易得到单片机接收 1位所需要的
机器周期, 假定为 NUM, 则由式 (2)、(3) 得
U2 AT89C52-20JG
2 P1.0 3 P1.1 4 P1.2 5 P1.3 6 P1.4 7 P1.5 8 P1.6 9 P1.7
版社, 1992
3 徐爱钧,等. 单片机高级语言C51应用程序
设计. 北京:电子工业出版社, 1998
(收稿日期 :2002-12-05)
77 2003.6 Mi crocontrol lers & Emb edded Systems
0.191386 0.173910 0.173910 0.173910 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
参考文献
1 余永权. A T M E L 8 9 系列 Flash 单片机原理 及应用. 北京:电 子工业出版社,1997
2 陈汝全,等. 单片机实用技术. 北 京:电 子 工 业 出
2400、4800、9600、19200、38400、56000 及 115200 向
单片机发数 0x01,单片机都能正确返回,可见波特
率常数自动设置成功。
实验结果如表 1 所列。
◇ 假设 PC和单片机的晶体振荡器的频率误差
为 0;
◇ PC 机的实际波特率 =1.8432 MHz/(16 ×波特
率 因 子 );
◇ 定时器计数本身有一
四舍五入运算
个机器周期的误差Δ T 2= ± 1;
6 5 5 3 6-计算值
◇ 计算 X16 定时常数时, 由于 8 位单片机计算
产生的误差Δ X16; ◇ 晶体振荡器本身频率
返回 图4 计算定时时间
常数
的误差。
由式 (5) 知道, Δ X = Δ X ’ + (Δ T1+
16
X16 )
? 1????
× 100%(7)
由式(7)知道,X16 的值越大,波特率相对误
差越大 ;X16 的值越小,波特率相对误差越小。
(4) 实际测试结果及误差
实验条件:单片机为 AT89C52,晶体振荡器的
频率为 22.1184 MHz。
实验方法:用 PC机分别以 110、300、600、1200、
NUM × 12/ f = 32 (65536 - X ) / f 厖 (4)
osc
16
osc
由式 (4) 可得, 波特率定时时间常数为
X16 = NUM × 3/ 8
( 5)
由此,得到单片机接收 1 位的机器周期数
NUM 。
3 自动检测主机信息的方法
不失一般性,假定串行通信的字符协议为 1 位 起始位,8 位数据位,无奇偶校验位,1 位停止位。
RXD TXD
11 RXD/P3.0 13 TXD/P3.1
XTAL1 21 XTAL1 XTAL2 20 XTAL2
17 T1/P3.5 16 T0/P3.4
P2.0/A8 24 P2.1/A9 25 P2.2/A10 26 P2.3/A11 27 P2.4/A12 28 P2.5/A13 29 P2.6/A14 30 P2.7/A15 31
◇ 单片机的实际波特率=22.1184 MHz/32(65536
- X16 ); ◇ PC 机与单片机实际通信 bps 误差 =( PC机实
际 bps - 单片机实际 bps)/ PC 机实际 bps。
由表 1可知,该方法的波特率误差均小于2.5%,
能充分保证数据的正确通信。
76
2003.6
EXPERIENCEEXCHANGE 经验交流
如 果 主 机( PC机 )发 给 单 片 机 01H( 十 六 进 制 ), 则单片机 P3.0 接收数据如图 2 波形所示。起始位开 始时, 启动定时器 T2; 高电平来到时,关闭定时 器 T2, 则计数值就为 NUM。
TR2=1 TR2=0
图2 确定NUM的示意图
4 软件实现
这里给出获取定时 常 数 的 流 程 图 ,如 图 3和 图 4所示。该流程图是按 主机发 0x01 来设计的。
EXPERIENCEEXCHANGE 经验交流
单片机从机的波特率自适应设置※
■ 航天信息股份有限公司 严天华 周辉
我 们 在 设 计 单 片 机 串 行 通 信 程 序 时 ,一 般 用 其 晶体振荡器的频率来计算具体的波特率时间常数。 当 晶 体 振 荡 频 率 改 变 时 ,其 底 层 软 件 也 必 须 跟 着 修 改 ,不 免 有 些 麻 烦 。为 此 ,笔 者 经 过 实 践 ,找 到 一 种可以两全其美的办法 : 从机侦测主机位信息并 自动设置与主机同样的波特率, 以适应主机。 其 一 ,可 以 不 考 虑 晶 体 振 荡 频 率;其 二 ,从 机 可 以 自 动适应主机的波特率, 从而与主机正常通信。
由定时器 2 工作原理知道,C/T2 = 0,TR2 = 0, 则其加 1 计数,其计数速率为 f /12,每加 1 需要的
osc
时间为 12/f , 刚好就是一个机器周期。 所以, 只 osc
要 在 传 输 数 据 的 某 位 开 始 处 启 动 定 时 器 ,在 该 位 传 输 结 束 时 停 止 计 数 器 ,然 后 获 取 该 范 围 的 计 数 值 , 就是式 (5) 中的 NUM。
最常用。T2 的波特率发生方式类似于常数自动重
装入方式,用 X16 代替(RCAP2H、RCAP2L),则串 行口方式 1、 3 的波特率公式为
波特率 = fosc / 32(65536 - X16 )
( 1)
由式(1)可得,单片机每接收 1位需要的时间
为
接收 1 位的时间 = 32(65536 - X ) / f (2)
16
Δ T2) × 3/8。
(3) 误差分析计算
波特率(实际) = fosc / 32 [65536 - ( X16 ±Δ X16)] (6) 波特率相对误差 =(波特率(实际) - 波特率(理论) )/ 波特率(理论) × 100%
波特率相对误差 =
????1 ? ?
1 X16 /(65536 ?
为便于说明,以 AT89C52 为实例,AT89C52 为 从机, PC 机为主机。
1 硬件原理图
电原理如图 1 所示。DB9 接到 PC机的串口上; 晶体振荡器频率可选用 11.0592 MHz、14.745百度文库 MHz。
2 自适应设置理论原理
AT89C52 的串行口有 4 种工作方式, 方式 1、3
P0.0/AD0 43 P0.1/AD1 42 P0.2/AD2 41 P0.3/AD3 40 P0.4/AD4 39 P0.5/AD5 38 P0.6/AD6 37 P0.7/AD7 36
VCC
+ C7 10µF RST
R1 8.2kO
XTAL1
C1 30pF
X2 XTAL2
C2 30pF
22.1184MHz
5 波特率误差分析 及实验结果
(1) 串行通信误差 要求
实践表明,当波特 率的相对误差小于 4.5% 时, 不会影响数据的正 确接收。 一般要保证传 输的可靠性, 要求误差 不大于 2.5%。
开始
清空缓冲区
4 C2+ 5 C2-
R2O 9 RXD R2I 8 XRXD T2O 7 XTXD T2I 10 TXD
J1 DB9
5 9 4 8 3 7 2 6 1
图1 硬件原理图
75 2003.6 Mi crocontrol lers & Emb edded Systems
经验交流
EXPERIENCE EXCHANGE
停止定时器T 2
设置定时初值
P3.0=0? N Y
启动定时器T 2
P3.0=1? N Y
停止定时器T2
读取计数值
返回 图3 获取8 位数据的
定时计数值
(2) 误差来源
开始
按照本文原理设置波特 率, 则误差来源有四 :
获取8位周期数
◇ 定时器 T2启动延迟和 停止点的滞后造成的 误差Δ T1;
周期数× 3 除以64
15 INT1/P3.3 ALE/PROG 33
14 INT0/P3.2
PSEN 32
RST VCC
10 RST 35 EA/VPP
RD/P3.7 19 WR/P3.6 18
C3 2.2µF
C4 2.2µF
U3
MAX232CPE
1 +
C1+
V+ 2
C5 2.2µF +
VCC
3 C1-
V- 6
C6 + 2.2µF
表 1
1 位计数 (单片机检测)
定时 时间常数 (单片机计算)
16719 6131 3066 1 53 1 764 383 191 127 95 47 31 31 15
59266 63236 64386 64961 65248 65392 65464 65488 65500 65518 65524 65524 65530
本文的波特率设置原理,既适合 12时钟的单片 机,也适合 6 时钟的单片机。软件经过修改,很容 易用于其它系列单片机中, 尤其在应用程序下载
( IA P)软 件 时 ,不
单片机实际
波特率/ bps (计算值)
PC 机与单片机实际 通信波特率误差/%
(计算)
愧为一种好的设 计思路。
110.239235 300.521729 601.043457 1202.086914 2400 4800 9600 14400 19200 38400 57600 57600 115200
选 PC 机 波特率/bps (选用)
110 300 600 1200 2400 4800 9600 14400 19200 38400 56000 57600 115200
结 语
PC 机实际 波特率/bps (计算值)
110.028656 300 600 1200 2400 4800 9600 14400 19200 38400 57600 57600 115200
16
osc
单片机 AT89C52为 12 分频指令系统,所以其机
器周期为
机器周期 = 12/ fosc
( 3)
我们可以很容易得到单片机接收 1位所需要的
机器周期, 假定为 NUM, 则由式 (2)、(3) 得
U2 AT89C52-20JG
2 P1.0 3 P1.1 4 P1.2 5 P1.3 6 P1.4 7 P1.5 8 P1.6 9 P1.7
版社, 1992
3 徐爱钧,等. 单片机高级语言C51应用程序
设计. 北京:电子工业出版社, 1998
(收稿日期 :2002-12-05)
77 2003.6 Mi crocontrol lers & Emb edded Systems
0.191386 0.173910 0.173910 0.173910 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
参考文献
1 余永权. A T M E L 8 9 系列 Flash 单片机原理 及应用. 北京:电 子工业出版社,1997
2 陈汝全,等. 单片机实用技术. 北 京:电 子 工 业 出
2400、4800、9600、19200、38400、56000 及 115200 向
单片机发数 0x01,单片机都能正确返回,可见波特
率常数自动设置成功。
实验结果如表 1 所列。
◇ 假设 PC和单片机的晶体振荡器的频率误差
为 0;
◇ PC 机的实际波特率 =1.8432 MHz/(16 ×波特
率 因 子 );
◇ 定时器计数本身有一
四舍五入运算
个机器周期的误差Δ T 2= ± 1;
6 5 5 3 6-计算值
◇ 计算 X16 定时常数时, 由于 8 位单片机计算
产生的误差Δ X16; ◇ 晶体振荡器本身频率
返回 图4 计算定时时间
常数
的误差。
由式 (5) 知道, Δ X = Δ X ’ + (Δ T1+
16
X16 )
? 1????
× 100%(7)
由式(7)知道,X16 的值越大,波特率相对误
差越大 ;X16 的值越小,波特率相对误差越小。
(4) 实际测试结果及误差
实验条件:单片机为 AT89C52,晶体振荡器的
频率为 22.1184 MHz。
实验方法:用 PC机分别以 110、300、600、1200、
NUM × 12/ f = 32 (65536 - X ) / f 厖 (4)
osc
16
osc
由式 (4) 可得, 波特率定时时间常数为
X16 = NUM × 3/ 8
( 5)
由此,得到单片机接收 1 位的机器周期数
NUM 。
3 自动检测主机信息的方法
不失一般性,假定串行通信的字符协议为 1 位 起始位,8 位数据位,无奇偶校验位,1 位停止位。
RXD TXD
11 RXD/P3.0 13 TXD/P3.1
XTAL1 21 XTAL1 XTAL2 20 XTAL2
17 T1/P3.5 16 T0/P3.4
P2.0/A8 24 P2.1/A9 25 P2.2/A10 26 P2.3/A11 27 P2.4/A12 28 P2.5/A13 29 P2.6/A14 30 P2.7/A15 31
◇ 单片机的实际波特率=22.1184 MHz/32(65536
- X16 ); ◇ PC 机与单片机实际通信 bps 误差 =( PC机实
际 bps - 单片机实际 bps)/ PC 机实际 bps。
由表 1可知,该方法的波特率误差均小于2.5%,
能充分保证数据的正确通信。
76
2003.6
EXPERIENCEEXCHANGE 经验交流
如 果 主 机( PC机 )发 给 单 片 机 01H( 十 六 进 制 ), 则单片机 P3.0 接收数据如图 2 波形所示。起始位开 始时, 启动定时器 T2; 高电平来到时,关闭定时 器 T2, 则计数值就为 NUM。
TR2=1 TR2=0
图2 确定NUM的示意图
4 软件实现
这里给出获取定时 常 数 的 流 程 图 ,如 图 3和 图 4所示。该流程图是按 主机发 0x01 来设计的。
EXPERIENCEEXCHANGE 经验交流
单片机从机的波特率自适应设置※
■ 航天信息股份有限公司 严天华 周辉
我 们 在 设 计 单 片 机 串 行 通 信 程 序 时 ,一 般 用 其 晶体振荡器的频率来计算具体的波特率时间常数。 当 晶 体 振 荡 频 率 改 变 时 ,其 底 层 软 件 也 必 须 跟 着 修 改 ,不 免 有 些 麻 烦 。为 此 ,笔 者 经 过 实 践 ,找 到 一 种可以两全其美的办法 : 从机侦测主机位信息并 自动设置与主机同样的波特率, 以适应主机。 其 一 ,可 以 不 考 虑 晶 体 振 荡 频 率;其 二 ,从 机 可 以 自 动适应主机的波特率, 从而与主机正常通信。
由定时器 2 工作原理知道,C/T2 = 0,TR2 = 0, 则其加 1 计数,其计数速率为 f /12,每加 1 需要的
osc
时间为 12/f , 刚好就是一个机器周期。 所以, 只 osc
要 在 传 输 数 据 的 某 位 开 始 处 启 动 定 时 器 ,在 该 位 传 输 结 束 时 停 止 计 数 器 ,然 后 获 取 该 范 围 的 计 数 值 , 就是式 (5) 中的 NUM。
最常用。T2 的波特率发生方式类似于常数自动重
装入方式,用 X16 代替(RCAP2H、RCAP2L),则串 行口方式 1、 3 的波特率公式为
波特率 = fosc / 32(65536 - X16 )
( 1)
由式(1)可得,单片机每接收 1位需要的时间
为
接收 1 位的时间 = 32(65536 - X ) / f (2)
16
Δ T2) × 3/8。
(3) 误差分析计算
波特率(实际) = fosc / 32 [65536 - ( X16 ±Δ X16)] (6) 波特率相对误差 =(波特率(实际) - 波特率(理论) )/ 波特率(理论) × 100%
波特率相对误差 =
????1 ? ?
1 X16 /(65536 ?
为便于说明,以 AT89C52 为实例,AT89C52 为 从机, PC 机为主机。
1 硬件原理图
电原理如图 1 所示。DB9 接到 PC机的串口上; 晶体振荡器频率可选用 11.0592 MHz、14.745百度文库 MHz。
2 自适应设置理论原理
AT89C52 的串行口有 4 种工作方式, 方式 1、3
P0.0/AD0 43 P0.1/AD1 42 P0.2/AD2 41 P0.3/AD3 40 P0.4/AD4 39 P0.5/AD5 38 P0.6/AD6 37 P0.7/AD7 36
VCC
+ C7 10µF RST
R1 8.2kO
XTAL1
C1 30pF
X2 XTAL2
C2 30pF
22.1184MHz