<紙>さんLOG

「パソコンヲタクの雑記帳」
 PC/Linux系/物理・化学で遊んでいます。
思いついたことを綴っています。

PC:PIC 接続[パラレル編](2)

2008年07月07日 | PIC・マイコン
                                                日記@BlogRanking
PCからPICにデータを送信する方法として、パラレル通信がある。
処理速度の違いを吸収して、確実に通信する場合、ハンドシェィク通信を行う。

ハンドシェィクとは、握手であり、確実に送達を確認し合うことである。
処理の手順を要約すると、以下のようになる。

送出側(PC)
1.ビジーOFFを待つ。
2.データをセットする。
3.ストローブをONにする。
4.ビジーONになったら、ストローブをOFFにする。
以上で、1単位データ(8ビット=1バイト)を送出する。

受取側(PIC)
1.ストローブONを待つ。
2.ビジーをONにする。
3.データを取り込む。
4.ストローブOFFを待って、ビジーをOFFにする。
以上で、1単位データを受取る。

PCのパラレルポートでは、ストローブはピン#1、ビジーはピン#11、
データはピン#2~9(8ビット)を使う。
(初期値は、ストローブ/ビジーともOFFにする。)

Active BASICによるPC側の1バイト送出、サンプルプログラムを示す。

(エラー処理は省略する)
(段付けのために、先頭に2B空白がある)
'------------------- < Active BASIC > -----------------
' 直接I/O 制御関数群(InpB、OutB)宣言
Declare Function InpB Lib "VBIOSCM_DLL.DLL" Alias "_InpB@4" (ByVal Port As Integer) As Integer
Declare Sub OutB Lib "VBIOSCM_DLL.DLL" Alias "_OutB@8" (ByVal Port As Integer, ByVal dat As Integer)
' 直接I/O 制御 開始/終了処理(IOSCM_Start、IOSCM_Stop)宣言
Declare Function IOSCM_Start Lib "VBIOSCM_DLL.DLL" Alias "_IOSCM_Start@0" () As Integer
Declare Function IOSCM_Stop Lib "VBIOSCM_DLL.DLL" Alias "_IOSCM_Stop@0" () As Integer
#prompt
'
Dim addr As Integer
'
IOSCM_Start() ' IOSCM 開始処理をコール
addr=&H378 ' プリンタポート、環境にあわせて変更
'
OutB(addr+2,0) ' データポートを出力モードに設定
'
Out_Byte( Asc("A") ) ' ハンドシェィクによる1バイト送出
'
IOSCM_Stop() ' IOSCM 終了処理をコール
End ' プログラム終了。
'---------------- 1バイト送出サブルーチン
Sub Out_Byte ( data As Byte )
 While ( InpB(addr+1) and &H80 ) = 1
 Wend ' BUSY OFF を待つ
 OutB(addr,data) ' データをセットする
 OutB(addr+2,1) ' STROBE を ON にする
 While ( InpB(addr+1) and &H80 ) = 0
 Wend ' BUSY ON になったら
 OutB(addr+2,0) ' STROBE を OFF にする
End Sub
' -------------- プログラム終り
合計10ピンも使うので、40ピンPICでないと使えないかも。

お手数をおかけします。2クリック(投票を)お願いします ⇒ 日記@BlogRanking

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。