2023.1.25
前へ
次へ
ホームページトップへ戻る


PIC−USBIO using BASIC

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第166回]



●PICUSBIO−03(115)EUSART(17)同期モード(10)送受信プログラム(7)送信+受信プログラム(2)

前回は先にマスターが送信してそれをスレーブが受信し次にスレーブが送信してそれをマスターが受信するというプログラムをマスター側とスレーブ側でそれぞれ作成して動作テストを行ないました。
[第149回]ではIC通信プログラムのテストでもう少し「プログラムらしい」プログラムを作ってテストをしました。
[第156回]では非同期通信のプログラムで同じことを行ないました。
今回は同じことを同期通信で行ないます。

前回と同様マスター側のプログラムは長くなって1画面では表示できませんのでテキストで示します。
   10 s$="How are you?"
   20 l=len(s$)
   30 picout RCSTA,0
   40 print hex$(picin(RCSTA))
   50 picout TRISB,$ff
   60 picout SPBRGH,$27
   70 picout SPBRG,$0F
   80 picout BAUDCON,$18
   90 picout TXSTA,$b0
  100 picout RCSTA,$80
  110 for n=1 to l
  120 ss$=mid$(s$,n,1)
  130 c=asc(ss$)
  140 if and(picin(PIR1),$10)=0 goto 140
  150 d=picin(TXSTA):'dummy
  160 picout TXREG,c
  170 next n
  180 if and(picin(PIR1),$10)=0 goto 180
  190 d=picin(TXSTA):'dummy
  200 picout TXREG,3:'etx
  210 if and(picin(TXSTA),$02)=0 goto 210
  220 d=picin(RCSTA)
  230 d=picin(RCSTA)
  240 d=picin(RCSTA)
  250 'jusin
  260 picout TXSTA,$90
  270 picout RCSTA,$a0
  280 if and(picin(PIR1),$20)=0 goto 280
  290 d=picin(RCREG)
  300 if d#3 print chr$(d);:goto 270
  310 print

やっていることは前回のプログラムと変わりません。
前回は単純にテストデータ(8ビットの文字コード)を送受信しただけでしたがそこのところを意味のある文字列の送受信に変えました。
10行から210行までがマスターが送信してスレーブがそれを受信するモードでのマスター側のプログラムです。
10行で文字変数s$に文字列を定義します。
120行でその文字列の先頭から順に1文字を切り出します。
MID$は文字列から任意の文字列を切り出す関数です。
130行でその1文字を8ビットの文字コードに変換します。
ASC()は1文字を1バイトの文字コードに変換する関数です。
160行でその文字コードを送信します。
前回のプログラムにはありませんでしたが今回は送信の前にダミー命令(150行、190行)を入れました。
前回よりも受信側の処理に時間がかかるようでこれ(約6〜8msecの時間待ち)がないと正しく送受信できません。
データ列を送信し終わったところでエンドコード(03)を送ります(200行)。
250行から310行までが後半部分です。
ここはスレーブが送信してマスターが受信するモードのマスター側のプログラムです。
290行で受信データを変数dに入れます。
300行でdの値を文字に変換してprint文で表示します。
CHR$()は1バイトのコードを文字コードとみなして対応する文字に変換する関数です。
300行では同時にデータ列の終わりの検出も行なっています。
’#’は’ノット イコール’です。
普通のBASICでは<>を使うものが多いと思います。

受信側のプログラムは下の右側の画面のリストで説明をします。

マスター側のプログラムとは送信受信の順序が逆になっているだけでやっていることは同じです。
10行から120行までがマスターが送信してスレーブがそれを受信するモードでのスレーブ側のプログラムです。
130行から230行までが後半部分です。
ここはスレーブが送信してマスターが受信するモードのスレーブ側のプログラムです。

先に右側(スレーブ)のプログラムを実行しました。


次に左側(マスター)のプログラムを実行しました。

プログラムは瞬時に実行されて見た目には左側の画面と右側の画面に同時に文字列が表示されたように見えます。
実際は先に右側に”How are you?”と表示された後で左側に”I’m fine.”と表示されるのですが人間の目には同時に表示されたようにしか見えません。

PIC−USBIO using BASIC[第166回]
2023.1.25upload

前へ
次へ
ホームページトップへ戻る