PIC−USBIO using BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第49回]
●PICUSBIO−10(2)12ビットのデータ出力プログラム
今までのテストプログラムは複数のI/Oポートに同時に同じデータを出力するものでした。
それが簡単だったのでそのようにしてきたのですが、前回のプログラムの場合は同じデータといってもCポートは4ビットが出力で4ビットが入力ですから半分のデータしか出力できません。
それはそれで一応のテストプログラムにはなっていますからよろしいのですけれど。
もう少し面白いプログラムにできないものか。
そのように考えて思いついたのは4ビット+8ビットを合わせて12ビットのデータにしてみたら面白いのでは、ということでした。
基本的には今までと同じでビット0から始まって1のビットを左シフトさせて01→02→04→08→10→20→40→80とするのですが、今までならここで01に戻るところをCポートを上位4ビットとみなしてCポートから01→02→04→08と出力することにすると、12ビットのデータを左シフトさせていることになります。
それは面白いではないか。
ということでさっそくプログラムを書き始めたのですが、すぐに詰まってしまいました。
これはだめだ。
どこがだめなのか。
今までのプログラムは出力側と入力側の実行速度の違いによって同じ値が複数回入力されてしまうことを回避するために、前回と同じ値ならばその値は捨てて再度読み直す、というようにプログラムしていました。
ところが今回は下位側の8ビットに値が出力されている間は上位側の4ビットは0が続きます。
その一方で上位側の4ビットに値が出力されている間は下位側の8ビットは0が続きます。
こういうことです。
4ビットと8ビットを連結して下のように表示したとき
0000 00000001
0000 00000010
0000 00000100
というように上位4ビットは0のままです。
出力が進んで
0000 10000000
0001 00000000
0010 00000000
のように上位側の出力になると下位側は0になります。
4ビット、8ビットのどちらを対象にして考えても0000または00000000が連続してしまう以上今までの考え方では無理だということがわかりました。
やっぱり古典的な考え方ですけれどここはオーソドックスにSTROBEとREADY、BUSYによって制御する場面です。
が。
しかし。
それはできません。
なにしろ入出力ともに12ビットでその全部をデータの入出力にしてしまうつもりですから、STROBEやREADYのためのビットが足りません。
12ビットじゃなくて10ビットにするか?
いやいやいや。
そんなトーシローみたいなまねはできませぬ。
ここは知恵の絞りどころであります。
左様。
頭は生きているうちに使うものであります。
さて。
というところで、次回に続きます。
PIC−USBIO using BASIC[第49回]
2022.9.6upload
前へ
次へ
ホームページトップへ戻る