設計中の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。