16bitを上位8bit,下位8bitに分ける,2つの8bitを16bitに結合する

題名のまんまですが、16bitを上位8bit、下位8bitに分ける方法と、逆に、2つの8bitを16bitに結合する方法についてのメモです(^^) 用途 シリアル通信(UART)の送受信単位は1文字=1byte(8bit)なので、マイコンで16bitで定義した値を上位8bit、下位8bitに分けて送信したい。(PC側で16bitに結合して表示) 1byte(8bit)で受信したデータをマイコンで16bitに結合して、値を得たい。 16bitを上位8bit、下位8bitにわける やっていることは以下です。 上位8bitを抽出 : 右に8bitシフト(下位8bitにシフト) 下位8bitを抽出 : 0x00FFと”&”(アンド)をとる // 2byte(16bit)を上位8bit,下位8bitにわける unsigned short a,bH,bL // 2byte(16bit)で宣言 // bH : aの上位8bitを入れる // bL : aの下位8bitを入れる a = 0x4F1A; // 適当な値(2byte) // aの上位8bitをbHに入れる bH = a >> 8; // 右に8bitシフト(下位8bitにシフト) // bH = 0x004F // aの下位8bitをbLにいれる bL = a & 0x00FF; // 0x00FFと&をとる // bL = 0x001A 上位8bitの抽出 a = 0x4F1Aのように、適当な値を16進数で定義しました。 2進数で表現すると、a = 0b 0100 1111 0001 1010 (0bは2進数の意味)...

2020/03/15 · Last updated on 2021/10/19 · 2 min · 237 words

アスキーコード変換 シリアル通信

以下の記事で紹介しているTiのマイコンはC言語で書かれています。 というわけでC言語の勉強もしているわけですが、せっかくなのでわかった内容も確認のための書いてみようと思います。 今回はPCとシリアル通信する際に、アスキーコード変換が必要だったので、そのことについて記載します(^^) これはCに限った話ではないですが、Cの勉強の一環として。。。 環境 Windows10 Pro バージョン1809 64bit Tera Term v4.105(19/12/07) やったこと Tera TermにCPU温度を表示させる際に、アスキーコード変換した。 ことの発端 TiのこのマイコンにはADコンバータの一つが内部の温度センサーにつながっていて、CPUのジャンクション温度を測定することができます。 このCPU温度をPCのシリアルモニター(Tera Term)に表示させようとしたところ、アスキーコード変換されて、よくわからない文字になってしまった。ということがきっかけです。 プログラム // 宣言 unsigned short DEG; // shortは16bit 温度は正の値しか無いとしてunsignedとしています unsigned short DEGTen; // DEGの10の位 整数型で定義 unsigned short DEGone; // DEGの1の位 unsigned short DEGTenASCII; // DEGの10の位をアスキーコード変換した値 unsigned short DEGoneASCII; // DEGの1の位をアスキーコード変換した値 DEG = 47; // DEGはCPU温度で仮に47℃とします // 各桁の値の抽出 DEGTen = DEG / 10; DEGone = DEG % 10; // アスキーコード変換 DEGTenASCII = DEGTen + 0x30; // これをTera Termでみると「4」と表示される DEGoneASCII = DEGone + 0x30; // これをTera Termでみると「7」と表示される 説明 Tera Termにはアスキーコード表の文字が表示されます。...

2020/02/29 · Last updated on 2020/03/07 · 2 min · 386 words