【问题标题】:Sending a string and hexidecimal to the comport将字符串和十六进制发送到 comport
【发布时间】:2011-05-22 15:50:27
【问题描述】:

我正在尝试将字符串“QZ1”发送到 comport;但是接收单元的手册要求“发送到接收器的每个命令字符串必须以 {*}(hex 2A) 开头并以回车 {cr}(hex 0D) 结束。”我经历了许多不同的迭代,但都没有成功。

是否有人可以指导我编写方向,了解如何最好地将字符串发送到以 {*}(hex 2A) 开头的字符串并以回车 {cr}(hex 0D) 结尾的 comport?

【问题讨论】:

  • comport 是什么?
  • 输出时,comport(正式名称:COM 端口)接受来自程序的一个 8 位字符,并将其作为一串位在单个输出线上发送,低位在前。在输入时,它从远程来源的线路读取传入的位串,将这些位收集到一个 8 位字符中,然后以这种形式将其传递给程序。所以它的输出工作是序列化并发送一个 8 位字符;并在输入上接收和并行化一个 8 位字符。 COM 端口通常包含一个全双工 UART(通用异步收发器)。 Intel 8251 是最早的 UART 之一。
  • 感谢您的帮助皮特。不幸的是,当我将字符串( _XMR3Comport.Write("*SV\r") )写入 comport 时,接收器挂起。手册说“终止 {cr} 必须结束每个命令,即使多个命令被背靠背发送。”虽然我不能确定,但​​我想知道接收器是否正在寻找十六进制的回车符并且不识别回车符字符串值“\r”。是否有任何其他格式可以将字符串写入 comport?再次非常感谢,皮特。
  • 皮特 - 你是对的。事实证明,我错误地设置了 comport Handshake,一旦我将其更改为适当的设置,一切都很好。谢谢你的帮助。比尔

标签: string serial-port hex


【解决方案1】:

是的,从字符转换到十六进制表示再转换回来可能会造成混淆。这是该怎么做。不要担心医生会说“十六进制这个和十六进制那个”。只是

  1. 发送字符'*'
  2. 发送字符“Q”
  3. 发送字符“V”
  4. 发送字符“\r”作为回车符

因此,您将存储在 C 字符串中:“*QV\r”并从中发送。

HTH。如果没有,请多问一些。

【讨论】:

    【解决方案2】:

    据我所知,您只需在要发送的字符串中添加 2 个字节,例如 hello 将更改为 *hello\r 请注意,2A 是 ascii 字符 * 的十六进制,charmap 中 \r 的 0D 表示

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 2019-02-21
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 2021-01-28
      相关资源
      最近更新 更多