:
1..在 单 片 机 与 PC及 通 信 时,低 速 率 时 (2400bps)很 正 常,提 高 速 率 则 遇 到 以 下 问 题 :PC机 向 单 片 机 发 送 数 据 没 有 问 题, 但 是 单 片 机 向 PC机 发 送 时 产 生 误 码, 速 率 越 高 , 误 码 越 多, 加 大 PC机 串 口 缓 冲 区 并 且 加 上 校 验 都 不 行, 提 高 接 收 线 程 优 先 级 也 不 行 , 望 各 位 高 手 指 点?
答:PC机 的 波 特 率 是 将 1.8432MHz的 时 钟 输 入 频 率 采 用 分 频 的 办 法 来 得 到 要求 的 波 特 率 , 分 频 所 用 的 除 数 是 由 CPU分 两 次 写 入 除 数 锁 存 器 的 高 位 和 低 位 , 除 数=1843200/(波 特 率 X16) 。 单 片 机 ( 以 8031为 例 , 串 口 工 作 方 式 3) 波 特 率 的 设 置 由 定 时 器 1置方 式 2自 动 重 新 装 入 , 波 特 率 =2^SMOD× 时 钟 振 荡 频 率 /(12× ( 2^N-TH1)) /32。 由 于 单 片 机 晶振 频 率 不 是 一 些 常 用 波 特 率 的 整 数 倍 , 分 频 后 有 误 差 , 如 采 用 特 殊 晶 振 如 11.059MHz, 则 可 降低 误 差 , 提 高 通 信 速 率 。
附 : 波 特 率 误 差
波特率 PC除数值 8031TH1 误 差
110 04 17 72
0.00%
600 00 C0 E6
0.16%
1200 00 60 F3
0.16%
2400 00 30 F9
6.09%
3600 00 20 FC
8.51%
4800 00 18 FD
8.51%
2 用
MSCOMM
控件与单片机通讯出现错误
IDS_FRAMEERROR
和
IDS_BREAKRECEIVED
如
何
在
VC++中
用MSCOMM控
件
与
单
片
机
通
讯
,
我
在
编
程
时
老
出
错
:
单
片
机
方
式
3:
发
送
设
为
:
MOV TMOD,#20H
MOV TL1,#0FDH
MOV TH1,#0FDH
MOV SCON,#0C0H
SETB TR1
接
收
时
设
为
mov tmod,#20h
mov tl1,#0fdh
mov th1,#0fdh
mov scon,#0d0h
setb tr1
PC上
MSCOMM:
setting:9600,n,8,1
handshaking: nohandshaking
通
讯
时
出
现
错
误
:
IDS_FRAMEERROR,
IDS_BREAKRECEIVED
希
望
能
得
到
您
的
帮
助
。
根
据你
的
单 片
机 的
代 码
可 以
看 出
, 你
所 用
的 单
片 机
是 Intel8031
兼 容
单 片
机 。
根 据
SCON的
设置
,
你 采
用 的
是 方
式 三
, 在
方 式
三 是
8位
数据
,
1位
校验
位
, 1位停
止
位 ,
如 果
晶 振
是 11.0592MHz,
波 特
率 是
9600。
在
PC机
上你
的
设 置
是 波
特 率
9600,
8
位 数
据 ,
无 校
验 位
, 1位停
止
位 。
由 于
帧 长
不 同
, 在
单 片
机 上
是 11位(
加
一 位
起 始
位 )
, 在
PC机
上是
10位,
因
此 出
现 帧
错 误
。 因
此 改
动 PC机为
9600,
e,8,1或
9600
, o,8,1
。 或
者 改
单 片
机 SCON为
0x50。
|