音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

很奇怪的通信問題

作者:云開霧散 欄目:驅(qū)動編程
很奇怪的通信問題
做了一個(gè)單片機(jī)和PC機(jī)通信的程序,在WIN2000下可以正常通信,在XP下單片機(jī)可以接收到來自PC的控制字,并發(fā)出數(shù)據(jù),可是VB程序中卻收不到來自于單片機(jī)的數(shù)據(jù)。
把源程序發(fā)來大家?guī)兔纯,在最奇怪的是,在XP下我以前也能正常通信,可現(xiàn)在它死活沒反應(yīng)

Option Explicit

Private Sub CMDclose_Click()
If MSComm1.PortOpen = True Then
   MSComm1.PortOpen = False
End If
Label5.Caption = "串口關(guān)閉"
MSComm1.InBufferCount = 0
End Sub

Private Sub CMDclr_Click()
TextPOW1.Text = ""
TextPOW2.Text = ""
TextPOW3.Text = ""
TextPOW4.Text = ""

End Sub
Private Sub CMDquit_Click()
If MSComm1.PortOpen = True Then
   MSComm1.PortOpen = False
End If
End
End Sub
Private Sub Combo1_Click()
Dim OldPort As Integer, NEWPORT As Integer

On Error Resume Next
OldPort = MSComm1.CommPort
NEWPORT = Combo1.ListIndex + 1

If OldPort <> NEWPORT Then
   MSComm1.PortOpen = False
End If
MSComm1.CommPort = NEWPORT
If MSComm1.PortOpen = 1 Then
MsgBox "該串口已用,請選擇其它端口"
End If

End Sub

Private Sub Form_Load()
Dim i As Integer
If MSComm1.PortOpen = True Then
      MSComm1.PortOpen = False
      End If
Me.Show
BackColor = RGB(55, 175, 0)
ForeColor = RGB(0, 0, 255)
FontName = "楷體_GB2312"
FontSize = 15
FontBold = True
CurrentX = 1300
CurrentY = 350
Print "MIC 數(shù)據(jù)采集系統(tǒng)"
For i = 1 To 4
Combo1.AddItem "COM" & i
Next i

With MSComm1
.InputLen = 0            '一次讀完全部緩沖區(qū)
.InBufferCount = 0       '清除接收緩沖區(qū)
.OutBufferCount = 0      '清除發(fā)送緩沖區(qū)
.SThreshold = 1          '發(fā)送緩沖區(qū)為空時(shí)發(fā)送
.RThreshold = 16          '每接到16個(gè)數(shù)據(jù)就觸發(fā)ONCOMM事件
Label4.Caption = MSComm1.Settings
End With
End Sub
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
Private Sub CMDopen_Click()
Dim outputhex(1) As Byte
Dim outhex   As Integer
Dim outhex1  As Integer
Dim i        As Integer
Dim j        As Integer
i = 0
j = 0
With MSComm1
If MSComm1.PortOpen = False Then
   MSComm1.PortOpen = True
   End If
While i < Len(Trim(TextCMD.Text))
     outhex = str_int(Mid(TextCMD.Text, i + 1, 1))
      If outhex = -1 Then
            MsgBox "輸入錯(cuò)誤"
      End If
     outhex = outhex * 16
      outhex1 = str_int(Mid(TextCMD.Text, i + 2, 1))
       If outhex = -1 Then
            MsgBox "輸入錯(cuò)誤"
       End If
      outputhex(j) = outhex + outhex1
     
      i = i + 2
      j = j + 1
    MSComm1.Output = outputhex()
Wend


.InBufferCount = 0        '清空接收緩沖區(qū)
.RThreshold = 16


End With

End Sub

Function str_int(a As String) As Integer
SELECT Case a
       Case "0" To "9"
            str_int = Asc(a) - Asc("0")  '48
       Case "A" To "F"
            str_int = Asc(a) - 55        ' 55
       Case "a" To "f"
            str_int = Asc(a) - 87         ' 87
       Case Else
            str_int = -1
       End SELECT
    
