tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル シリアル通信の割込み禁止
投稿日: 2009/10/18(Sun) 23:46
投稿者synt
お世話になります。
VB初心者ですがVB2005でマイコン基板とのシリアル通信ソフトを作成しております。
ネット情報や参考書を頼りにタイマを用いて、下記のような
送信割り込み、受信割り込み処理を作成したのですが、
割り込み禁止?の手続きがわからない為、途中で受信割り込みが
走ってしまい、うまくいかず困っています。
ご助言をお願いいたします。
〜〜〜〜〜以下抜粋〜〜〜〜〜〜〜〜〜〜
        ' 通信設定
        With SerialPort
            .PortName = com1
            .BaudRate = 38400                   ' 通信速度は38400bps
            .DataBits = 8                       ' データ長は8ビット
            .Parity = IO.Ports.Parity.Even      ' パリティチェック:偶数
            .StopBits = IO.Ports.StopBits.One   ' ストップビットは1
            .Handshake = IO.Ports.Handshake.None
                      ' ハードウェアによるハンドシェイクなし
       .ReceivedBytesThreshold = 1
        End With
        :

    '********************
    ' 送信割り込み
    '********************
    Private Sub tmrStmg_Tick(・・・) Handles tmrStmg.Tick
        :
        tmrStmg.Enabled = False ' 送信開始トリガクリア
        Call SendStart() '送信開始
        :
    End Sub
    '*****************
    ' 送信開始
    '*****************
    Private Function SendStart() As Object
        If SerialPort.IsOpen Then
            ' 送信開始
            Try
                SerialPort.Write(mSData, 0, mSDataL)←この処理の直後、受信割込発生
            Catch ex As Exception
                MessageBox.Show(・・・)
            End Try
        Else
        :
        End If
        :
    End Function
'**************************
' 受信割り込み
'**************************
    ' デリゲート型の宣言
    Delegate Sub RecieveDataDelegate(ByVal RecieveData As String)

    ' デリゲート型のプロシージャを宣言
    Private Sub SetRecieveData(ByVal DataString As String)
        _comdt_1.Text &= DataString
    End Sub

    ' SerialPortコントロールのDataReceivedイベントハンドラ
    Private Sub SerialPort_DataReceived(・・・) Handles ・・・

        ' デリゲート型の変数の宣言と生成
        Dim recieve As New RecieveDataDelegate(AddressOf SetRecieveData)
        Dim mRDataLen As Integer
        mRDataLen = SerialPort.ReceivedBytesThreshold
        Dim mRDataB(256) As Byte
        Try
            SerialPort.Read(mRDataB, 0, mRDataLen) ' 1バイトだけ受信
            If SerialPort.ReceivedBytesThreshold = 1 Then
          :
             SerialPort.ReceivedBytesThreshold = 4←この直後、再び受信割込発生
          :
          :
  

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。