BASCOMでMSBとLSBの入れ替え

設計中のI/Oボードで、ワードデータのMSB(最上位)とLSB(最下位)の入れ替えが必要になりました。

出力するデータは10ビットで、

0000 0000 0000 0001 の下10ビットを

0000 0010 0000 0000 の様に変換。

わかりやすく書くと

0000 0012 3456 7890 を

0000 0009 8765 4321 の並びとしたい。(実際にはバイナリなので数値は0か1です)

 

変数Sindataとport_dataは、共にワードで宣言しておいて、

port_dataに出力データが入っています。

(バイナリで、例えば 0000 0010 0000 0000 )

Sindata = 0                   ‘念のために出力する変数をクリアしておき

For I = 0 To 9                  ’10bitのデータを入れ替え

If Port_data.i <> 0 Then

Set Sindata.9 -i

End If

Next I

を実行することで、出力データ Sindata の中には

0000 0000 0000 0001 が入ります。これをシリアル-パラレル変換のICに送ることで、今までとは逆の並びとなります。

10bitの変換にかかる時間を測ったところ、約58uS(マイクロ秒)でした。

設計中のボードでコネクタの並びが左右逆になったため、今までのソフトをなるべく変更したくなかっただけです・・・。

追記)AVRのクロックは16MHz。