PIC−USBIO using BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第165回]
●PICUSBIO−03(114)EUSART(16)同期モード(9)送受信プログラム(6)送信+受信プログラム
前回までのところでは同期モードでマスターが送信してスレーブが受信するプログラムと逆にスレーブが送信してマスターが受信するプログラムを作ってそれぞれをテストしました。
今回はそのプログラムを合体してマスターが送信してスレーブがそれを受信し、次にスレーブが送信してそれをマスターが受信するというプログラムを作って動作テストを行ないます。
同様のテストはSPI通信では[第128回]で行いました。
またI2C通信では[第148回]で行いました。
非同期通信ではマスターとスレーブの区別はありませんから片方から送信してもう片方がそれを受信するというテストを行ないました([第154回])。
今回は[第148回]のI2C通信のプログラムの同期通信版という位置づけになります。
マスター側のプログラムは長くなって1画面では表示できませんのでテキストで示します。
10 picout TRISB,$ff 20 picout SPBRGH,$27 30 picout SPBRG,$0F 40 picout BAUDCON,$18 50 picout TXSTA,$b0 60 picout RCSTA,$80 70 picout TXREG,$41:print 41:'A 80 if and(picin(PIR1),$10)=0 goto 80 90 picout TXREG,$42:print 42:'B 100 if and(picin(PIR1),$10)=0 goto 100 110 picout TXREG,$43:print 43:'C 115 if and(picin(TXSTA),$02)=0 goto 115 120 'picout TXSTA,0 130 d=picin(RCSTA) 140 d=picin(RCSTA) 150 d=picin(RCSTA) 190 picout TXSTA,$90 200 picout RCSTA,$a0 210 if and(picin(PIR1),$20)=0 goto 210 220 print HEX$(picin(RCREG)) 230 picout RCSTA,$a0 240 if and(picin(PIR1),$20)=0 goto 240 250 print HEX$(picin(RCREG)) 260 picout RCSTA,$a0 270 if and(picin(PIR1),$20)=0 goto 270 280 print HEX$(picin(RCREG)) |
10行から110行までがマスターが送信してスレーブがそれを受信するモードでのマスター側のプログラムです。
この部分は[第160回]のマスター側のプログラムと同じです。
ただし40行でBAUDCONに設定する値は$18にしてあります(前回参照)。
プログラムの後半部分は190行から260行までです。
ここはスレーブが送信してマスターが受信するモードのマスター側のプログラムです。
この部分は前回のマスター側のプログラムと同じです。
ただしもとのプログラムの初期設定部分(10行〜60行)は不要なので省いてあります。
115行では最後の送信が完了するのを待ちます。
当初は120行は必要と思って入れていたのですがこの記事を書く段階で不要であることがわかったのでコメント文にしてあります。
そのことは実際にテストをして確認済みです(下の画面ではまだコメント文にはなっていません)。
今回のプログラムの130行〜150行は待ち時間を稼ぐためのダミー命令です。
picin関数は実行時間がかかります(約6〜8msec、[第129回]参照])。
それを利用しています。
スレーブ側で受信を完了して送信に切り換えるまで待つ時間としてこれだけ(約18〜24msec)待たないとこのあとの受信部分でエラーが出てしまいます(テストして確認しました)。
受信側のプログラムは下の右側の画面のリストで説明をします。
10行から110行までがマスターが送信してスレーブがそれを受信するモードでのスレーブ側のプログラムです。
この部分は[第160回]のスレーブ側のプログラムと同じです。
ただし35行でBAUDCONに$18を設定する文を追加してあります(前回参照)。
プログラムの後半部分は120行から180行までです。
ここはスレーブが送信してマスターが受信するモードのスレーブ側のプログラムです。
この部分は前回のスレーブ側のプログラムと同じです。
ただしもとのプログラムの10行と15行は不要なので省いてあります。
右側(スレーブ側)のプログラムから先にスタートしました。
次に左側(マスター側)のプログラムを実行しました。
最後まで正しく実行されました。
PIC−USBIO using BASIC[第165回]
2023.1.24upload
前へ
次へ
ホームページトップへ戻る