End Function

Private Sub MSComm1_OnComm()

Dim BYIN() As Byte
Dim ds(16) As Integer

Dim POSNEG(16) As Integer


Dim R1 As SINGLE
Dim R2 As SINGLE

Dim R3 As SINGLE
Dim R4 As SINGLE

Dim R5 As SINGLE
Dim R6 As SINGLE

Dim R7 As SINGLE
Dim R8 As SINGLE

Dim bufPOW1$, bufPOW2$, bufPOW3$, bufPOW4$
bufPOW1 = ""
bufPOW2 = ""
bufPOW3 = ""
bufPOW4 = ""
With MSComm1
SELECT Case .CommEvent
       Case comEvReceive
    Label5.Caption = "端口打開" + vbCr + "正在接收---"
      On Error Resume Next
       Dim i As Integer
     BYIN = Trim(MSComm1.Input)
     POSNEG(0) = 1
     POSNEG(1) = 1
     POSNEG(2) = 1
     POSNEG(3) = 1
     POSNEG(4) = 1
     POSNEG(5) = 1
     POSNEG(6) = 1
     POSNEG(7) = 1
     POSNEG(8) = 1
     POSNEG(9) = 1
     POSNEG(10) = 1
     POSNEG(11) = 1
     POSNEG(12) = 1
     POSNEG(13) = 1
     POSNEG(14) = 1
     POSNEG(15) = 1
   
              
     For i = 0 To 15
     ds(i) = BYIN(i)
     If ds(i) >= 240 Then
        ds(i) = ds(i) - 240
        POSNEG(i) = -1
     End If
     ds(i) = (ds(i) \ 16) * 10 + ds(i) - (ds(i) \ 16) * 16
     Next i
     
     
     R1 = ds(0) + ds(1) / 100
     R2 = POSNEG(2) * (ds(2) + ds(3) / 100)
     R3 = ds(4) + ds(5) / 100
     R4 = POSNEG(6) * (ds(6) + ds(7) / 100)
     R5 = ds(8) + ds(9) / 100
     R6 = POSNEG(10) * (ds(10) + ds(11) / 100)
     R7 = ds(12) + ds(13) / 100
     R8 = POSNEG(14) * (ds(14) + ds(15) / 100)
      
     bufPOW1 = bufPOW1 + CStr(R1) + "MW" + "  " + CStr(R2) + "DBM" + vbCrLf
     TextPOW1.Text = bufPOW1
     
     bufPOW2 = bufPOW2 + CStr(R3) + "MW" + "  " + CStr(R4) + "DBM" + vbCrLf
&
2樓: >>參與討論
bluefancy
大致看了你的程序,有一點(diǎn)不太理解,
為什么你每次都要用 .InBufferCount = 0 清空接收緩沖區(qū),其實(shí)你設(shè)置.InputLen = 0  后,每次讀緩沖區(qū),就清空了,你如果.InBufferCount = 0 ,就說明接受緩沖區(qū)是空的,你把.InBufferCount 改成1024就應(yīng)該可以了,
還不行,還可以和我聯(lián)系!  QQ:10509134

你說的那個(gè)程序不是什么串口調(diào)試串口的程序,是我臨時(shí)自己寫的一個(gè)簡單的小例子,只有三五行示范了一下。我重裝機(jī)器以后,沒裝VB,所以現(xiàn)在也沒法發(fā)給你,其實(shí)也沒什么用,你要想看也可以看看MISSWANG還有嗎



參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請問哪里有下DebugPrint的,急用,謝謝
winxp ddk and win2003 ddk
推薦一個(gè)軟件BUS HOUND,用來做接口開發(fā)調(diào)試的好工具!
經(jīng)典error LNK2001問題
ISP編程
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號