MSP430のためのUARTからSPIへのブリッジを容易にするためにASCIIをバイナリに変換する方法?


2

私は現在MSP430へのPCのためのコマンドがUARTを通して伝えられるプロジェクトに取り組んでいます。これらのコマンドは、SPIバスに書き込めるようにバイナリに変換する必要があります。

たとえば、PCからの 'a'はマイクロコントローラの0x61に変換されます。本当に必要なのは16進数 'a'です
PCからのASCII文字 'a' = 0x61 => 16進数0x0Aを変換する必要があります

質問 : ASCIIをバイナリに変換する最も簡単な方法は何ですか?私は "C"を使っています。


ASCIIコードは単なる数字です。 SPI接続用のプロトコルを定義しているのであれば、ブリッジにUSARTからSPIポートへのデータを単にエコーさせるのではないでしょうか。
Niall C.

1
私はあなたの質問を真剣に受け止めません。 ASCII文字はたった1バイトです - あなたは単にTXバッファ/ラインにこのバイトを置くことができます。どうしたの?またはあなたが提供しなかった詳細がありますか?

1
それで、あなたは16進数字 '0'、 '1' ... 'a' ... 'f'を表す文字をその数字の値(0x00、0x01 ... 0x0A ... 0x0F)に変換したいですか?
Niall C.

1
何が問題なのかはっきりしませんが、バイナリデータがASCIIの16進数として送信されるプロトコルのようなものを推測しますか?例えば値255のバイトはASCII "FF"として送信されるので(10進数)46、46はワイヤ上を移動しますか?詳細が必要です。

本当に簡単な方法、テーブル検索を忘れないでください。やり過ぎるかもしれませんが、入出力マッピングがすべてのケースに対して明確に定義されているのを見たことはありません。

回答:


4

PCからの入力は文字、すなわちASCII値である。これがどのように保存されるかを理解するために、を見てください。 ASCIIテーブル 。 「0」から「9」までの数字はASCIIコードで表されます。 0x300x39。大文字の「A」から「Z」は次のように表されます。 0x410x5A、および小文字の「a」から「z」 0x610x7A

あなたはもちろんのような機能を使用することができます sscanf@ JohnO'Mが示唆しているように。そのような機能( printfscanf、...)多くの機能を持っていますが、そのため多くのパワーとメモリが必要 [引用が必要] これは、マイクロコントローラにはあまり使いたくないことがよくあります。単純な代替方法は、3つの可能性のあるケース(0-9、A-F、またはa-f)を区別し、ASCIIコードから正しい数を引いて結果を得ることです。

if( (s >= 0x30) && (s <= 0x39)) {        // 0-9
    x = s - 0x30;
}
else {
    if( (s >= 0x41) && (s <= 0x46)) {    // A-F
        x = s - 0x37;
    }
    else {
        if( (s >= 0x61) && (s <= 0x66)) { // a-f
            x = s - 0x57;
        }
        else {                            // wrong input
            x = 0xFF;
        }
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.