PIC−USBIO using BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第54回]
●PICUSBIO−03(3)ビット列を補正したプログラム
前回はPICUSBIO−03とND80Z3.5を接続してSTROBE/READY方式でデータの入出力テストを行ないました。
接続には[第52回]で作成した16pin−26pinフラットケーブルコネクタを使いましたが16pin側と26pin側の信号配列が一致していないため出力した通りのデータが相手側に伝わりません。
今回はその信号配列を補正して相手に正しいデータが伝わるようにプログラムを直します。
ビット列の補正はND80Z3.5側のプログラムで行ないます。
下は補正したあとのプログラムです。
70行〜90行で補正を行なっています。
82C55のBポートから出力されるデータとPICUSBIO−03のPORTCに入力されるデータの関係は下のようになっています。
Bポート B7 B6 B5 B4 B3 B2 B1 B0
PORTC C6 C7 C4 C5 C2 C3 C0 C1
この関係を見るとBポートの偶数ビットを左にシフトし、奇数ビットを右にシフトするとPORTCのビット並びに一致することがわかります。
上のプログラムでは70行で偶数ビットをマスクしてそれを左にシフトしています。
整数値を2倍するともとの値が左にシフトします。
80行では奇数ビットをマスクしてそれを右にシフトしています。
整数値を2で割るともとの値が右にシフトします。
90行ではそのようにして得た2数を合わせることで目的の数を得ています。
PICUSBIO−03の側のプログラムは前回と同じです。
プログラムを実行しました。
PICUSBIO−03の側の画面です。
ND80Z3.5側のプログラムで出力データの値を補正したので1のビットが右から左にきれいにシフトしています。
こちらはND80Z3.5の側の画面です。
右側の値についてはまだ補正していませんのでPICUSBIO−03からエコーバックされた値がこちらから出力した値(左側)と一致していません。
最後の仕上げとしてその部分も補正します。
PICUSBIO−03の側のプログラムも直します。
値の補正はND80Z3.5のプログラムで行います。
こちらのプログラムではPORTCから入力した値の下位4ビットにシフトした1のビットがある期間はその下位4ビットをPORTBの上位4ビットから出力し、PORTCから入力した値の上位4ビットにシフトした1のビットがある期間はその上位4ビットをそのままPORTBの上位4ビットから出力するようにします。
こうすることでつねに1のビットを含む4ビットの値がエコーバックされます。
50行と60行でその変更を行なっています。
ND80Z3.5側のプログラムです。
PICUSBIO−03のPORTBから出力されるデータと82C55のCポートに入力されるデータの関係は下のようになっています。
PORTB B7 B6 B5 B4
Cポート C1 C0 C3 C2
この関係を見るとCポートの下位4ビットのうちの下位2ビット(C1、C0)を左に2ビットシフトし、上位2ビット(C3、C2)を右に2ビットシフトするとPORTBのビット並びに一致することがわかります。
上のプログラムでは140行で下位2ビットをマスクしてそれを左に2回シフトしています(4倍する)。
整数値を4倍するともとの値が左に2ビットシフトします。
150行では上位2ビットをマスクしてそれを右に2回シフトしています(4で割る)。
整数値を4で割るともとの値が右に2ビットシフトします。
160行ではそのようにして得た2数を合わせることで目的の数を得ています。
プログラムの実行結果です。
左側の出力した値と右側のエコーバックされた値が一致しました。
PIC−USBIO using BASIC[第54回]
2022.9.14upload
前へ
次へ
ホームページトップへ戻る