logo资料库

单片机从机的波特率自适应设置.pdf

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